这个SQL模式有什么问题?

时间:2010-02-01 06:01:29

标签: sql mysql database-design

我正在设计我的第一个MySQL数据库,这里的想法是我们的​​订单可以包含多个不同的项目。 所以我决定将所有相关信息存储在一个表中,将项目存储在另一个表中,然后创建第三个表,其中存储每个订购的项目。当然,每当我需要列出订单时,我首先必须找到每个OrderedItemsID,其订单ID与我需要的订单ID相同,并且与项目匹配。

既然这是我的第一个数据库设计,我并不自觉地认为它是一个很好的解决方案,所以我想知道是否有人知道这类问题的好解决方案? 感谢

图片位于http://img211.imageshack.us/img211/5575/stackoverflowq.png

3 个答案:

答案 0 :(得分:4)

这个解决方案很好,但是在订单表中我会列出总价,税和运费。这样您就不必转到OrderItems表来获取总数。

另外,您需要将项目中的所有内容存储到orderitem表中。这将包括名称和描述。原因在于问责制。如果有人更改了表格中某个项目的名称,那么这将基本上改变它以便收到任何人的收据。而你不想这样做。

基本上说,订单表中的所有信息都不需要依赖于实际的项目表。

您还可以进一步添加结算和送货地址,以便用户以后更改此功能时,不会更改此特定订单。

答案 1 :(得分:0)

不,设计足够好。除了Item可能没有相关的OrderedItem。 (例如,目录中放置的全新商品可能尚未订购)同样适用于订单(例如已下订单,但客户尚未确定订单的详细信息),但不太可能。

答案 2 :(得分:0)

顺便说一句,对我来说看起来还不错,你也可以将你的表与名为Northwind的示例数据库进行比较,后者随MS Office一起提供,也可以从互联网上轻松下载。 http://www.learn-sql-tutorial.com/Images/relationships.gif

http://msdn.microsoft.com/en-us/library/cc161164.aspx

http://www.microsoft.com/downloadS/details.aspx?FamilyID=c6661372-8dbe-422b-8676-c632d66c529c&displaylang=en