【问题标题】:Is merging two many to many relation in one relation table better than seperated relations?在一个关系表中合并两个多对多关系是否比分离关系更好?
【发布时间】:2018-02-05 02:46:02
【问题描述】:

我有一个树表,其中两个与第三个表有多对多的关系。现在我想知道我是否将这些关系合并在一起并为此关系创建一个关系表是一种不好的做法吗?

我认为这种设计使我的关系和操作更易于管理和理解。但我担心性能。 我想知道哪一种方式的性能更好?

共享中间表,我添加它的图片还是为每个关系创建一个中间表?

【问题讨论】:

  • 我宁愿合并tbl_2tbl_3
  • 它们有许多不同的数据和字段,在我的 ORM (laravel-Eloquent) 中不支持继承的模型映射。
  • 你没有标记 ORM 或 laravel。但是 - 您可以使用 hasOne 关系(Movie has-one Media and Book has-one Media 而不是Movie extends Media and Book extends Media)来解决。然后,您可以拥有一个单独但干净的联结表 media_tags,而不是两个表 books_tagsmovie_tags 或多态关系。
  • 3 路多:多映射可能是一个好主意,也可能不是一个好主意。这取决于每个方向有多少,表有多大,在将其用于 2 路但重复时,您需要使用 DISTINCTGROUP BY 的频率等。

标签: mysql database database-design


【解决方案1】:

复杂的交叉路口本身并不坏。 prescriptions 表中的一行很可能具有 doctor_idpatient_idpharmacy_id 值。这是有效的,因为一个单一的处方代表了医生、病人和药房的汇合(加上一些其他信息,这些信息可以被分解到更多相关的表格中)。重要的部分是处方只能用几个外键来表示。

你所拥有的是不同的。您正在描述tbl_1 中的一行可以链接到tbl_2 tbl_3 的情况,具体取决于rel_type 的值。多个rel_types 可以进行多个连接。 很糟糕,因为您无法在tbl_x_id 上创建可执行的外键约束。乍一看,它可能看起来更简单,因为只有一个连接表,但它隐藏了很多复杂性,这在以后会受到伤害。它的性能会更差,但真正的问题是缺乏参照完整性。

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多