2011-02-07 40 views
1

我正在構建一個讓大學生尋找住房的應用程序。我的模型包括一個房間表,其中包括房間尺寸,是否爲大廳工作人員預留,房間號等等。但部分客房參與2-8間客房的「套房」。我將如何建模?如果不是每個記錄都是組的成員,我該如何表示記錄組?

我正在考慮房間表中的suite_id列,其中NULL允許佔非套房房間的大部分。不過,似乎應該有更優雅的方式來做事。

至於我想對數據做什麼,我希望能夠檢查一個房間是否是套房的一部分,並且我希望能夠查詢所有套房(可選地限制大小)。

任何意見將不勝感激!

回答

1

該架構工作正常。

要檢查房間是否爲套房的一部分,請檢查您的應用程序中列是否爲空。

要查詢所有套件,請選擇行WHERE suite_id IS NOT NULL,並按大小限制GROUP BY suite_id HAVING COUNT(*) = number_of_rooms_you_want

雖然語法可能略有不同,具體取決於您使用的RDBMS。你沒有用任何標籤來提問。

+0

如果我想要獲得套房清單作爲房間ID列表,該怎麼辦?我需要解析我的應用程序中WHERE suite_id IS NOT NULL結果集的結果嗎? – josePhoenix 2011-02-07 09:06:34

1

有一個suite_id是空的沒有什麼不雅的。這基本上說,在你的數據模型中,一個房間可以是是套房的一部分。這是情況的直接表現,因此很優雅。

替代品更糟。考慮一下,如果你願意的話,如果你把房間分隔到不同的表中,模型可能會是什麼樣子。一間是套房,一間是非套房。突然你的搜索標準必須超過兩個表。您可以通過兩個表複製信息(實際上,只有一個標識符是不同的)。這不代表問題的嚴重性,並且會導致更多的工作量,以及兩個搜索查詢(大概是在聯盟中)潛在的性能影響,以便讓您的結果恢復。哦,如果你添加一個共同的屬性,你需要將它添加到兩個地方,並做任何你需要做的維護工作來識別新的列,兩次。

另一種選擇是將與「套件」有關的所有字段包含在主表中。但是,這意味着每個不屬於套件的房間都有冗餘數據。正如你所說的,他們很少成爲一個套件的一部分,所以這些記錄中的大多數將會有死角。再一次,這也不能代表這種情況。

您遇到的解決方案是正確和強大的。

0

如果一個房間可能是不同套房的一部分,你可以考慮創建一個單獨的表SuiteRooms(這可能有點反映他們是多麼甜蜜的想法)。

相關問題