首页 > 解决方案 > 跨 3 个实体的多对多关系层次结构

问题描述

我有如下要求,有三个实体,比方说,实体 1 (E1)、实体 2(E2)、实体 3(E3)(所有三个实体的属性都具有相同的属性,除了实体 1 只有一个完整属性集的子集)

关系就这样发展

  1. E1可以链接到另一个E1
  2. E1可以有一个或多个E2
  3. E1可以有一个或多个E3
  4. E2/E3可以关联多个E1
  5. E2可以链接到另一个E2
  6. E2 可以有一个或多个 E3
  7. E3可以关联多个E2

*(E3不能链接到另一个E3)

ERD

由于它们具有相似的属性,我可能想到的表设计是有一个带有 ID 和 TYPE 的表(表示它是 E1/E2/E3)。然后,一个只有 PARENTID 和 CHILDID 的链接表。

但由于 E1 只有其他实体具有的属性子集,我觉得这种方法存在非规范化。我们将存储数百万条记录(如果所有三个实体都在一个表中)。有没有更好的标准化和性能效率更高的方法?

SQL 服务器版本:Microsoft SQL Server 2008 R2

标签: sqlsql-servermany-to-manyhierarchical-data

解决方案


推荐阅读