假设有仓库,每个仓库都存储特定类型的物品。
所以有表格的字段
问题是 - 鉴于Warehouse只保留具有特定类型的项目,这会破坏什么数据库规范化规则?
此数据库是否已标准化?
(问题的例子已经弥补,但我现实生活中基本上都有这个问题。)
答案 0 :(得分:1)
我只是在没有任何数据示例的情况下查看您的元数据做了一些假设,但乍看之下,您的架构似乎已经规范化了。从技术上讲,如果它符合以下所有标准,那么你的桌子就是3NF(应该是你的目标):
请注意,还有更高的规范化表单,但是当您开始感觉性能下降时,它们主要是学术性的
鉴于此定义:
Warehouse
,Type
会出现3NF。如果没有,那么您将失去传递依赖,并且需要将Type
信息移动到新表。Item
,Type
也会出现3NF
Type
似乎包含冗余数据,除非您many-to-many
与Type
和/或Warehouse
之间存在Item
关系,否则应将其删除。在这种情况下,您需要在composite entry
和Type
或Warehouse
之间引入bridge-entity
(又名Item
)以创建两个1-to-many
关系WarehouseItem
似乎是Warehouse
和Item
之间的桥梁实体,以打破它们之间的many-to-many
关系。如果这是正确的,那么假设Warehouse
和Item
的组合代表composite key
,您应该能够证明此表是3NF。 假设我正确地解释了你的模式,一旦你消除了冗余的Type
表,那么我会说这个设置在技术上符合3NF。请注意您的要求
鉴于Warehouse仅保存具有特定类型
的项目
可能需要您引入新的类型字段,这意味着您需要重新评估该表的规范化。如果您有两种不同的类型( WarehouseType
和 ItemType
),那么您可能需要保留Type
表并将其转换为这两个新字段之间的映射表。但我需要查看数据示例以便更好地评估。