多用途表的数据库设计

时间:2010-11-12 04:53:38

标签: database database-design data-modeling

假设您有多个“事物”,每个事物都附有一个或多个注释。例如,产品和订单。如何构建表格......

  1. 产品,订单,评论,ProductComment {ProductID,CommentID},OrderComment {OrderID,CommentID}
  2. 产品,订单,产品评论{ProductID,Text},OrderComment {OrderID,Text}
  3. 产品,订单,评论{ProductID,OrderID,Text}
  4. 顺便使用SQL Server 2008。

    思考,意见?

5 个答案:

答案 0 :(得分:2)

我认为Order/Product表应保持不变。

Comments表可以是

CommentID
EntityID
EntityType
Comment

EntityType会告诉您EntityID属于哪个表(ProductID/OrderID

答案 1 :(得分:1)

绝对只使用一个Comment表,因此您不必复制Comment信息(例如timestamp,flagged_for_moderation等)。在评论中有两个字段很好,因为它清楚地表明它是一对多的链接。我可能会在多个链接表上倾向于这一点,但我确实感谢您在链接时只在链接表中有行,而有一半的值为NULL。也许在一个非常大的数据库中有更多可以评论的东西,你可能会去连接表。

答案 2 :(得分:0)

如果您不喜欢entityIDentityType方法,因为您无法使用外键约束,您可以采取混合策略,例如

COMMENT(commentID, comment, productID, orderID, ....)

将...作为每个可评论表的附加列。

答案 3 :(得分:0)

如果您使用链接表并且您有超过2或3个“类型”可以链接到注释,那么就开始考虑生成的代码以创建您需要的所有SQL。您很快就会有101个链接表和大量的表定义SQL来维护。

如果您对所有ID使用GUIDS并且不介意没有在数据库中定义外键,那么还有其他选项,但我不认为您拥有数据库模式的样式。

这是让我觉得关系模型是痛苦的用例之一!

答案 4 :(得分:0)

我喜欢添加实体ID和实体类型列,以增加灵活性而无需额外的连接。

相关问题