我的经理要求我使用SQL Server为采购部门设计个人防护设备数据库。在收集我对数据库的要求时,我提出了5个PPE类别:Hands,Eyes&面,头部,身体,鞋类。
目前有一个表存储所有上述类别,
PPCatTable:* 手, 眼睛&面, 头, 身体, 鞋类
对于每个类别,有几个子集,即
鞋:* 电阻等级, HasSteelToe, 颜色, 高度,
手套:* 冒险, 危险的危险, ProtectiveMaterial
但是我很难理解儿童桌子的结构应该是什么样的,如何为每个类别存储不同的子集。每个子集都有不同的数字属性,采购部门坚持捕获所有不同的属性。
我应该为每个子类别创建一个表吗?
应该为PPEEOrderDetails表的子主键引用哪个字段?
我应该将相应的子属性作为XML数据类型存储在父类别表中吗?
答案 0 :(得分:0)
您希望使用实体超类型/子类型技术来为项目建模。请考虑以下数据模型:
您的各种类别都有自己的表,因为它们具有不同的属性集。每个子类别都有一个列作为其主键,该列也是超类型表的外键:PPEQUIP
。
请注意,PPEQUIP
不类别列表,例如PPCatTable
。 PPEQUIP
包含每个子类型表中每个项目的记录。 PPEQUIP
中的列将是公共标识符,partitioning attribute
是列,表示哪个子类型适用于该项。如果所有类型都有共同的其他属性,那么这些公共属性也会出现在PPEQUIP
中。
现在当你有一个表需要一般地引用设备时,没有具体考虑设备属于哪个类别,例如你的ORDER_DETAIL
那么外键引用转到超类型表(即{{ 1}})。另一方面,如果您只需要引用特定类别,那么您将在子类型级别执行此操作。