我有一个表具有一个软外键,根据表中的另一个值将表中的记录链接到许多其他表之一。为了证明:SQL设计建议:一个FK列,许多表引用
TableOfTables:ID,表名
HistoryTable:身份证,TableOfTableId,NumberedTableId等..
表1:身份证,等等
表2:ID等..
表3:身份证,等等
TableOfTables包含在数据库中(表1,表2,表3,...),每个编号的表中的记录。 HistoryTable具有该表的外键(TableOfTableId)。它还有一个NumberedTableId列,它是对编号表的Id列的引用。
现在,这工作得很好,但NumberedTableId和编号表的Id列之间没有参照完整性。现在据我所知,你不能创建一种有条件的外键,它可以根据某些条件指向不同的表......那么在这里获得引用完整性的最好方法是什么?
我能想到的唯一两件事情是在HistoryTable中有大量可为空的NumberedTableId列,每个列都有一个外键给特定的编号表,其余的列填充为空......丑陋的,或者为每个编号的表有一个单独的HistoryTable ...这将意味着很多HistoryTables,因为我们的数据库中有许多编号表。
这里我最好的选择是什么?历史记录表实际上是一个记录表,它记录了编号表中的变化以及谁更改了值,它不用于审计之外的任何其他用途,也不用于我们的程序读取,但我不喜欢没有完整的参照完整性。
我在这里有什么选择?任何解决方案都需要能够使用Entity Framework 4.0。
感谢
唯一干净的答案是:重新构建您的解决方案。使用一个表引用多个其他表的方法是一种巨大的SQL代码异味....清理它! – 2010-08-03 05:03:07