【问题标题】:A pivot table may have more fields than just Ids [duplicate]数据透视表可能具有比 ID 更多的字段 [重复]
【发布时间】:2016-02-16 14:05:37
【问题描述】:

我需要连接两个表:disciplineclass
这将是一个 N:N 关系,所以我将创建一个新表 class_discipline

我的数据透视表class_discipline 是否有比两个表中的Ids 更多的字段?这是一个好习惯吗?
如果是的话,我应该遵循某种规则来做这样的事情吗?

让我解释一下情况:我将从excel文件中导入一些数据,我无法更改此文件的数据(我的大学提供)。
这个文件有一些数据不适合disciplineclass 表。所以我想我应该将这个“额外数据”插入到数据透视表中。

【问题讨论】:

  • @jso 请阅读您发布的链接。这不是我要问的或我的情况。
  • 我主要指的是该线程中的答案。虽然随着问题的更新,它现在看起来有点不同了。

标签: mysql database-design many-to-many relational-database


【解决方案1】:

您的表class_discipline 可以包含任意数量的列。

通常,该联结表中的任何列都表示关系的一个属性。在这种情况下,如果 classdiscipline 之间的关系需要任何规范,那么可以,使用更多列。

例子:

假设您有表 studentscourses。为了定义谁注册了哪个课程,您将创建仅包含student_idcourse_idstudent_course 表。但是,如果您想知道学生何时注册,则需要将此信息保存在某处(它不是studentcourse 的属性)。现在是在student_course 表中添加新列的时候了。

好的还是坏的做法?

在联结表中为关系属性使用附加列通常是一种很好的做法。但是,您需要记住,如果删除关系,您会丢失列值。

其他 cmets:

  • 如果您在应用程序中或通过 ORM 使用此类结构,请注意纯 N:N 关系是类的字段。一旦您需要关系的更多属性,您就需要有一个单独的类。

【讨论】:

  • 但这不是“坏习惯”吗?我正在努力寻找做事的最佳方式。
  • 不,通常这是一个好习惯。将再次更新答案。
猜你喜欢
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多