类似结构的理想数据库模式

时间:2011-09-23 20:55:51

标签: sql database-design relational-database

在我们的业务应用程序中,我们需要存储用户或系统生成的关于特定实体的“注释”。例如,可以创建关于客户,订单或采购订单的注释。这些注释都具有许多相同的特征,但引用的实体除外。

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

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

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

3 个答案:

答案 0 :(得分:2)

就个人而言,我会创建一个评论表,然后为每个实体(客户,订单等)使用一个交叉表来将评论与实体链接。

enter image description here

答案 1 :(得分:1)

如果是我,我想我会有一个Comments表,其中包含额外的comment_type_id字段,该字段可以映射评论是否应该适用于customer个实体,{ {1}}实体等...在其他地方,您需要有一个order表引用comment_type

这样,如果您决定在评论中添加额外的元数据,则只需在单个comment_type_id表格中进行,而不是在Commentscustomer_comments等等......

答案 2 :(得分:1)

您可以将所有这些注释放入一个表comments并添加另一列commented_table,这将使其成为多态的ManyToOne。一些框架/ orms(比如Rails的ActiveRecord)确实内置了对它的支持,如果你使用的不是,它基本上就像添加另一个where子句一样简单