我如何设计一个数据库来作为服务员点菜

How can I design a database for ordering food as a waiter

我有这些 table:

 User (Username PK, password)
    Order (OrderId PK,date,nettotal,userid FK_User_Order)
    FoodItem(FoodID PK,Price)
    OrderDetails(DetailId PK,OrderId FK_Order_OrderDetails,FoodID FK_Food_OrderDetails,quantity,totalsum)

OrderDetails 包含用户点餐时的详细信息,每行代表一项。

例如:

如果用户订购了 2 个比萨饼 (FoodId=1) 和 1 个汉堡 (FoodId=2) 我希望我的 OrderDetails 像这样填充 2 行:

1st row: DetailID=1,OrderId=1,FoodId=1,quantity=2,price=500
2nd row: DetailID=1,OrderId=1,FoodId=2,quantity=1,price=250

我需要它们具有相同的 OrderId,这样我才能知道它们属于一个订单,但如果这是第一次,则订单中没有行 table。我该如何设计才能让他们创建这样的订单行:

OrderId=1,date=SYSDATE,nettotal=500+250,userid=1)
  1. 对于这种结构,使用 noSQL 数据库可能会有所帮助,因为它们会为您提供更灵活的系统来处理可扩展性

  2. 对于订单交易 OrderDetails,您可以使用 MySQL 或任何其他 RDBMS。

  3. 如果你只是问设计,那么你可以参考外键和主键约束,尝试在操作过程中保持数据库之间的相同。

  4. 您必须规范化这些参数collections/tables,这将为您提供更可控和系统的进一步开发环境

  5. 如果您需要在 MySQL 中获得所有这些详细信息,那么您需要再次遵循以上几点...

大家也可以参考已有的项目进行参考,这样思路会更清晰。

您可以参考以下link的基本模式结构以供参考: https://www.researchgate.net/figure/Database-Schema-for-the-Restaurant-Ordering-System_fig4_323230406

如果您的疑问与此不同...那么请在评论中提及。

这里是伪SQL,但是执行INSERT时需要的是OUTPUT子句。如果我们 假设 您有订单本身的标量参数和食品的 table 类型参数,那么您 SQL 会看起来有点像这样:

DECLARE @Order table (OrderID int)

INSERT INTO dbo.OrderTable (OrderDate, UserID) --NetTotal shouldn't really be stroed, as it can be derived from the order details
OUTPUT inserted.OrderID
INTO @Order (OrderID)
SELECT GETDATE(), @UserID;

INSERT INTO dbo.OrderItems (ItemID, OrderID, Quantity)
SELECT I.ItemID,
       O.OrderID,
       I.Quantity
FROM @Items I --YOur table type parameter
     CROSS JOIN @Order O;