Database 这两种DB设计方法中哪一种更好?
我有以下实体,EntityA、EntityB、EntityC和EntityD:Database 这两种DB设计方法中哪一种更好?,database,database-design,entity-relationship,Database,Database Design,Entity Relationship,我有以下实体,EntityA、EntityB、EntityC和EntityD: +----------+ +----------+ +----------+ +----------+ | EntityA | | EntityB | | EntityC | | EntityD | +----------+ +----------+ +----------+ +----------+ | FC1 | | FC1
+----------+ +----------+ +----------+ +----------+
| EntityA | | EntityB | | EntityC | | EntityD |
+----------+ +----------+ +----------+ +----------+
| FC1 | | FC1 | | FC1 | | FC1 |
| FC2 | | FC2 | | FC2 | | FC2 |
| FC3 | | FC3 | | FC3 | | FC3 |
| FC4 | | FC4 | | FC4 | | FC4 |
| EA1 | | EB1 | | EC1 | | ED1 |
| EA2 | | EB2 | | EC2 | | ED2 |
| EA3 | | | | EC3 | | ED3 |
| EA4 | | | | | | ED4 |
+----------+ +----------+ +----------+ +----------+
每个实体都有在所有实体中通用的属性FC1、FC2、FC3和FC4;某些属性是特定于实体的。此外,每个实体都引用域中的每个其他实体。实体之间存在多对多关系
以下哪种DB设计更好?或者,除了下面描述的两种方法之外,还有其他更好的方法吗
(一)
+-------------+
|链接|
+-------------+
+---|id_T1(FK)|
+---|id_T2(FK)|
+---------------+ | +-------------+
|共同表|
+---------------+ |
+-->|id(PK)|我认为你对问题的很多部分都回答得很好。我只是通知其他几点
注1:关于TableCommon
策略
我强烈建议使用TableCommon
保存公共字段。它对您的评估参数(性能、冗余、可伸缩性、维护等)没有太多副作用
注2:关于链接
表格策略
此处重要的参数包括:
实体A、B、C和D中的记录数
它们之间的多对多关系中的记录数
这些多对多关系中的积垢数量
如果您有很多记录,并且您有很多积垢,并且它们的性能至关重要,则不应使用链接
表格策略
但是,如果只有两个或多个表(例如EntityA
和EntityB
)具有多对多关系中的大量记录,则可以对它们使用EntityAB
策略仅,对其他表使用Link
表策略
注3:在实体A、B、C和D之间使用事实表
我知道它的设计非常糟糕
但是,基于评估参数,它在某些情况下可能是有用的
像这样使用事实表:
在一个表中收集所有实体A、B、C和D的F.K
第一缺点:
如果多对多关系有许多其他字段,我们不能使用此策略
该事实表中有许多错误的无效
优点:
您可以在一条记录中获取所有EntityA
关系
减少实体的数量
减少记录的数量李>
您的问题可能有答案@WalterMitty,非常感谢,我熟悉继承映射技术。我试图为问题中的许多多对多关系提供解决方案(注2和注3)。
+-------------+
| Link |
+-------------+
+---| id_T1(FK) |
+---| id_T2(FK) |
+---------------+ | +-------------+
| TableCommon | |
+---------------+ |
+-->| id(PK) |<----+-------+------------------+------------------+
| | FC1 | | | |
| | FC2 | | | |
| | FC3 | | | |
| | FC4 | | | |
| +---------------+ | | |
| | | |
| +----------+ +----------+ | +----------+ | +----------+ |
| | TableA | | TableB | | | TableC | | | TableD | |
| +----------+ +----------+ | +----------+ | +----------+ |
+---| id(FK) | | id(FK) |--+ | id(FK) |--+ | id(FK) |--+
| EA1 | | EB1 | | EC1 | | ED1 |
| EA2 | | EB2 | | EC2 | | ED2 |
| EA3 | | | | EC3 | | ED3 |
| EA4 | | | | | | ED4 |
+----------+ +----------+ +----------+ +----------+
+----------+ +----------+ +----------+ +----------+
| TableA | | TableB | | TableC | | TableD |
+----------+ +----------+ +----------+ +----------+
| id(PK) |<--+ +-->| id(PK) | | id(PK) | | id(PK) |
| FC1 | | | | FC1 | | FC1 | | FC1 |
| FC2 | | | | FC2 | | FC2 | | FC2 |
| FC3 | | | | FC3 | | FC3 | | FC3 |
| FC4 | | | | FC4 | | FC4 | | FC4 |
| EA1 | | | | EB1 | | EC1 | | ED1 |
| EA2 | | | | EB2 | | EC2 | | ED2 |
| EA3 | | | | | | EC3 | | ED3 |
| EA4 | | | | | | | | ED4 |
+----------+ | | +----------+ +----------+ +----------+
| |
+----------+ | | +----------+ +----------+ +----------+
| TableAB | | | | TableAC | | TableAD | | TableBC |
+----------+ | | +----------+ +----------+ +----------+
| id_1(FK) |---+ | | id_1(FK) | | id_1(FK) | | id_1(FK) | ...
| id_2(FK) |------+ | id_2(FK) | | id_2(FK) | | id_2(FK) |
+----------+ +----------+ +----------+ +----------+