gpt4 book ai didi

database - 如何在列上创建外键,其中的每条记录都可能引用多个表中的一个列?

转载 作者:太空狗 更新时间:2023-10-30 01:47:31 25 4
gpt4 key购买 nike

我正在创建一个社交网络。它有几个实体,如新闻、照片,可以有评论。由于所有评论都具有相同的列并且行为方式相同,唯一的区别是它们的类型——新闻、照片或将来添加的其他内容——我决定为所有评论创建一个表,其中有一列名为 类型。在我决定将外键添加到我的数据库模式之前,它工作得很好。

comment 表有一列parent,它指的是newsphoto 的id 表,取决于列 type

问题是,我不能添加一个引用预先未知的表的外键,甚至不能添加一次引用多个表的外键。

整个数据库现在都使用外键,除了 comment 表中的这个 parent 列。这让我很困扰,因为它是唯一我不能添加外键的地方。

我确定我不能创建这样的外键;我的数据库设计中的某些内容需要更改。我决定为评论创建一个表,以便为将来为新实体(视频、音乐、文章等)添加新评论类型做好准备,并且当我想为所有评论添加一个新列时,不要陷入维护困境.

如果我绝对必须为每个评论类型创建一个单独的表才能完全使用外键,我会这样做。但也许这个问题的另一种常见解决方案已经存在,只是我不知道而已?

也许我应该创建某种链接表,将 comment 表与其他实体的表链接起来?但也许这个解决方案比为每种评论类型创建一个单独的表更复杂?

也许我应该在 comment 表中有几列,例如 newsIdphotoId,我可以向其中添加外键?

这些解决方案对我来说似乎并不优雅,或者我只是误解了一些东西。我对这个问题的整体看法可能是完全错误的。这就是我来这里的原因。请分享您的想法。

最佳答案

我认为您的问题是您有多个实体 - 新闻、照片。但这些都只是(比如说)项目的类型。像评论一样,项目可能有一些共同的属性以及一些不同的属性。这些属性之一就是能够被评论。

在这种方法中,您有一个表 CommentableItems (1),具有公共(public)属性。然后你有一些子表 NewsItemsPhotoItems 等。为这些表设置键以强制执行所需的一对一关系非常容易.显然,Comments 有一个引用 CommentableItems 的外键。

(1) 实际上,我可能会自杀,而不是让一个像 CommentableItems 这样可怕的表进入我的模式,但这只是为了举例.

关于database - 如何在列上创建外键,其中的每条记录都可能引用多个表中的一个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2294495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com