使用这样的问答网站作为示例。说我有question
,answer
和comment
表。问题和答案都可以有多个评论。
最好是:
创建QuestionComment
和AnswerComment
表格,从问题/答案到评论(每个都包含问题/答案pk和评论pk)?
或者我应该只有包含2个可空外键的注释表来进行提问和回答(其中一个将始终为空,因为注释只能应用于单个“项目”)?
< / LI> 醇>似乎(1)保持参照完整性,而(2)更紧凑。一个比另一个更受欢迎吗?是否应该仅为多对多关系保留映射表?
答案 0 :(得分:1)
你会以同样的方式使用这两种评论吗?如果是,那么(2)否则(1)
如果使用(1),则可以在两个表上创建一个视图,使它们显示为一个。
在情况(2)中,您可以添加一个Trigger来强制每行只填充一个外键列,或者@Ronnis使用CHECK约束建议(更好的技术)。
答案 1 :(得分:0)
我已经看到在实践中完成了这两种方法,但我更喜欢(1)更多:
我认为(1)向浏览架构的人更清楚地表达您的域名 - 他们会看到答案和答案评论彼此相邻。如果答案评论和问题评论在同一个表格中,您必须深入查看评论表,以查看评论可以归属于哪个对象。
如果您使用domain model在域对象和持久性之间进行分离,那么问题就没有意义:将它们存储在同一个表或不同的表中并不重要。 (只有当他们表现不同时,他们才会成为单独的类。)