为了解我正在谈论的内容,考虑一个实体(在我的情况下,它是一个Task),它可以链接到系统中的任何数量的其他实体.为了我们的目的,让我们说这个任务可以链接到:
所有这些都在数据库中用自己的表表示.现在,任务可能可能与任何一个任务相关联,并且由于系统处于活动开发状态,潜在链接列表将继续相对快速地增长.请注意,这些是1对多关系 - 任务一次只能链接到其中一个,但是一个帐户可能有多个与之关联的任务.
现在,我已经考虑了一些选项,但我不认为自己是数据库设计方面的任何专家,所以我想我会伸手去拿.我考虑过的选项包括:
Task表中每个链接的外键,我们只需要不断添加列.但是,由于任务一次不能链接到多个任务,这将导致许多FK列具有NULL值.每当我们添加新链接时,这还需要在我们的应用程序中使用新列并重新生成我们的数据库模型.
其中的单个列Task充当外键,但包含另一个指定链接的列type,因此在查询时,我们可以根据类型确定发生了哪些JOIN.因此,帐户和人员ID都将在此列中显示其任务,但链接类型列将指定ID是个人还是帐户.这对我来说非常危险,显然数据库无法强制执行约束.
其他选择??
我很乐意,如果有人能指出我的"更干净"设计的方向,但如果没有,多列会作为FK约束,但允许NULL是最好的选择吗?
提前致谢!