在我们的业务应用程序中,我们需要存储用户或系统生成的关于特定实体的“注释”。例如,可以创建关于客户,订单或采购订单的注释。这些注释都具有许多相同的特征,但引用的实体除外。
所有评论都需要日期,时间,用户和评论文字。它们还需要引用表的外键,以便您可以查找该特定实体的注释。
目前,该应用程序为每种评论类型都有一个单独的表格(例如customer_comments,order_comments,purchaseOrder_comments)。这些表的模式在日期,时间,用户和注释文本方面都是相同的,但每个表的FK都与注释所针对的表相同。
这是最好的设计还是有更好的设计?
答案 0 :(得分:2)
就个人而言,我会创建一个评论表,然后为每个实体(客户,订单等)使用一个交叉表来将评论与实体链接。
答案 1 :(得分:1)
如果是我,我想我会有一个Comments
表,其中包含额外的comment_type_id
字段,该字段可以映射评论是否应该适用于customer
个实体,{ {1}}实体等...在其他地方,您需要有一个order
表引用comment_type
。
这样,如果您决定在评论中添加额外的元数据,则只需在单个comment_type_id
表格中进行,而不是在Comments
,customer_comments
等等......
答案 2 :(得分:1)
您可以将所有这些注释放入一个表comments
并添加另一列commented_table
,这将使其成为多态的ManyToOne。一些框架/ orms(比如Rails的ActiveRecord)确实内置了对它的支持,如果你使用的不是,它基本上就像添加另一个where
子句一样简单