sql - 跨 3 个实体的多对多关系层次结构
问题描述
我有如下要求,有三个实体,比方说,实体 1 (E1)、实体 2(E2)、实体 3(E3)(所有三个实体的属性都具有相同的属性,除了实体 1 只有一个完整属性集的子集)
关系就这样发展
- E1可以链接到另一个E1
- E1可以有一个或多个E2
- E1可以有一个或多个E3
- E2/E3可以关联多个E1
- E2可以链接到另一个E2
- E2 可以有一个或多个 E3
- E3可以关联多个E2
*(E3不能链接到另一个E3)
由于它们具有相似的属性,我可能想到的表设计是有一个带有 ID 和 TYPE 的表(表示它是 E1/E2/E3)。然后,一个只有 PARENTID 和 CHILDID 的链接表。
但由于 E1 只有其他实体具有的属性子集,我觉得这种方法存在非规范化。我们将存储数百万条记录(如果所有三个实体都在一个表中)。有没有更好的标准化和性能效率更高的方法?
SQL 服务器版本:Microsoft SQL Server 2008 R2
解决方案
推荐阅读
- c - C - 如何显示和删除 file.txt 中的数据
- bit-manipulation - 将压缩半字节扩展为 5 位组
- angular - location.reload() 和 location.replace(url) 在 Angular 6 中的 Electron 中不起作用
- java - 使用 Jackson 中的自定义序列化程序序列化嵌套对象时出现 JsonGenerationException
- vuetify.js - 清除图标在 vuetify 的组合框中不起作用
- oracle - Oracle 12c,以序列为默认值的导出表,附加架构
- .net - 是否从 ApplicationException 派生?
- java - Spring关系在不加载子类的情况下获取子ID
- javascript - 多个 Websocket 的 Javascript 线程模型
- python - Python中H2O DataFrame的中文文本