【问题标题】:database schema design for grouping entities用于分组实体的数据库模式设计
【发布时间】:2015-04-18 02:52:49
【问题描述】:

我正在尝试重构旧数据库架构的某些部分,但无法提出正确的设计。

有问题的实体是:

样本、论文、研究

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

论文和研究各有各的属性,互不兼容

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

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

它的外观如下:

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

它的外观如下:

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

【问题讨论】:

  • “但是,这将论文和研究的分组分开。” 我不确定我是否理解。研究和论文如何相互关联?
  • 论文和研究有不同的属性,比如论文有作者列表、出版日期等,而研究可能有项目代码等内容
  • 我没有问他们有什么属性;我问他们是什么关系。您曾说过“这将论文和研究的分组分开”。在现实世界中,论文和研究通常是如何组合在一起的?
  • 对,我现在明白了,研究和论文可以通过拥有相同的样本来关联,所以说 paper1 = {sample1,sample2,sample3}, study1 = {sample1, sample4} - sample1 在论文 1 和研究 1。论文和研究的样本可以是不相交的,可以是相互交叉的或彼此的子集,并且样本可以是论文/研究的多种组合 - 例如paper1、study1 和 study2 中的 sample1

标签: database database-design relational-database database-schema


【解决方案1】:

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

架构没有明确的分组...

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

问题是,组实体很弱。除了 ID 之外,很难为该实体提出任何属性。使用这种方案思想并不方便。当用户编辑纸张组时,您必须选择如何处理这种情况。如果所有其他论文\研究也“看到”这种变化,或者您必须创建\搜索编辑组并将其分配给论文。如果没有与组相关的额外业务逻辑,我认为这是错误的做法。通常,当设计中出现弱实体时,这意味着抽象集选择不正确。目前,我不知道如何证明 Group 实体的合理性。

【讨论】:

  • 当前的问题是架构没有明确的分组,例如我想出的分组,因为它的使用已经发展
猜你喜欢
  • 2016-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2021-03-28
  • 2013-09-28
相关资源
最近更新 更多