将相似实体存储在同一个表中,而不是存储在数据库中的多个表中

时间:2017-09-20 18:22:51

标签: mysql database orm relational-database erd

我们在数据库中有2个实体代表:
- 具有属性(x,y,z,r)的实体A. - 具有属性(x,y,z,s)的实体B.

2个实体有3个相同的属性,只有1个不同的属性。虽然非常相似,但它们并不相关,也不打算在业务逻辑中一起使用。

有两种方法(可能更多)来表示这些:

  1. 创建两个单独的表,每个实体一个。
    这是直截了当的方法。它导致两个相对较小的表,以及更清晰的查询和业务逻辑。但是这些表几乎是相同的,所以它在某种程度上显然是多余的(想象一下,相同的属性远远超过3)。
  2. 创建一个包含5个属性(x,y,z,r,s,type)的共享表。
    (type)表示在该行中表示的实体的类型(A或B)。这假设属性(r)和(s)不是强制性的,因此我们不能依赖它们来确定实体的类型。
    例如,这是Wordpress用于表示帖子和页面(以及一些其他实体)的方法。它导致一个相对较大的表包含大量 null 字段,以及相对混乱的查询和业务逻辑来过滤行并逻辑地分离实体。但我们最终只得到一个唯一的表而不是两个冗余的表。
  3. 我的问题是:

    1-每种方法的其他优点和缺点是什么?

    2-这两种方法的用例是什么?

    3-如果实体数量增加,或者它们的关系复杂性增加,那么一种方法明显优于另一种吗?就像是代替2个实体一样,有20个。或者实体与数据库中的其他实体有多对多的关系。

    谢谢!

1 个答案:

答案 0 :(得分:0)

  

2个实体有3个相同的属性,只有1个不同的属性。虽然非常相似,但它们并不相关,并且不打算在业务逻辑中一起使用。

如果不了解您的架构/模型,我会说两个实体是否具有相似的属性,但是"不相关"在业务逻辑中,我强烈建议采用方法1.我不知道每个实体有多少属性是多么重要,如果它们不相关的话。由于类似的属性,将不相关的数据放在同一个表中并不是一个好的数据库设计。有关您的架构的更多信息也可能有助于决策制定。