Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 这两种DB设计方法中哪一种更好?_Database_Database Design_Entity Relationship - Fatal编程技术网

Database 这两种DB设计方法中哪一种更好?

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:

+----------+    +----------+    +----------+    +----------+
|  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) |
    +----------+          +----------+    +----------+    +----------+