如何用多个一对多关系表示 table
How to represent a table with several one-to-many relationships
我有一个 table、A
,其行与其他几个 table 具有多对一关系。其他 table 中的行——B
、C
、D
——每行都有许多 A
。每个 A
只与另一个 table 相关。例如,您永远不会有与 B
和 C
.
相关的 A
目前,A
table 表示为 "flattened" 总和类型,其中每一行都有一个可为空的 AId
、BId
、CId
,&DId
。 A
中任何给定行的 "parent" 由这些 FK 中的哪一个非空决定。
目前为止一切正常。但是,我有几个新功能要在未来实现,这些功能也会有很多 A
s。
我的问题是:是否有比简单地添加更多列来将 FK 存储到这些其他 table 更可扩展的设计?
你有一种 MUCK(大量统一代码密钥)table,但更糟。
而不是像这样的 table:
MUCK(aid, bid, cid, did, value1)
这样效果会更好:
MUCK(table, id, value1)
table 是 a、b、c 或 d(等等),id 是 table 中的 id。
但是,我真的建议您研究一下为什么 MUCK 和 EAV table 在您添加要求和功能时会成为噩梦。
这是我最近回答的一个问题和 link 另一个讨论为什么 EAV(甚至更多,MUCK)并不总是最好的主意。
我有一个 table、A
,其行与其他几个 table 具有多对一关系。其他 table 中的行——B
、C
、D
——每行都有许多 A
。每个 A
只与另一个 table 相关。例如,您永远不会有与 B
和 C
.
A
目前,A
table 表示为 "flattened" 总和类型,其中每一行都有一个可为空的 AId
、BId
、CId
,&DId
。 A
中任何给定行的 "parent" 由这些 FK 中的哪一个非空决定。
目前为止一切正常。但是,我有几个新功能要在未来实现,这些功能也会有很多 A
s。
我的问题是:是否有比简单地添加更多列来将 FK 存储到这些其他 table 更可扩展的设计?
你有一种 MUCK(大量统一代码密钥)table,但更糟。
而不是像这样的 table:
MUCK(aid, bid, cid, did, value1)
这样效果会更好:
MUCK(table, id, value1)
table 是 a、b、c 或 d(等等),id 是 table 中的 id。
但是,我真的建议您研究一下为什么 MUCK 和 EAV table 在您添加要求和功能时会成为噩梦。
这是我最近回答的一个问题和 link 另一个讨论为什么 EAV(甚至更多,MUCK)并不总是最好的主意。