[英]Is it a bad idea to make a generic link table?
想象一下具有高度规范化的元数据库。 如果我试图在这里描述它,它将炸毁该输入字段。 但是想像一下,整个数据库,所有表中的每个关系都通过一个称为link的表。 它具有以下字段: master_class_id,master_attr_id,master_obj_id,class_id2,obj_id2 。 该表可以轻松表示各种关系:1:1、1:n,m:n,self:self。
我看到该表将变得HUUUUGE的问题。 那是不好的做法吗?
这在两个帐户上是错误的:
这将是所有查询的巨大瓶颈,并且将消除吞吐量的任何机会。
设计不良的后果是:您应该能够更简洁,更接近现实地描述事物。 如果这确实是存储数据的最佳方法,则可以考虑分区甚至其他范式,而不是关系型
一句话, 是的 , 这是一个坏主意
在不涉及太多细节的情况下,我将提供以下内容:
通常,高层实体很容易识别,例如客户。
这通常是不好的做法,但不是因为表很大。 问题是您正在将不相关的数据混合在一张表中。
之所以将链接保留在单独的表中,是因为您不需要一起使用它们。
数据本身也是一个常见的错误: 您不应仅在一个表中混合两组数据,因为如果数据本身不相关,则字段相似。
关系数据库实际上不适合该模型。
可以实现它,但是会很慢。 主要缺点是您将无法有效地索引链接。
但是,此设计在两种情况下可能有用:
这仅存储元数据:实体之间的声明关系。 实际数据存储在普通的关系表中,因此此链接仅用于显示结构,而不用于实际查询中。
这会存储一些结构复杂但包含很少数据的结构,因此易于开发会加重性能缺陷。
这种设计可以在几个ORM
看到(我什至开发了一个)。
我仍然看不到这种类型的桌子的目的。 如果表A与表B一对多,则A将仍然具有PK,而B将仍然具有PK。 A通常包含B的FK。
因此,在Master_Table中,您将必须存储A PK,B FK,这仅是已经存在的副本。 您唯一会丢失的是表A中的FK,但您只是将其迁移到了一个巨大的表中,数据库,dba和使用db进行编码的任何人都难以处理。
这些表最经常出现在Access中,并显示在DailyWTF上,因为它们难以阅读和理解。
哦! 一个主要问题是,要使该表无处不在,您将必须创建通用列,这可能最终会破坏数据完整性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.