关系数据库 - 非平衡层次结构建模

时间:2013-07-04 10:02:30

标签: database database-design relational-database er-diagram

我有一些标记在不同类别下的实体。 但是,有些类别有不同的子类别(最多2个级别),但层次结构不统一 - 有些类别的高度为1 - 2.

我的想法是为每个类别创建一个单独的表,为每个级别创建一个表,然后将实体ID链接到叶子,但它看起来效率不高。

喜欢听到你的想法!

1 个答案:

答案 0 :(得分:1)

设计更灵活:

enter image description here

在搜索属于给定类别的实体时,首先在CATEGORY中搜索其所有子类别,子子类别等。根据DBMS,这可能在单个递归查询中完成。

在层次结构中包含所有类别后,只需加入CATEGORY_ENTITY和ENTITY并按这些CATEGORY_ID进行过滤。

是的,如果类别名称在全球范围内是唯一的还是仅在兄弟姐妹中?根据这一点,您可能希望分别在NAME或{PARENT_ID,NAME} 1 上添加UNIQUE约束。


1 但请检查DBMS如何处理复合UNIQUE约束中的NULL。