我有一些被标记在不同类别下的实体。但是,有些类别有各种子类别(最多 2 个级别),但层次结构并不统一 - 有些具有 1 - 2 的高度。
我的想法是为每个类别创建一个单独的表,为每个级别创建一个表,然后将实体 ID 链接到叶子,但是,它似乎不是很有效。
喜欢听听你的想法!
我有一些被标记在不同类别下的实体。但是,有些类别有各种子类别(最多 2 个级别),但层次结构并不统一 - 有些具有 1 - 2 的高度。
我的想法是为每个类别创建一个单独的表,为每个级别创建一个表,然后将实体 ID 链接到叶子,但是,它似乎不是很有效。
喜欢听听你的想法!
还有一个更灵活的设计:
在搜索属于给定类别的实体时,首先在 CATEGORY 中搜索其所有子类别、子子类别等。根据 DBMS,这可能在单个递归查询中完成。
在层次结构中拥有所有类别后,只需加入 CATEGORY_ENTITY 和 ENTITY 并按这些 CATEGORY_ID 进行过滤。
顺便说一句,类别名称应该是全球唯一的还是仅在兄弟姐妹中?根据这一点,您可能希望分别在 NAME 或 {PARENT_ID, NAME} 1上添加 UNIQUE 约束。
1但请检查您的 DBMS 如何处理复合 UNIQUE 约束中的 NULL。