数据库设计:我应该使用映射表吗?

时间:2010-12-08 00:07:08

标签: database database-design

使用这样的问答网站作为示例。说我有questionanswercomment表。问题和答案都可以有多个评论。

最好是:

  1. 创建QuestionCommentAnswerComment表格,从问题/答案到评论(每个都包含问题/答案pk和评论pk)?

  2. 或者我应该只有包含2个可空外键的注释表来进行提问和回答(其中一个将始终为空,因为注释只能应用于单个“项目”)?

    < / LI>

    似乎(1)保持参照完整性,而(2)更紧凑。一个比另一个更受欢迎吗?是否应该仅为多对多关系保留映射表?

2 个答案:

答案 0 :(得分:1)

你会以同样的方式使用这两种评论吗?如果是,那么(2)否则(1)

如果使用(1),则可以在两个表上创建一个视图,使它们显示为一个。

在情况(2)中,您可以添加一个Trigger来强制每行只填充一个外键列,或者@Ronnis使用CHECK约束建议(更好的技术)。

答案 1 :(得分:0)

我已经看到在实践中完成了这两种方法,但我更喜欢(1)更多:

我认为(1)向浏览架构的人更清楚地表达您的域名 - 他们会看到答案和答案评论彼此相邻。如果答案评论和问题评论在同一个表格中,您必须深入查看评论表,以查看评论可以归属于哪个对象。

如果您使用domain model在域对象和持久性之间进行分离,那么问题就没有意义:将它们存储在同一个表或不同的表中并不重要。 (只有当他们表现不同时,他们才会成为单独的类。)