将agregation模型转换为sql

时间:2012-05-14 11:01:06

标签: sql database database-design relational-database

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

1 个答案:

答案 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字段。

希望能帮到你!