假设我正在建模数据库,并且我有一个实体设备,它可以是工作站或外围设备,当转换为SQL时, 什么是最好的方法 ? Equipement 表中包含常用属性和其他两个属性?或只是两个子表?
答案 0 :(得分:1)
您可以使用通用表,垂直分区或水平分区。通用表具有ALL属性和其他类型属性。此属性表示您的实体具有的类型。您没有特殊类型的属性是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字段。
希望能帮到你!