Database design 用于在表中存储未知行数的数据库设计
如果标题很难理解,很抱歉..: 我有一张有订单的桌子,这张订单应该可以有未知数量的比萨饼。我如何实现这一点 我有一张比萨桌和一排比萨桌。订单表应具有未知数量的Pizzaid..:Database design 用于在表中存储未知行数的数据库设计,database-design,Database Design,如果标题很难理解,很抱歉..: 我有一张有订单的桌子,这张订单应该可以有未知数量的比萨饼。我如何实现这一点 我有一张比萨桌和一排比萨桌。订单表应具有未知数量的Pizzaid..: 谢谢你应该用另一种方式链接它们。比萨饼应该指明它与哪个订单相关,因为每个比萨饼只能来自一个订单 例如,您的比萨饼记录可能如下所示: PizzaId, **OrderId**, BaseType, StuffedCrust, PizzaType 然后,您可以简单地查询与订单n相关的所有比萨饼的数据库。您应该以另一种方式
谢谢你应该用另一种方式链接它们。比萨饼应该指明它与哪个订单相关,因为每个比萨饼只能来自一个订单 例如,您的比萨饼记录可能如下所示:
PizzaId, **OrderId**, BaseType, StuffedCrust, PizzaType
然后,您可以简单地查询与订单n相关的所有比萨饼的数据库。您应该以另一种方式链接它们。比萨饼应该指明它与哪个订单相关,因为每个比萨饼只能来自一个订单 例如,您的比萨饼记录可能如下所示:
PizzaId, **OrderId**, BaseType, StuffedCrust, PizzaType
然后,您可以简单地查询与订单n相关的所有比萨的数据库。您需要一个订单表、一个比萨表以及一个将比萨与订单关联的表
Pizza
-----
Id
Name
Order
-----
Id
Date_Of_Order
Pizza_Order
-----------
Order_Id
Pizza_Id
Quantity
您需要一个用于订单的表、一个用于比萨饼的表以及一个将比萨饼与订单关联的表
Pizza
-----
Id
Name
Order
-----
Id
Date_Of_Order
Pizza_Order
-----------
Order_Id
Pizza_Id
Quantity
将“OrderID”列添加到Pizzas表中,并将其作为Orders表中“ID”列的外键
这是相当基本的关系数据库设计内容,您可能想看一些基本教程。在Pizzas表中添加“OrderID”列,并将其作为Orders表中“ID”列的外键 这是相当基本的关系数据库设计内容,您可能想看看一些基本教程。您需要三个表:
- 比萨饼(包含定义特定比萨饼的PizzaID+其他列)
- 订单(带有订单ID+您需要的其他列,如客户、订单日期时间等)
- PizzaOrders(带有OrderID、PizzaID和Quantity)-几行将具有相同的OrderID,但不同的PizzaID值+这些Pizza的数量
- 比萨饼(包含定义特定比萨饼的PizzaID+其他列)
- 订单(带有订单ID+您需要的其他列,如客户、订单日期时间等)
- PizzaOrders(带有OrderID、PizzaID和Quantity)-几行将具有相同的OrderID,但不同的PizzaID值+这些Pizza的数量
因此,Pizzas和Orders表之间存在多对多关系。我将在这里创建3个表 一张订单 One table orderItems通过存储orderID 1-n链接到te orders表,通过存储PizzaID n-1链接到Pizzas。您还应该在此表中存储价格信息,因为比萨饼的价格可能会随时间而变化,这可能会影响您的旧订单
另一张桌子上的比萨饼将包含所有可用的比萨饼项目(如果您计划稍后扩展到面食和饮料,请称之为MenueItems;)我将在这里创建3张桌子 一张订单 One table orderItems通过存储orderID 1-n链接到te orders表,通过存储PizzaID n-1链接到Pizzas。您还应该在此表中存储价格信息,因为比萨饼的价格可能会随时间而变化,这可能会影响您的旧订单
另外一个表Pizzas将包含所有可用的比萨项目(如果您计划稍后扩展到意大利面和饮料,请称之为MenueItems;)同意,尽管我更倾向于在所有表中为ID保留相同的列名:PizzaId,有序地引入第三个表只会增加额外的不必要的复杂性?为什么不通过OrderId将比萨饼链接回订单?如果您想表示多个相同的比萨饼,而不必为每个比萨饼插入一条记录,您仍然可以包含一个数量。@Dave-如果我正确理解了OP的问题,比萨饼表中的一条记录表示一个特定的
比萨饼(配料、基本类型等)。您的建议意味着每个特定的比萨饼只能包含在一个特定的订单中。连接表必须能够将许多比萨饼
映射到许多订单
@Yoav-每个订单都有自己的偏好:)我更喜欢将Id列保留在一个表中,表示名为Id
的单独实体,并在连接表/外键字段中以实体名称作为前缀。指定EntityId
对我来说是多余的-你的底线在哪里?您是否命名了其他字段EntityFieldName
,例如PizzaName
,PizzaBaseType
,等等?@Dave-继续这一思路,您的答案中给出的结构似乎也是一个连接表,其中,PizzaId
是Pizza
表的外键,OrderId
是Order
表的外键?是这样吗?同意,尽管我倾向于在所有表中为ID保留相同的列名:PizzaId,OrderId单纯地引入第三个表只会增加额外的不必要的复杂性?为什么不通过OrderId将比萨饼链接回订单?如果您想表示多个相同的比萨饼,而不必为每个比萨饼插入一条记录,您仍然可以包含一个数量。@Dave-如果我正确理解了OP的问题,比萨饼表中的一条记录表示一个特定的比萨饼(配料、基本类型等)。您的建议意味着每个特定的比萨饼只能包含在一个特定的订单中。为了能够将许多比萨饼
映射到许多订单
@Yoav-每个订单都有自己的偏好:)我更愿意将Id列保留在一个表中,表示名为Id
的单独实体,并且