我需要帮助设计一个酒吧可用于饮料的数据库。我的应用程序以两种方式处理饮料订单:客户可以订购饮料并立即付款,或者他们可以启动标签。到目前为止,这是我的表格关系:
Table Order: Table Tabs:
------------ ------------
[PK] OrderId - 1 [PK] TabId
ItemName / TabName
QtyOrdered / Total
TabId *- PaymentType
Archive
它的设置使得1个标签可以有很多饮料。这非常适合标签,但客户可以选择不设置标签。我的问题是,我如何修改这两个表来支持它?或者我是否必须创建一个新表?
提前致谢。
答案 0 :(得分:1)
您需要一个CUSTOMERS表,一个DRINKS表,一个ORDERSHEADER表,一个ORDERDETAIL表(选项卡上的每个饮料都是一个行项)。您可以/应该有一个单独的PAYMENTS表。您可以将付款分配给ORDERDETAIL(您的标签)的订单项。 “标签”是订单上未应用任何付款的所有订单项的集合。
答案 1 :(得分:1)
您的“商品”是订单项次料品。
"My brother and I will each have a Guiness and his wife would like a gin-and-tonic."
该订单上有三个(编辑:项目,但有两个)订单项。要将它们识别为同一订单的一部分[如果您需要这样做],则需要两个表:
the OrderHeader
(orderheaderid, orderdatetime, customerid)
和
the OrderDetail
(id, orderheaderid, drinkid, howmany, extendedprice, paymentamountapplied).
如果您不需要将饮品识别为属于同一订单,您可以放弃双桌结构,但每次订单只能喝一种。
ORDER
orderid, orderdatetime, customerid, drinkid, howmany, extendedprice, paymentapplied.
延长价格是订单时饮料价格的多少*。您将此值存储在订单表中,这样您就可以更改DRINKS表中饮料的价格,而不会影响标签金额(如果标签生命周期超过一天 - 即客户可以运行每月或每季度标签)
HowMany可以默认为1.饮料专列项的欠款是(extendedprice - paymentamountapplied)。 PaymentAmountApplied默认为0(即默认是运行选项卡)。
如果您不需要跟踪所订购的饮品类型(即您不想使用您的数据库发现在周二晚上您出售的产品比出于某种原因更多的金酒和滋补品) :
ORDER
orderid, orderdatetime, customerid, ordertotal, paymentapplied.
您的营业额只需输入您在系统外部计算的订单总金额,而无需参考数据库中的DRINKS表 - 也许酒吧会看到墙上的黑板。