Database design 数据库设计:我的引用应该在哪里,父还是子?

Database design 数据库设计:我的引用应该在哪里,父还是子?,database-design,Database Design,我有一个表,可以引用5个表中的任何一个。我的主表上应该有5个可为null的FK列,还是应该在5个可能的辅助表中的每个表上都有一个返回到主表的FK引用 我知道这两种方法中的任何一种都会“起作用”,我只是想要一些有经验的答案,这些答案为我提供了更好的结构。例如,如果我选择5个可空FK的路由,我就不能使用级联删除 感谢所有能够抽出时间提供一些见解的人 编辑 我的父表是noticeopion,它基本上只是一个问卷。它可以有5个潜在子表中的任意1个,这些子表只是基于NOA中选择的“预期行动”的问题的不同子

我有一个表,可以引用5个表中的任何一个。我的主表上应该有5个可为null的FK列,还是应该在5个可能的辅助表中的每个表上都有一个返回到主表的FK引用

我知道这两种方法中的任何一种都会“起作用”,我只是想要一些有经验的答案,这些答案为我提供了更好的结构。例如,如果我选择5个可空FK的路由,我就不能使用级联删除

感谢所有能够抽出时间提供一些见解的人

编辑

我的父表是noticeopion,它基本上只是一个问卷。它可以有5个潜在子表中的任意1个,这些子表只是基于NOA中选择的“预期行动”的问题的不同子集。因此,NOA表条目必须首先发生,并且一次只能引用5个子表中的1个子表。如果删除NOA条目,我将删除子操作表上的相应条目,因为没有NOA本身,它就不可能存在


我希望这能有所帮助。

这个问题没有确切的答案。但你应该考虑:

  • 级联删除对您有用吗

  • FK之间有约束吗?类似于“如果存在对表a的引用,则不得引用表B”,如果这样,则可以在单个表上使用检查约束(如果该表还包含fk)实现该功能

  • 首先创建哪个表更自然?另一张桌子上的id可能更好


    • 这个问题没有确切的答案。但你应该考虑:

      • 级联删除对您有用吗

      • FK之间有约束吗?类似于“如果存在对表a的引用,则不得引用表B”,如果这样,则可以在单个表上使用检查约束(如果该表还包含fk)实现该功能

      • 首先创建哪个表更自然?另一张桌子上的id可能更好


        • 一种可能的实现方式:父表(至少)有一个主键和一个“开关”或“类型”列,指示5个子表中的哪一个子表——“子表”将真正包含相关数据。每个子表都有父表ID作为外键


          查询时,标识父项的类型,并从相应的表中读取子项。可以使用视图来简化查询,使用外键来确保引用完整性。一种可能的实现方式是:父表(至少)有一个主键和一个“开关”或“类型”列,指示5个子表中的哪一个子表--“子表”将真正包含相关数据。每个子表都有父表ID作为外键


          查询时,标识父项的类型,并从相应的表中读取子项。可以使用视图来简化查询,并使用外键来确保引用完整性。

          可以将父表中的id放入子表中。然后级联将正常工作,您可以先正确输入父数据,然后再正确输入子数据

          将父表中的id放入子表中。然后级联将正常工作,您可以先正确输入父数据,然后再正确输入子数据

          我很好奇,您是否可以通过任何方式将5个子表合并为一个表,或许可以添加一个额外的列来澄清问题子集的类型。然后,关系将简化为引用1个父表的1个子表。但是,这当然取决于您的数据。

          我很好奇您是否可以以任何方式将这5个子表合并为一个表,也许可以通过添加一个额外的列来澄清问题子集的类型。然后,关系将简化为引用1个父表的1个子表。但是,当然,这种可能性取决于您的数据。

          嗯,谢谢。回答:1)是的,如果没有父表记录,5个子表中的1个子表上的记录就没有用处。2) 父表一次只能引用5个子表中的1个子表。3) 必须首先创建父表。尽管如此,级联删除本身并不是必要的,因为这很容易克服。嗯,谢谢。回答:1)是的,如果没有父表记录,5个子表中的1个子表上的记录就没有用处。2) 父表一次只能引用5个子表中的1个子表。3) 必须首先创建父表。这就是说,级联删除本身并不是必要的,因为这很容易克服。如果您提供一些实际的示例,而不是一般的“表”,则会更容易。例如,阅读您的问题的一种方法是
          “这篇文章应该对作者保留FK,还是作者应该对每篇文章都有可为空的FK列?”
          嗯,可能是错误的解释,但有很多方法会误解一般性问题。明白了,我现在就尝试重写。感谢您的反馈。我很好奇您是否可以以任何方式将5个子表合并为一个表,也许可以通过添加一个额外的列来澄清问题子集的类型。然后,关系将简化为引用1个父表的1个子表。但是,当然,这种可能性取决于你的数据。看看这组数据,可能会有助于感谢大家的回答,但我想我会用@vasek1的评论作为我的答案,因为我的数据的性质。真不敢相信我以前没见过。再次感谢大家抽出时间。如果你能提供一些现实的例子,而不是一般的“表格”,那就更容易了。例如,阅读您的问题的一种方法是
          “这篇文章应该对作者保留FK,还是作者应该对每篇文章都有可为空的FK列?”
          嗯,可能是错误的解释,但有很多方法会误解一般性问题。明白了,我现在就尝试重写。谢谢你的反馈。我很好奇你是否能合作