
我的系统和饮料一起工作,现在我已经准备好添加汉堡和其他种类的东西了。
现在,对于每种类型的项目,我都有一个带有单独项目和项目订单表的订单表。
这是不够的,因为很难将项目合并为一个订单。
你能提出更好的方法吗?我很困惑如何组合它们,因为饮料和汉堡有不同的选择,当我将增加越来越多的项目时,我希望有更多的选择。
最有效的方法是什么?
我将项目表、项目订单表组合在一起,并添加了一个包含价格和附加费信息的表,这样就不会经常存储。

我觉得它还可以改进。
我决定删除所有的枚举(感谢Vérace和sibert),并且我已经改进了我的价格结构(感谢Lennart),但我仍在试图确定价格表及其关系是否尽可能好。项目订单表现在指的是价格,因此我认为它将允许我以准确的价格正确地检索历史项目。

我仍然觉得它可以改进。
发布于 2018-04-29 08:17:08
经验法则1:如果表包含将来可能更改(编辑、删除或添加列)的内容,那么它可能属于数据级别。
经验法则2:每张桌子都要有一个独特的钥匙。如果每一行都有一个唯一的键,那么编辑顺序记录就更简单了。
经验法则3:拇指规则并不总是最好的方法。这总是取决于..。
一种构造这一结构的方法:
type_id 1 2 3
type_desc Burger Drink Extra stuff编辑1-->你不需要有饮料类别。你可以有汉堡包大,喝得太多等几种类型。这篇文章是收集所有信息的王者。选择文章,您就有了所需的所有信息。
art_id 1 2 3 4
art_desc Burger Big Burger Small Burger King Drink little
art_type 1 1 1 2
art_price 50 40 60 10编辑2价格应附在物品上。这也意味着order表中少一列。
order_id 11
order_status 1 (int) Lookup table
order_date 2018-01-01ordrec_id 1
ordrec_order 11
ordrec_art 1
ordrec_sum 50当你拿到订单时,你可以随心所欲地加起来.不需要在订单级别上保存sum。
SELECT order_id,sum(ordrec_sum)
LEFT JOIN order_rec ON ordrec_order=order_id
GROUP BY 1
WHERE order_id=11如果您在文章中添加更多的组餐,article_type可能会很有用。
发布于 2018-04-29 09:31:01
我认为第二个编辑的模式太复杂了。看看这个简化的版本,如果从您的角度来看仍然存在问题,请告诉我:
CREATE TABLE category
(
category_id INTEGER PRIMARY KEY,
category_name VARCHAR(25) NOT NULL -- ex. Burger, could be Small Burger &c.
); 然后还有其他桌子:
CREATE TABLE order_ -- note TRAILING underscore, order is an sql keyword, always worth avoiding even though certain systems have tricks whic allow you to use the - NEVER DO THIS!
(
order_id INTEGER PRIMARY KEY,
table_id INTEGER NOT NULL, -- no FK, could be "bar" or "special", i.e banquet
main_server INTEGER NOT NULL, -- FK to staff table
final_bill DECIMAL(5,2) NOT NULL, but can be 0 for special arrangement
order_note text -- notes good or bad (ex. food sent back)
order_final_bill -- computed/virtual field
);
CREATE TABLE order_item
(
item_id INTEGER NOT NULL, -- FK to item table
item_category NOT NULL, -- FK to category table
item_desc VARCHAR(25) NOT NULL, -- FK to item table
item_price DECIMAL(5,2) NOT NULL,
item_cuisson VARCHAR(50), -- how item is cooked, i.e rare &c.
item_note TEXT -- extra info, allergies, change of sauce &c.
);不知道为什么你想要一个项目价格的历史线索-餐馆通常是快速的这是极大的兴趣-季节性变化的价格,时尚。价格甚至可以在每周的基础上确定,例如圣诞节前后,然后进入新年(安静时间)。
我将有一个old_price表,当一个项目修改价格时,使用触发器将item_id、price_date_from和price_date_to放入如下:
CREATE TABLE old_price
(
item_id INTEGER NOT NULL,
item_price DECIMAL(5,2) NOT NULL,
price_date_from DATE NOT NULL,
price_date_to DATE NOT NULL
);另一些东西--有时同一菜在同一天的不同时间(午餐时间或晚餐)有不同的价格,甚至在同一种服务中也有不同的价格,这取决于它是在固定菜单上还是在点菜上。我想,再一次,这里出现了过度并发症。一位经理/老板在周一早上定价,他不会真正关心3周前的价格。他们所关心的只是本周他们为货物支付了多少钱,以及营业额是多少。只是一些想法,不要模糊雅格尼!
祝你的项目好运。你也可以使用搜索引擎来查看开源餐厅系统,看看你能学到什么!
附注:SQL是未经测试的(逗号、分号) &c。最后,如果这是一个新项目,我强烈建议您查看PostgreSQL而不是MySQL --它是一个非常优秀的数据库!
https://dba.stackexchange.com/questions/205274
复制相似问题