2013-11-27 36 views
0

我想在數據庫中建模2個實體:CafeBrandCafe。我有幾乎相同的性能在兩個實體:數據庫架構實用方法

CafeBrand{ 
foodDescription, 
website, 
email, 
phone 
} 

cafe{ 
foodDescription, 
website, 
email, 
phone 
} 

因此,讓我們在麥當勞的情況下,說所有的「咖啡館」也有同樣的foodDescription:「垃圾食品」。但是其他一些品牌可能爲不同的咖啡店分別提供食品說明(「三明治」,「僅限飲料」......)。

與網站/電子郵件/電話屬性相同:咖啡館可能有自己的網站/電子郵件/電話,但它也可能使用相同的網站/電子郵件/電話。相同的CafeBrand常常有一個網站,但不同的咖啡館有不同的電子郵件/電話。

我的問題是:是否明智地存儲這些屬性,然後使用if/else(在SQL或代碼中)來獲取正確的描述,網站,電子郵件,電話(如cafe.website == null,然後使用cafebrand.website)還是更好地使用關係來分隔表'FoodDescription','網站'數據不會經常寫入數據庫,大多數時候只會使用select語句。

如果公司有一個單一的咖啡館。這個foodDescription/Website應該如何分成CafeBrand/Cafe表。

+1

事實上,你有兩個幾乎相同的列表應該是一個巨大的紅色標誌,你已經建模錯誤。如果它們相同,則將它們與另一列相同的表中,以將它們彼此區分開來。一張名爲「商店」或「餐館」的桌子。然後有一個「Cafe」或「CafeBrand」的標誌或指示符。 –

+0

因此,爲了在某些地區存儲所有麥當勞餐廳,我必須將'垃圾食品'作爲'品牌'記錄,然後在其他餐館中引用此記錄,並在我的所有查詢中使用'if/else'來獲取正確的網站/食物/電話/電子郵件。那是對的嗎? – jonasnas

+0

這是SQL。你不要「如果/其他」。你「WHERE RestaurantBrand ='McDonalds'」 –

回答

0

正如Bill Gregg所提到的,您應該將所有類似的數據放在一張表中。所以,您會收到以下結構:

cafe { 
    foodDescription, 
    website, 
    email, 
    phone, 
    brand 
} 

由於foodDescriptionwebsite等列將包含我認爲非常獨特的價值觀,你也不會獲得與分離的任何利潤數據到不同的表。

+0

因此,爲了在某些區域存儲所有麥當勞餐廳,我必須在'品牌'記錄中插入'垃圾食品',然後在其他餐廳中引用此記錄,並在我的所有查詢中使用'if/else'來獲取正確的網站/食物/電話/電子郵件。那是對的嗎? – jonasnas

+0

是的。這樣你會收到一些屬性覆蓋。 – max

+0

你也可以在你的SQL中使用'COALESCE'而不是if/else – max