数据库设计,项目和订单表

时间:2013-12-02 14:23:26

标签: sql entity-framework

我刚刚接受了一些关于数据库设计的意见。我有两个表,订单和物品。

项目表将是可以在多个订单上使用的项目列表,每个项目都有一个id

我想这样做的方式是为了为订单中的每个项目添加一系列逗号分隔的ID。

这听起来像最好的方式吗? 我也使用linq实体框架,我不认为id能够在表之间创建关系,但我认为无论如何都不需要,因为项目不是订单独有的

感谢您的任何建议

3 个答案:

答案 0 :(得分:2)

  

我现在想的方法是按顺序为每个项目放置一系列逗号分隔的ID。这听起来像是最好的方式吗?

绝对不是 - 在SQL中确定哪些订单包含特定项目,枚举项目(例如获得总计)以及添加/删除订单中的项目将更加困难。

更好的方法是创建一个OrderItem表,其外键返回OrderItem以及与该项相关的任何其他属性订单 - 数量,折扣,评论等。

就EF而言,它可能会创建一个第三个实体(OrderItem)来“链接”这两个表。如果您不添加任何额外的属性(您可能应该这样做),那么EF可能会将其创建为OrderItem实体之间的多对多关系。

答案 1 :(得分:1)

关于数据库设计,您通常会创建第三个表 - ORDER_ITEMS - 链接两个表,包含订单ID和项ID的列(外键)。您可能还希望包含数量列。

答案 2 :(得分:1)

据我所知,你的问题(不是很清楚),每个订单可以有多个项目,每个项目可以用于多个订单。如果这是您想要的,那么您必须使用交集实体解决多对多关系。此交集实体有2个外键,一个用于项目,一个用于订单。使用它,您可以确定按特定顺序排列的项目以及需要某个项目的订单。

由于我的解释非常简短且非常草率,我将向您推荐以下参考资料:

http://sd271.k12.id.us/lchs/faculty/bkeylon/Oracle/database_design/section5/dd_s05_l03.pdf

Resolve many to many relationship

另外,你提出的设计非常糟糕,因为它打破了第一个普通形式:没有属性可以有多个值。你应该尝试至少以第三范式构建数据库。