2016-07-29 13 views
0

我正在建設一個特定城鎮的住宿租賃網站。 它將包括房屋,度假村,酒店等。用於鏈接功能到住宿清單的高效MySQL結構

我在尋找關於如何最好地鏈接房地產特徵(空調,游泳池等),以個別物業的意見。

我有一個大約50個屬性功能設置爲feature_id,feature_category,feature_name。

什麼是最好的方式來存儲哪些功能與哪些屬性有關?

包含feature_id數組的屬性表(prop_features)中的列是最好的方法嗎?

我設法找到並能夠剖析數據庫的唯一示例顯示了作爲feature_1,feature_2等添加的功能,看起來效率很低,因爲某些屬性可能只有feature_1和feature_49。 每一個都作爲一個列添加到property_table。

我是從零開始創建數據庫的新手,所以我非常感謝任何有關如何以我的項目的這一部分開始的最佳建議。 (這也是爲什麼我沒有太多的運氣谷歌搜索它,因爲我不知道如何把它放在更通用的術語,可能會給我一個解決方案)。

+0

我建議,包括您的財產和功能表的結構以及每個樣本條目的更多具體答案。 –

回答

1

一個解決辦法是有一箇中間表加入性能特點,像這樣:

CREATE TABLE propertyfeatures (property_id INT, feature_id INT); 

如果我們有一個有空調名爲Acme酒店(樓盤序號1)屬性(功能ID 2),游泳池(功能ID 4),數據看起來是這樣的:

property_id | feature_id 
1    2 
1    4 

要檢索每個屬性的功能(不包括屬性,而無需特徵)一個簡單的查詢將是:

SELECT 
    p.property_name, 
    f.feature_name, 
    f.feature_category 
FROM property AS p 
INNER JOIN propertyfeatures AS pf 
    ON p.property_id = pf.property_id 
INNER JOIN features AS f 
    ON pf.feature_id = f.feature_id 
GROUP BY p.property_id 

注意:我已經對現有數據庫中的表和列名作了假設。你必須相應地調整上述內容。

我設法找到並能夠剖析數據庫的唯一示例顯示了作爲feature_1,feature_2等添加的功能,看起來效率很低,因爲某些屬性可能只有feature_1和feature_49。每一個都作爲一個列添加到property_table。

雖然這樣做可以做到,但您認爲這樣做效率低下,或者更確切地說,維護起來很尷尬。它被稱爲,因爲您要將唯一行值更改爲多列,因此需要使用。例如,如果添加了新功能(例如免費Wifi)會怎麼樣?這不是簡單地插入一行新數據的情況,因爲它與中間表一樣,你必須創建一個新列來支持它。

不僅如此,還需要手動或動態定義特徵列。作爲參考,請看MySQL Pivot Table,它演示了手動和動態方法。

+0

謝謝,甚至沒有把它當作一種選擇 - 正如我所說的,就這個從零開始構建而言,我是非常新的。 – webecho

+0

@webecho你是最受歡迎的。我正在進行編輯以包含對其他一些問題的回覆。 –

+0

謝謝 - 很高興看到一個使用與我正在嘗試做的相同名稱的例子,使得它更容易理解。 明天早上你會明白這一點。 有一個問題,當你聲明propertyfeatures AS pf ...這是這只是爲了使查詢的以下部分更快鍵入? 即例如ON property_name.property_id = property_feature.property_id與p.property_id = pf.property_id相同。 (對不起,請問,但我從10天前開始用MySQL(從頭開始)) – webecho

1

一種簡單的方法是將另一個表添加到具有列的數據庫中。這種方法的關鍵字是「聯結表」,它在數據庫設計中非常基礎。

property_identifier | feature_identifier (feature_id in your case) 

在此表中,您可以顯示屬性和特定功能之間的連接。

所以,你可以這麼說,PROPERTY_ID 1酒店有游泳池(FEATURE_ID:2)和一個漂亮的廚房(FEATURE_ID:23)

所以該表是這樣的:

propery_id | feature_id 
    1  | 2 
    1  | 23 
+0

謝謝菲利普 「Junction Table」給了我一堆東西,開始在谷歌上閱讀。 非常感謝 – webecho