2011-02-13 201 views
0

我有一個數據庫,我存儲房屋。每個房子可以有多個設施,每個設施可以有多個值。數據庫設計問題

比方說,我想存儲房子的類型(公寓,別墅,工作室等)。我在想的是有一個房屋類型的property_type表和一個設施表,我將保存home_id和property_type_id。

我的想法是否正確?有沒有更好的辦法?

回答

2

這是我的照片。不過,我對你的facility的定義有些困惑。我看到設施像是健身房,健身中心或有蓋停車場等。

Property table 
| property_id | property_type_id 
    111    001 
    112    002 


Property type table 
| property_type_id | description 
    001    | house 
    002    | apartment 
    003    | villa 


Facility 
| facility_id  | description  | property_id 
| 999   | community bathroom | 111 
| 998   | community kitchen | 111 
| 997   | fitness center |  112 
| 996   | covered parking |  111 
| 995   | covered parking |  112 

Tenant/Owner table 
| owner_id   | property_id 
| 888   | 111 
| 887   | 112 
+0

是的我的錯誤屬性類型不是一個設施,但實際上我的問題是如何爲每個設施存儲多個值。說一個廚房可以有這些價值(洗碗機,冰箱,冰櫃,滾刀,烤箱,微波爐,洗衣機,攪拌機,咖啡機,烤麪包機,鐵,燒烤) – chchrist 2011-02-13 20:57:32

0

這是一個完全有效的設計,雖然可能更合適,如果一個位置可以有一個以上的類型。

在這種情況下,我通常在位置表直接添加property_type_id,前提是所有地點都有一個類型(這似乎可能在這種情況下)

編輯: O等待,這似乎是一個單一的房子可以有多個設施。在這種情況下,我將創建一個帶有house_id的設施表,並在設施表上添加property_type_id和任何其他相關信息。

0

您的設計是有效的,這樣做沒有錯。但爲什麼不爲你的屬性類型使用繼承而不是使用property_type屬性?表之間的繼承通過使用PK-PK關係完成。如果不同類型的屬性具有共同的屬性(將放置在超類型/超級表中)以及將在子類型中存在的不同屬性,那麼執行此操作將證明其更有效。此外,也許這些屬性中的一個與另一個表有關係,但並非所有其他屬性實際上都有這種關係。但是,這又取決於您的業務需求。

0

如果通過「設施」,你的意思類似於屬性的一個特徵(通過你對另一個答案的評論,看起來你是這麼做的),那麼你所擁有的就是多對多(或者,更短,M:M)的關係。也就是說,你有兩個「東西」:

  • 屬性
  • 設施

而每個屬性都可以有多個設施,任何給定的設施可能存在於多個屬性(換句話說,一個給定的財產可以有一個游泳池或微波爐,你可以有一個游泳池和多個屬性與微波多個屬性)。

在關係數據庫中,M:M關係使用關聯表來表示。因此,在一般情況下,你的前兩個表是這樣的:

Property 
------------ 
Property ID 
Description 
etc. 

Facility 
------------ 
Facility ID 
Description 
etc. 

現在,你需要一個表,對於每一行,讓你給定的屬性給定的設備相關聯。這將是這樣的:

PropertyFacility 
---------------- 
Property ID 
Facility ID 

這基本上是一個教科書M:M關係的關係,應該給你你需要什麼。