作为学习一些数据库设计技术的练习,我正在为一个虚构的小型计算机商店设计一个数据库。这个想法是,商店从多个供应商那里获得一些组件,将它们组装成计算机系统并将它们出售给客户。
这是我到目前为止所提出的模型的图像: Image
一些解释:
此模型的中心实体是项目。它代表了商店拥有或销售的单件商品,例如一个精确的i7 920处理器。此项目属于产品(在本例中为“Intel i7 920”),属于类别(“处理器”)。
这些商品通过订单进入商店。从供应商订购组件时,将创建Orders表中的新条目。对于每个订购的商品,会在Items表中创建一个新条目,并在OrderItem中显示相应的条目(我无法为此表提供更好的名称......)。
OrderItem条目基本上包含商店从供应商处收到的发票上的内容:商品成本,相同描述等的价格。订单字段确定必须显示或打印订单时商品的显示顺序。
另一方面,当客户购买东西时,会创建一个发票。他们购买的每件商品都会创建一个InvoiceItem。它基本上与OrderItem的工作方式相同。价格字段是客户将支付的价格(我们假设价格不是每个产品,而是为每个发票定制。我找不到优雅的方式来获得每个产品的价格并能够跟踪价格变化) 。如果说明为NULL,则相应产品的说明将显示在发票上,否则,可以输入该发票的自定义说明。
现在棘手的部分是Assemblies表。如果商店销售名为“PC 1”的PC系统,则产品中将存在“PC 1”条目,例如属于“PC”类别。每次组装“PC 1”系统时,都会创建一个新项目(产品ID为“PC 1”),并且对于该系统的每个组件,一个条目将添加到程序集中:assemblyID将是新项目的itemID ,componentID是组件的itemID。
我只是想到了在没有Assemblies表的情况下管理它的另一种方法:商店可以将0 $(实际上是0 CHF)的组件“卖”给虚构的客户,并从虚构的供应商“购买”组装的计算机(再次,免费)。这似乎更容易做,因为组件会从库存中消失,但是有没有简单的方法将“已售出”的组件链接到“已购买”的计算机上?
现在,我对我从中学到的东西感到非常满意。但肯定有一些错误或更好的方法来代表我无法想到的事情。我很高兴收到任何建议和批评。提前谢谢!
PS:对不起,如果文字有点长...另外,对不起有些英语不好的情况(这不是我的主要语言(这也可以解释一些选择不好的字段/表名)(我会比很高兴得到建议)))答案 0 :(得分:2)
您在从各个部分创建PC时描述的过程是一个物料清单,这里有一个website,其中包含大量有关数据库的信息,它们实际上有数据模型示例,包括物料清单
答案 1 :(得分:0)
此时您正在处理的过程称为数据库规范化,这使得数据库在查询处理时间方面可扩展且速度更快。
我可以看到,客户表中的备注应该被赋予自己的名为Remarks的表,该表通过CustomerID绑定到Customer表。通过这种方式,客户可以留下无限的评论。
与发票相同,您可能还需要设置一个付款表来控制所有客户的所有付款,将这两个表分别与PaymentID和InvoiceID捆绑在一起。
希望这有帮助。