我有一個數據庫,我存儲房屋。每個房子可以有多個設施,每個設施可以有多個值。數據庫設計問題
比方說,我想存儲房子的類型(公寓,別墅,工作室等)。我在想的是有一個房屋類型的property_type表和一個設施表,我將保存home_id和property_type_id。
我的想法是否正確?有沒有更好的辦法?
我有一個數據庫,我存儲房屋。每個房子可以有多個設施,每個設施可以有多個值。數據庫設計問題
比方說,我想存儲房子的類型(公寓,別墅,工作室等)。我在想的是有一個房屋類型的property_type表和一個設施表,我將保存home_id和property_type_id。
我的想法是否正確?有沒有更好的辦法?
這是我的照片。不過,我對你的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
這是一個完全有效的設計,雖然可能更合適,如果一個位置可以有一個以上的類型。
在這種情況下,我通常在位置表直接添加property_type_id,前提是所有地點都有一個類型(這似乎可能在這種情況下)
編輯: O等待,這似乎是一個單一的房子可以有多個設施。在這種情況下,我將創建一個帶有house_id的設施表,並在設施表上添加property_type_id和任何其他相關信息。
您的設計是有效的,這樣做沒有錯。但爲什麼不爲你的屬性類型使用繼承而不是使用property_type屬性?表之間的繼承通過使用PK-PK關係完成。如果不同類型的屬性具有共同的屬性(將放置在超類型/超級表中)以及將在子類型中存在的不同屬性,那麼執行此操作將證明其更有效。此外,也許這些屬性中的一個與另一個表有關係,但並非所有其他屬性實際上都有這種關係。但是,這又取決於您的業務需求。
如果通過「設施」,你的意思類似於屬性的一個特徵(通過你對另一個答案的評論,看起來你是這麼做的),那麼你所擁有的就是多對多(或者,更短,M:M)的關係。也就是說,你有兩個「東西」:
而每個屬性都可以有多個設施,任何給定的設施可能存在於多個屬性(換句話說,一個給定的財產可以有一個游泳池或微波爐,你可以有一個游泳池和多個屬性與微波多個屬性)。
在關係數據庫中,M:M關係使用關聯表來表示。因此,在一般情況下,你的前兩個表是這樣的:
Property
------------
Property ID
Description
etc.
Facility
------------
Facility ID
Description
etc.
現在,你需要一個表,對於每一行,讓你給定的屬性給定的設備相關聯。這將是這樣的:
PropertyFacility
----------------
Property ID
Facility ID
這基本上是一個教科書M:M關係的關係,應該給你你需要什麼。
是的我的錯誤屬性類型不是一個設施,但實際上我的問題是如何爲每個設施存儲多個值。說一個廚房可以有這些價值(洗碗機,冰箱,冰櫃,滾刀,烤箱,微波爐,洗衣機,攪拌機,咖啡機,烤麪包機,鐵,燒烤) – chchrist 2011-02-13 20:57:32