- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个社交网络。它有几个实体,如新闻、照片,可以有评论。由于所有评论都具有相同的列并且行为方式相同,唯一的区别是它们的类型——新闻、照片或将来添加的其他内容——我决定为所有评论创建一个表,其中有一列名为 类型
。在我决定将外键添加到我的数据库模式之前,它工作得很好。
comment
表有一列parent
,它指的是news
或photo 的
表,取决于列 id
type
。
问题是,我不能添加一个引用预先未知的表的外键,甚至不能添加一次引用多个表的外键。
整个数据库现在都使用外键,除了 comment
表中的这个 parent
列。这让我很困扰,因为它是唯一我不能添加外键的地方。
我确定我不能创建这样的外键;我的数据库设计中的某些内容需要更改。我决定为评论创建一个表,以便为将来为新实体(视频、音乐、文章等)添加新评论类型做好准备,并且当我想为所有评论添加一个新列时,不要陷入维护困境.
如果我绝对必须为每个评论类型创建一个单独的表才能完全使用外键,我会这样做。但也许这个问题的另一种常见解决方案已经存在,只是我不知道而已?
也许我应该创建某种链接表,将 comment
表与其他实体的表链接起来?但也许这个解决方案比为每种评论类型创建一个单独的表更复杂?
也许我应该在 comment
表中有几列,例如 newsId
、photoId
,我可以向其中添加外键?
这些解决方案对我来说似乎并不优雅,或者我只是误解了一些东西。我对这个问题的整体看法可能是完全错误的。这就是我来这里的原因。请分享您的想法。
最佳答案
我认为您的问题是您有多个实体 - 新闻、照片。但这些都只是(比如说)项目的类型。像评论一样,项目可能有一些共同的属性以及一些不同的属性。这些属性之一就是能够被评论。
在这种方法中,您有一个表 CommentableItems
(1),具有公共(public)属性。然后你有一些子表 NewsItems
、PhotoItems
等。为这些表设置键以强制执行所需的一对一关系非常容易.显然,Comments 有一个引用 CommentableItems
的外键。
(1) 实际上,我可能会自杀,而不是让一个像 CommentableItems
这样可怕的表进入我的模式,但这只是为了举例.
关于database - 如何在列上创建外键,其中的每条记录都可能引用多个表中的一个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2294495/
我刚开始使用 Gnu Plot 并创建了一些简单的绘图。但是现在我遇到了一个新问题。 输入是这样的 csv 文件: name;n0;n1;n2 Benj;1;3;2 Silv;6;1;2 Steffi
我在 MongoDB 中有 2700 条记录。每个文档的大小约为 320KB。我使用的引擎是wiredTiger,集合的总大小约为885MB。 我的 MongoDB 配置如下: systemLog:
我是一名优秀的程序员,十分优秀!