Sql server 多对多关联表-是否习惯在这些表中添加其他列?

Sql server 多对多关联表-是否习惯在这些表中添加其他列?,sql-server,database,database-design,Sql Server,Database,Database Design,我们在数据库中遇到了以下情况。我们有表“A”和表“B”,它们具有M2M关系。关联表名为“AB”,包含表“a”的FK列和表“B”的FK列。现在,我们已经确定需要存储有关此关联的其他数据。例如,关联发生的日期、谁建立了关联等。我们决定将这些附加列放入“AB”关联表中。然而,有些事情告诉我,这是不赞成的数据库纯粹主义者。另一方面,创建一个额外的表来存储这些相关数据对我们来说毫无意义 流行的想法是什么?如果数据实际上属于关系,而不是某个单独的实体……那么是的,把它放在数据透视表中。我看不出有任何错误。如

我们在数据库中遇到了以下情况。我们有表“A”和表“B”,它们具有M2M关系。关联表名为“AB”,包含表“a”的FK列和表“B”的FK列。现在,我们已经确定需要存储有关此关联的其他数据。例如,关联发生的日期、谁建立了关联等。我们决定将这些附加列放入“AB”关联表中。然而,有些事情告诉我,这是不赞成的数据库纯粹主义者。另一方面,创建一个额外的表来存储这些相关数据对我们来说毫无意义


流行的想法是什么?

如果数据实际上属于关系,而不是某个单独的实体……那么是的,把它放在数据透视表中。

我看不出有任何错误。如果信息是关于协会本身的,那么它似乎是存储信息的绝对正确的地方


如果您要创建一个新表来存储它,它只会以一对一的方式与Association表关联。这实际上只是扩展关联表。

将关联数据存储在关联表本身中最有意义。我从没听说过有人反对这种方法。。。它实际上会比将此信息存储在单独的表中更快,因为它将为您保存一个用于检索它的连接。

我以前做过这件事,不认为有什么问题。如果数据与关系有关,比如在您的案例中,它是关联发生的日期,并且不是专门属于一个表或另一个表,那么关联表就是放置它的位置。

在本设计中,您将关联本身视为一个实体。如果该真实实体(其他两个实体之间的关系)具有自己的属性,则表示该关系的表也应表示该关系的属性

如果您创建了一个单独的表,您将使用该表建模什么真实实体?与两个实体之间关系相关但非直接部分的辅助信息?这很难概念化,似乎没有多大的设计意义,而且几乎肯定会表现得更糟。

“然而,有些事情告诉我,这是数据库纯粹主义者不赞成的。”

我无法想象任何一个精通数据库设计的人会对你的设计皱眉,如果你的设计真的是你正在处理的现实的准确模型。

在中,我主张使用链接表而不是简单的FK关系。好处之一是,当关系开始有越来越多的数据与之关联时,它就成为一个实体。特别是对于生效日期和更改,即使是在简单的多对一层次结构中,使用多对多链接表设计仍然很有意义。显然,您已经有了对链接表的需求——现在很明显,该关系还附加了其他属性

当然,事实证明这些是放置这些属性的正确位置;您可能会遇到一些困难,将它们放在任何一个表中,或者是使用规范化,或者仅仅是不正确的语义。这也为索引提供了很好的选项,因为您可以将生效日期或关系状态的索引添加到此相对较窄的表中,而无需决定它可能需要添加到其他实体表中的哪些索引

我不认为任何有经验的数据库设计师会反对,如果你展示了这个设计,以及它的设计特点和优势是如何在实践中得到应用的。对我来说,它不需要广泛的设计理由