2012-05-14 57 views
0

假如我是建模數據庫和我有一個實體設備公司,它可以是一個工作站外圍,翻譯成SQL的時候,什麼是最好的方法是什麼? 設備表與常用屬性和其他兩個?或者只是兩個子表?轉化agregation模型爲sql

+2

'Workstation'和'Peripheral'有什麼不同? –

+0

感謝這個問題,我是關於問,他們之間的區別是**工作站**有一個用戶,但** Peripheral **可以有多個(例如共享打印機)。 – elaich

回答

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

希望能幫助你!