0

我的经理要求我使用 SQL Server 为采购部门设计一个个人防护设备数据库。在收集我对数据库的要求时,我提出了 5 个 PPE 类别:手、眼睛和面部、头部、身体、鞋类.

目前有一个存储所有上述类别的表,

PPCatTable:* 手、眼睛和脸、头、身体、鞋

对于每个类别,有几个有子集,即

鞋类:* 抗电等级、HasSteelToe、颜色、高度

手套:* Hazard, Degereeof hazard, ProtectiveMaterial

但我对儿童表的结构应该是什么样子,如何存储每个类别的不同子集感到困惑。每个子集具有不同的数字属性,采购部门坚持捕获所有不同的属性。

我应该为每个子类别创建一个表吗?

应该为 PPEEOrderDetails 表引用孩子的主键什么字段?

我应该将相应的子属性作为 XML 数据类型存储在父类别表中吗?

4

1 回答 1

0

您想使用实体超类型/子类型技术来为您的项目建模。考虑以下数据模型:

ERD

您的各个类别都有自己的表格,因为它们具有不同的属性集。每个子类别都有一个作为其主键的列,该列也是超类型表的外键:PPEQUIP.

请注意,这不是PPEQUIP类别列表,例如您的. 包含每个子类型表中每个项目的记录。中的列将是公共标识符,而其中的列是指示哪个子类型适用于该项目的列。如果所有类型都有其他共同的属性,那么这些共同的属性也会进入.PPCatTablePPEQUIPPPEQUIPpartitioning attributePPEQUIP

现在,当您有一个需要引用设备的表时,无需具体考虑设备属于哪个类别,例如您ORDER_DETAIL的外键引用转到超类型表(即PPEQUIP)。另一方面,如果您只需要引用特定类别,那么您将在子类型级别执行此操作。

于 2013-01-13T13:01:06.027 回答