个人防护装备数据库结构

时间:2013-01-13 10:08:52

标签: database sql-server-2008 database-design

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

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

PPCatTable:* 手, 眼睛&面, 头, 身体, 鞋类

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

鞋:* 电阻等级, HasSteelToe, 颜色, 高度

手套:* 冒险, 危险的危险, ProtectiveMaterial

但是我很难理解儿童桌子的结构应该是什么样的,如何为每个类别存储不同的子集。每个子集都有不同的数字属性,采购部门坚持捕获所有不同的属性。

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

应该为PPEEOrderDetails表的子主键引用哪个字段?

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

1 个答案:

答案 0 :(得分:0)

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

ERD

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

请注意,PPEQUIP 类别列表,例如PPCatTablePPEQUIP包含每个子类型表中每个项目的记录。 PPEQUIP中的列将是公共标识符,partitioning attribute是列,表示哪个子类型适用于该项。如果所有类型都有共同的其他属性,那么这些公共属性也会出现在PPEQUIP中。

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