假设我正在为数据库建模并且我有一个实体Equipement,它可以是工作站或外围设备,当转换为 SQL 时,最好的方法是什么?具有共同属性的装备表和其他两个?还是只有两个子表?
问问题
62 次
1 回答
1
您可以使用通用表、垂直分区或水平分区。通用表具有所有属性和一个附加类型属性。此属性表示您的实体具有哪种类型。特殊类型没有的属性是 NULL。在您的示例中,您可以有一个表:
Equipment(e_id, attr_general,attr_workstation,attr_peripheral,type)
具有以下行:
e_id | attr_general | attr_workstation | attr_peripheral | type
---------------------------------------------------------------
1 | valueG | valueW | NULL | 'W'
2 | valueG | NULL | valueP | 'P'
如果您使用垂直分区,则将所有类映射到表并使用基本实体引用它们:
Equipment(e_id,attr_general) -> PK is e_id
Workstation(w_id,attr_workstation) -> PK,FK w_id where FK referencing to e_id
Peripheral(p_id,attr_peripheral) -> PK,FK p_id where FK referencing to e_id
如果您使用水平分区,您将再次引用您的基础实体,但您也会从每个基础实体中获取所有属性:
Equipment(e_id,attr_general) -> PK is e_id
Workstation(w_id,attr_general, attr_workstation) -> PK,FK w_id where FK referencing to e_id
Peripheral(p_id,attr_general,attr_peripheral) -> PK,FK p_id where FK referencing to e_id
我个人对没有很多不同属性的实体使用通用表。如果你有太多不同的属性,我会避免这种类型,因为你会有很多 NULL 字段。
希望能帮到你!
于 2012-05-14T11:31:49.110 回答