我正在處理食譜模塊(ASP.NET MVC,實體框架,sql server),並且我必須在數據庫中設置的實體之一是成分,它們的特徵以及翻譯成多種語言。如何設計我的成分數據庫表?
我想創建兩個表如下:
Table Ingredient
Id, nvarchar(20), primary key
EnergyInKCal, float
... other characteristics
Source, nvarchar(50)
Table IngredientTranslation
Id, nvarchar(20), primary key
LanguageCode, nvarchar(2)
Name, nvarchar(200)
所以每種成分會在成分表中定義一次,有一個獨特的代碼作爲其主鍵,例如:
'N32-004669', 64, 368, 'NUBEL'
並翻譯在IngredientTranslation臺,例如
'N32-004669', 'NL', 'Aardappel, zoete'
'N32-004669', 'FR', 'Pomme de terre, douce'
'N32-004669', 'EN', 'Potatoe, sweet'
我噸hink查詢成分變得這麼簡單......你認爲使用代碼(這是nvarchar(20))作爲主鍵是個好主意嗎?或者是一個簡單的bigint更好,但是我必須在我的查詢中使用JOINS。也許其他更好的方法 - 性能明智嗎?
編輯:閱讀的答案後,我重新設計了表格如下:
Table Ingredient
Id, bigint, primary key
ExternalId, nvarchar(20)
EnergyInKCal, float
... other characteristics
Source, nvarchar(50)
Table IngredientTranslation
Id, bigint, primary key
IngredientId, bigint (relation with Id of Ingredient table)
LanguageCode, nvarchar(2)
Name, nvarchar(200)
感謝, 大號
那麼,你認爲你如何通過使用'nvarchar'來避免JOIN? – 2011-12-27 12:48:04
好吧,因爲每個配方都存儲代碼,所以如果我想檢索特徵和名稱,我可以使用'代碼'(和語言)來查詢? – 2011-12-27 12:50:39
所以你正在考慮做一個額外的查詢? 1.沒有關於整數ID的信息,這使得它們比查詢數據庫的nvarchars更不合適。 2. OFG NOOO! *不要做額外的查詢,使用連接要快得多!* – 2011-12-27 12:52:23