【问题标题】:ForeignKey column comes from a lot of tablesForeignKey 列来自很多表
【发布时间】:2017-07-12 09:25:46
【问题描述】:

所以我有一个表,其中有一个名为parentKey 的列。并且该列实际上具有许多其他表(至少 4 个)的键(根据定义是外键)。甚至创建这样的专栏对我来说似乎很奇怪。我还没有看到有这个表的结构。因为您无法添加外键约束,因为该列未链接到单个表。所以我不知道这是否允许存在。我的意思是它在那里被创建,但我不确定我是否应该让它这样。

我的想法是为每个可能的表创建一个列,并将其正确命名为:MyTable1Key、MyTable2Key,并让它们成为外键。但这样做的问题是,如果分配了一个外键,那么其他外键将为空(并且永远不会被分配,因此它将始终保持为空)。

那么我是否必须让这个 parentKey 列保持原样,还是应该将它拆分为通过外键链接到表的不同列,以便某些列具有空值?

【问题讨论】:

  • “所以我必须让这个 parentKey 列像现在这样吗...” 不。“...我应该将它拆分到链接到的不同列吗?外键的表,因此某些列的值为空?” 不,您几乎肯定想要along these lines。但是您的问题中没有足够的细节来确定。
  • @MikeSherrill'CatRecall' 不,其他人似乎每次都引用一张表。就像引用汽车类型的列一样。 CarType 在一张桌子内。在我的表中,该列引用其他表而不是单个表中的单个列。就像 TableA 中的 columnA 引用 tableB 中的 columnB 但它也可以是对 tableC 中的 columnC 的引用或对 tableD 中的 columnD 的引用,但始终只有 1key 到另一个表的一列。键是始终一个表的外键。我绝对从未见过这样的事情。通常一列引用一个表,不多。
  • @MikeSherrill'CatRecall' 做这样的事情对我来说看起来很奇怪,但我没有足够的经验,所以也许这是一件很常见的事情。据我所知,我将分离这一列,并为当前列所引用的每个表都有一个外键列。但这意味着如果我在其中一列中有一个键,其余的将为空。
  • 编辑您的问题,并包含带有实际表名的代码。 (或接近实际表名的名称。)包括 create tableinsert into 语句。
  • @MikeSherrill'CatRecall' 但它与数据库设计有关。没有代码

标签: sql-server database-design


【解决方案1】:

除非你有充分的理由,否则不要将多个外键组合成一列。正如您已经注意到的那样,它会删除外键的引用完整性。

您可能会冒着拥有可能属于两个表的键的风险,或者您在某处有一个主表,您应该将其用作外键引用。可以将主键作为外键。

听起来您可能正在研究超类型-子类型模式,在这种情况下,这个问题可能会给您一些好主意。 How do I apply subtypes into an SQL Server database?

【讨论】:

  • 哦,是的,我知道答案正是我面临的问题,他建议按照我的想法去做。为每个表创建一个列,这样我就可以拥有外键,因此对于某些外键,一行将为空。谢谢,帮了大忙。
猜你喜欢
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2021-04-10
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
相关资源
最近更新 更多