2011-01-28 71 views
0

作为学习一些数据库设计技巧的练习,我正在为虚构的小型电脑商店设计一个数据库。这个想法是,商店从多个供应商处获得一些组件,将它们组装到计算机系统中并将它们出售给客户。小型电脑商店的数据库设计,寻求建议

这里的模型,我拿出这么远的图像: Image

几点说明:

这种模式的核心实体是项目。它代表了该店所拥有或销售的单个项目,例如一个精确的i7 920处理器。此商品属于属于类别(“处理器”)的产品(本例中为“Intel i7 920”)。

这些商品通过订单进入商店。当从供应商订购组件时,会创建订单表中的新条目。对于每个订购的商品,都会创建Items表中的新条目,并在OrderItem中创建相应条目(我无法为此表提供更好的名称......)。

OrderItem条目基本上包含商店在供应商发票上收到的内容:商品成本的价格,相同的描述等。如果必须显示或打印订单,订单字段确定商品出现的顺序。

另一方面,当客户购买东西时,创建了发票。他们购买的每件商品都会创建一个InvoiceItem。它基本上和OrderItem一样。价格区域是客户将支付的价格(让我们假设价格不是每个产品的价格,而是针对每个发票定制的,我无法找到具有每种产品价格并能够跟踪价格变化的优雅方式) 。如果说明为空,则相应产品的说明显示在发票上,否则,可以输入该发票的自定义说明。

现在棘手的部分是组件表。如果商店销售称为“PC 1”的PC系统,则产品中将存在“PC 1”条目,例如属于“PC”类别。每次组装“PC 1”系统时,都会创建一个新项目(productID为“PC 1”),并且对于该系统的每个组件,会向组件添加条目:assemblyID将是新项目的itemID ,componentID是组件的itemID。

我只是想到了没有Assemblies表的另一种管理方式:商店可以向0虚构的客户“卖”零部件(实际上0 CHF),并从虚构的供应商那里“购买”组装好的计算机(再次,免费)。这似乎更容易做到,因为组件会从库存中消失,但是否有一种将“已售出”组件与“已购买”计算机关联的简单方法?

现在,我对我从中学到的东西很满意。但肯定有一些错误或一些更好的方式来表达我无法想到的事情。我很高兴收到任何建议和批评。提前致谢!

PS:对不起,如果文本有点长...还有,对于一些糟糕的英语情况感到抱歉(这不是我的主要语言(这也可以解释一些选择不好的字段/表名称(为此我会更多比较乐意获得建议)))

回答

0

您目前正在使用的进程称为数据库规范化,这是在查询处理时间时使数据库可扩展且更快的操作。

马上就可以看到Customers表中的备注应该被赋予它自己的表称为备注,它通过CustomerID绑定到您的Customer表。这样客户可以留下无限的评论。

与发票一样,您可能还需要设置一个付款表来控制所有客户所做的所有付款,并将这两个表分别与PaymentID和InvoiceID绑定在一起。

希望这会有所帮助。

2

您从个别部分创建个人电脑时描述的过程是物料清单,这里有一个website,其中包含大量有关数据库的信息,而且他们实际上有数据模型示例,其中包括物料清单。