用于分组实体的数据库模式设计

database schema design for grouping entities

我正在尝试重构遗留数据库模式的某些部分,但在想出正确的设计时遇到了问题。

相关实体是:

样本、论文、研究

论文与许多样本相关联
研究与许多样本相关

论文和研究各有特点,互不相容

样本可以与多篇论文和多项研究相关联

但是,这会将论文和研究分组分开。

外观如下:

我想到的另一种方法是,由于论文和研究都只是将样本组合在一起,我可以将它们组合为一个,并将组中的 FK 放入各自的 paper/study table 中。

外观如下:

我想知道这些设计看起来是否合理,两种不同的设计之间是否有任何取舍?还有其他方法可以对关系进行建模吗?

我认为第一个设计是正确的。有两个 M:M 关系,Paper - Sample 和 Study - Sample。它们在域逻辑上是不同的,因此将它们组合成一个关系并为此目的引入额外的实体是没有意义的。第一个模式是一个很好的规范化模式。你的目标是什么?你试图解决什么问题?

the schema doesn't have explicit grouping ...

好的,如果您确实需要将组作为一个单独的实体,您的设计可能如下所示:

问题是,团体实体很弱。除了 ID 之外,很难向该实体提出任何属性。使用这种方案思想并不方便。当用户编辑论文的组时,你必须选择,如何处理这种情况。如果所有其他 papers\studies 'see' 也发生这种变化,或者您必须 create\search 编辑组并将其分配给文件。如果没有与组相关的额外业务逻辑,我认为这是错误的做法。通常,当设计中出现弱实体时,这意味着未正确选择抽象集。目前,我不知道如何证明组实体的合理性。