Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 订单管理的数据库设计_Sql Server_Database_Database Design_Relational Database_Database Normalization - Fatal编程技术网

Sql server 订单管理的数据库设计

Sql server 订单管理的数据库设计,sql-server,database,database-design,relational-database,database-normalization,Sql Server,Database,Database Design,Relational Database,Database Normalization,我想知道为订单管理系统设计数据库的最佳实践。我有一个order表和orderitems表。 我目前的设计如下 Order table orderid int primary key totalprice int orderstatus int Order Items table orderitemid int primary key orderid int foreign key produ

我想知道为订单管理系统设计数据库的最佳实践。我有一个order表和orderitems表。 我目前的设计如下

Order table orderid int primary key totalprice int orderstatus int Order Items table orderitemid int primary key orderid int foreign key productid int quantity int 订单表 orderid int主键 总价整数 订单状态int 订单项目表 orderitemid int主键 orderid int外键 productid int 数量整数 orderid是此处的外键。 订单包含订单项表中的多个订单项。 这是一对多的关系

这是设计表格的最佳方法还是应该使用下面的设计

Order table id int primary key orderid int orderitemid int foreign key totalprice int orderstatus int Order Items table orderitemid int primary key productid int quantity int 订单表 id int主键 orderid int orderitemid int外键 总价整数 订单状态int 订单项目表 orderitemid int主键 productid int 数量整数 请描述使用这两种设计的优缺点。
如果还有其他更好的设计,请告诉我。

选项1是唯一合理的选项

由于1
订单
有许多
订单项目
,因此
订单ID
订单
中保存一次,在
订单项目
中保存多次

使用选项2,这种关系是可能的,但您将不必要地复制数据,因为您将无法对
顺序中的一条记录拥有多个
OrderItemId


这是基本的标准化。

第二种设计显然是错误的,因为它只允许订单最多有一个项目。请向我推荐一个好的替代方案。@user2864740,事实并非如此。orderid不是主键。请阅读数据模型资源书,第1卷-订单管理,库存管理是其中解释的标准模式的一部分。@Mau很好的捕获,我必须对此作出回应:然后它就更坏了。.没什么错,但我想知道是否有更好的东西可用