Sql 如何表示具有多个一对多关系的表

Sql 如何表示具有多个一对多关系的表,sql,sql-server,database-design,sql-server-2012,entity-framework-5,Sql,Sql Server,Database Design,Sql Server 2012,Entity Framework 5,我有一个表,a,它的行与其他几个表有多对一的关系。其他表中的行--B、C、D--每一行都有许多As。每个A仅与另一个表相关。例如,您从来没有一个A同时与AB和C相关 目前,A表表示为“展平”和类型,其中每行都有一个可为空的AId,BId,CId,&DId。A中任何给定行的“父级”取决于这些FK中的哪一个为非空 到目前为止,这种方法一直运作良好。但是,我有几个新功能将在将来实现,这些新功能也将有许多As 我的问题是:除了简单地添加更多列以将FK存储到这些其他表中之外,还有更可扩展的设计吗?您有一种

我有一个表,
a
,它的行与其他几个表有多对一的关系。其他表中的行--
B
C
D
--每一行都有许多
A
s。每个
A
仅与另一个表相关。例如,您从来没有一个
A
同时与A
B
C
相关

目前,
A
表表示为“展平”和类型,其中每行都有一个可为空的
AId
BId
CId
,&
DId
A
中任何给定行的“父级”取决于这些FK中的哪一个为非空

到目前为止,这种方法一直运作良好。但是,我有几个新功能将在将来实现,这些新功能也将有许多
A
s

我的问题是:除了简单地添加更多列以将FK存储到这些其他表中之外,还有更可扩展的设计吗?

您有一种MUCK(海量统一代码键)表,但更糟糕

而不是像这样的表格:

MUCK(aid, bid, cid, did, value1)
MUCK(table, id, value1)
这样会更好:

MUCK(aid, bid, cid, did, value1)
MUCK(table, id, value1)
表是a、b、c或d(等等),id是该表中的id

然而,我真的建议您在添加需求和特性时,研究一下为什么MUCK和EAV表会成为一场噩梦

这里是我最近回答的一个问题和另一个问题的链接,讨论了为什么EAV(甚至更多,MUCK)并不总是最好的主意


在不了解更多用例的情况下,很难说出有用的东西。乍一看,我会说这张怪物表
A
看起来很傻。为什么不为每个
B
C
D
创建一个子表呢?是的,这是更多的表格,但它增加了清晰度和性能。可能重复