0

假设我正在为数据库建模并且我有一个实体Equipement,它可以是工作站外围设备,当转换为 SQL 时,最好的方法是什么?具有共同属性的装备表和其他两个还是只有两个子表?

4

1 回答 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 回答