繁体   English   中英

数据库设计,物料和订单表

[英]database design, items and orders tables

我只是在对数据库设计进行一些投入之后。 我有两个表,订单和项目。

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

我目前认为这样做的方式是为了按顺序为每个项目放置一个逗号分隔的ID数组。

听起来是最好的方法吗? 我也使用linq到实体框架,我不认为id能够在表之间创建关系,但是我不认为那里是必需的,因为项目不是订单所独有的

感谢您的任何建议

我目前想做的方式是为了按顺序为每个项目放置一个逗号分隔的ID数组。 听起来是最好的方法吗?

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

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

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

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

据您对问题的了解(不是很清楚),每个订单可以有多个项目,每个项目可以在多个订单中使用。 如果这是您想要的,则您具有多对多关系,必须使用交集实体来解决。 该相交实体有2个外键,一个用于项目,一个用于订单。 使用它,您可以确定哪些商品处于特定顺序中,哪些订单需要特定商品。

由于我的解释很简短而且很草率,因此我向您推荐以下参考资料:

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

解决多对多关系

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM