2011-09-23 75 views
4

在我们的业务应用程序中,我们需要存储用户或系统生成的关于特定实体的“评论”。例如,可以创建关于客户,订单或采购订单的评论。这些评论都具有许多相同的特征,但被引用实体除外。类似结构的理想数据库模式

所有评论需要日期,时间,用户和评论文字。他们还需要引用表的外键,以便您可以查找该特定实体的注释。

当前应用程序为每种评论类型(例如,customer_comments,order_comments,purchaseOrder_comments)都有一个单独的表格。这些表格的模式在日期,时间,用户和评论文本方面都是相同的,但每个表格都有一个FK给评论所针对的相应表格。

这是最好的设计还是有更好的设计?

回答

2

就个人而言,我会创建一个单独的评论表,然后为每个实体(客户,订单等)使用一个交集表来将评论与实体关联起来。

enter image description here

+0

我和你在那里。这是目前提出的答案中唯一允许您放置/强制FK约束的答案。我曾与一个等效体系结构(引用多个外部表)以及至少一个进程获取属于错误关系的行。 –

+0

是的,我认为执行FK关系非常重要,而且这种模式清楚地表明了这一点。谢谢! –

1

如果它一直我,我想我会有一个Comments表额外comment_type_id字段映射到评论是否应该可用于customer实体,order实体,等等......别的地方你会需要有comment_type_id所指的comment_type表。

这样一来,如果你决定要一个额外的一块元数据添加注释,你只需要做到在一个单一的Comments表,而不是在customer_commentsorder_comments等..

+0

我对这个结构的担忧是它不允许执行FK关系。你有一个模棱两可的FK领域。我想我应该澄清说FK执法应该是一项要求。 –

1

,你可以把所有这些评论到一个表comments并添加另一列commented_table,这将使其成为一个多态多对一。一些框架/ orms(如Rails的ActiveRecord)确实支持这一点,如果你正在使用的东西没有,它基本上就像添加另一个where子句一样简单