我正计划制作一个自助点餐亭程序。
这是我计划构建的体系结构。 (数据库服务器是本地服务器,它不在云上。)
基本上,我将有一个运行MySQL服务器的本地数据库服务器。 每个食品摊都有一台连接数据库服务器的计算机。每个食品摊位都可以更新其菜单和可用性。例如,每个卖方都可以标记哪个菜单缺货(不可用)。除此之外,当有订单时,可以通知卖方。他下达订单后,可以将订单状态更新为“完成”。 连接到数据库服务器的订购机不止一台。每个买家在下订单时都会插入他们的表号。
这是我当前的数据库设计。
Seller Table
Seller Username (Unique, Primary Key) | Seller Password | Name of the Stall
Menu Table
Menu ID (AutoIncrement, Primary Key) | Food Name | Price | Availability | Seller ID (Foreign Key) //Seller ID is used to indicate who sells the product
Order Table
Order ID (AutoIncrement, Primary Key) | Total Price | Table Number
Order Detail Table
Order ID (Foreign Key) | Food Name | Quantity | Table Number | Seller ID (Foreign Key) | Status //Status is used to determine whether the order has been delivered or not
编辑
我的问题是:
答案 0 :(得分:1)
在设计方面,应该在表之间创建更多关系。不要复制信息,而应使用链接到存储信息的表的外键。
具体来说:在订单明细中,用指向 Menu ID 的外键替换 Food Name 字段(来自 Menu < / em>表)。要在下订单时验证产品的可用性,您可以使用使用该关系的触发器,例如:
DELIMITER $$
CREATE TRIGGER check_order_before_insert()
BEFORE INSERT ON order_detail FOR EACH ROW
BEGIN
IF (SELECT availability FROM menu WHERE menu_id = = NEW.menu_id) = 0
THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Cannot order : product not available';
END IF;
END;
$$