Database design 用于在表中存储未知行数的数据库设计

Database design 用于在表中存储未知行数的数据库设计,database-design,Database Design,如果标题很难理解,很抱歉..: 我有一张有订单的桌子,这张订单应该可以有未知数量的比萨饼。我如何实现这一点 我有一张比萨桌和一排比萨桌。订单表应具有未知数量的Pizzaid..: 谢谢你应该用另一种方式链接它们。比萨饼应该指明它与哪个订单相关,因为每个比萨饼只能来自一个订单 例如,您的比萨饼记录可能如下所示: PizzaId, **OrderId**, BaseType, StuffedCrust, PizzaType 然后,您可以简单地查询与订单n相关的所有比萨饼的数据库。您应该以另一种方式

如果标题很难理解,很抱歉..:

我有一张有订单的桌子,这张订单应该可以有未知数量的比萨饼。我如何实现这一点

我有一张比萨桌和一排比萨桌。订单表应具有未知数量的Pizzaid..:


谢谢

你应该用另一种方式链接它们。比萨饼应该指明它与哪个订单相关,因为每个比萨饼只能来自一个订单

例如,您的比萨饼记录可能如下所示:

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的数量
因此,Pizzas和Orders表之间存在多对多关系。

您需要三个表:

  • 比萨饼(包含定义特定比萨饼的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
的单独实体,并且