如何构建模型以正确,有效地表示关系数据库中的树状数据?


13

基于使用SQL问题在关系数据库中遍历树状数据的方法,我想知道如何在考虑物理影响的情况下定期用于在关系数据库中描述树状数据的方式?

我假设RDBMS除了常规的SQL ANSI或常用功能之外,没有其他特殊功能来处理这些功能。

毫无疑问,我一直对MySQL和PostgreSQL以及最终对SQLite感兴趣。

Answers:


8

我相信他会去寻找类似二叉树的东西。我只想包括三个与同一个表的唯一ID关联的键,一个键用于左边,一个键用于右边的孩子,一个键用于父级。

即-(非常多的伪代码)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

对双向链接项的考虑是,在此模式下树位置的任何更改将导致不少于3次更新,而不是一次。如您所言,这也是一个大的假设,即所请求的是正向/反向二叉树。
REW

的确,根据我的经验,由于我经常不得不遍历一棵树,因此我更倾向于使用双链表而不是单链表。但在很多情况下,这是没有必要的
Patrick

这绝对取决于基础模型。我认为,如果这是正确的模型,那么Patrick给出的答案就足够了。
jcolebrand

6

如果每个节点确实是同一数据实体,则该范式仍将表示每个实体一个表,以及一个用于树遍历的链接列,其中每个节点仅链接一次。

对于在树中多个点链接的实体,将使用单独的链接表或多个不同的值列。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.