Database design 仅包含状态信息的表是否应与实体表处于0对1的关系中

Database design 仅包含状态信息的表是否应与实体表处于0对1的关系中,database-design,foreign-keys,relational-database,Database Design,Foreign Keys,Relational Database,如果您有一张由订单组成的表格,这样说是否正确: ID-int 项目-nvarchar(50) OrderStatus-int 和命令状态表,如下所示 ID-int 状态-nvarchar(100) 假设所有字段都不可为空。每个订单都必须有一个订单状态ID,但订单状态表不需要知道有关订单表的任何信息。这是否是一种0对1的关系,1在订单表上,0在订单状态上 对我来说,这似乎是应该的,但我可能只是对这种关系的概念完全错误。每个订单有多少个状态,每个订单状态有多少个订单?如果这些问题的答案是“一”和“一

如果您有一张由订单组成的表格,这样说是否正确:

ID-int

项目-nvarchar(50)

OrderStatus-int

和命令状态表,如下所示

ID-int

状态-nvarchar(100)

假设所有字段都不可为空。每个订单都必须有一个订单状态ID,但订单状态表不需要知道有关订单表的任何信息。这是否是一种0对1的关系,1在订单表上,0在订单状态上


对我来说,这似乎是应该的,但我可能只是对这种关系的概念完全错误。

每个订单有多少个状态,每个订单状态有多少个订单?如果这些问题的答案是“一”和“一”,那么您可能需要的是一张表。

每个订单都有一个状态。状态以整数形式存储在订单表中。此整数是orderstatus表ID的外键。“状态”字段保存该特定状态的文本。因此orderstatus没有与之关联的订单。它仅用于根据其ID查找状态。确定,因此每个有意义的状态值都与多个订单关联——单独的表格是正确的方法。从您的描述来看,它似乎是“一对多”或“零/一对多”关系:每个订单都有一个状态,因此每个状态都可能为零,一个或多个订单与之关联。@sqlvogel谢谢,我没有这样想过。因此,尽管订单状态表没有直接引用任何订单,但如果任何订单引用它,它将使其成为1-0/*关系。Chibbles,正确。您所描述的通常是关系数据库或SQL数据库中的情况。在关系的“一侧”通常不可能有“直接”引用(如外键)。是什么让你认为这是一个例外情况?@sqlvogel我不认为这是一个例外情况,事实是我对关系类型的了解并不完整。但这是另一个谜题。谢谢