所以我讀了足夠多的知道,有一個查找表是不是最好的方式去。從性能角度來看,這是爲什麼?考慮下面的例子:一個真正的查找表的優點與缺點
你有一個城市的學校名單。在給定的城市裏,我可以有不止一所學校。 所以你有一個交界處schoolCities之間的兩個。現在考慮一個商業清單。每個城市可以有多個企業。所以你有一個交界表businessCities。問題實際上是:如果你只是使用一張城市表格,爲學校和商業建立一個交叉表格,而爲每個表格學校和企業建立自己的城市表格副本,爲什麼這麼糟糕呢?
所以我讀了足夠多的知道,有一個查找表是不是最好的方式去。從性能角度來看,這是爲什麼?考慮下面的例子:一個真正的查找表的優點與缺點
你有一個城市的學校名單。在給定的城市裏,我可以有不止一所學校。 所以你有一個交界處schoolCities之間的兩個。現在考慮一個商業清單。每個城市可以有多個企業。所以你有一個交界表businessCities。問題實際上是:如果你只是使用一張城市表格,爲學校和商業建立一個交叉表格,而爲每個表格學校和企業建立自己的城市表格副本,爲什麼這麼糟糕呢?
你所描述的不是「一個真正的查找表」;在你的例子中的城市表格聽起來像是一個很好的正常化想法。 「一個真正的查找表」會更喜歡
CREATE TABLE TheOne (
LookupType varchar(20) NOT NULL -- City, color, shoe size...?
, LookupValue varchar(1000) NOT NULL -- how big does it have to be?
, CONSTRAINT pk_TheOne PRIMARY KEY (LookupType, LookupValue)
)
,你可能有值:
'City', 'Philadelphia'
'City', 'St. Petersburg'
'City', 'Paris'
'State', 'Pennsylvania'
'State', 'Florida'
'Country', 'United States'
'Country', 'France'
'Brand', 'Lucky'
'Brand', 'Diesel'
'Brand', 'Old Navy'
等。純粹的邪惡。
一個城市的表可能會城一國或其他家長地理區域相關聯,因爲可以有很多不同的城市具有相同的名稱(巴黎,利馬,敦等)。
你可以給我一個真正的查找表的描述? – wootscootinboogie 2012-02-21 16:43:00
http://tonyandrews.blogspot.com/2004/10/otlt-and-eav-two-big-design-mistakes.html – 2012-02-21 20:09:58
gracias!kind sir。 – wootscootinboogie 2012-02-22 15:51:53
實際上,可以有一些好處OTLT設計(我簡直覺得頭上炸響現在)。
我見過的模型工作得很好,就像這樣。
lookupId所,LookupTypeId,LanguageId,說明(顯示數據)
然後你PARAMS在存儲過程。將只是typeid(獲取所有類型)。如果您只需要轉換特定類型的Id,則只需傳遞LookupId。默認語言將被設置(在我們的例子中,這是英語)。這是以多種語言格式對網站的顯示數據進行皮膚處理的好方法。
我們實際上使用了Match.com,並且每天支持數百萬用戶。我們簡直就是在網絡啓動時緩存查找。這是一個非常有效的系統。最大的好處是,我們可以直接將數據推送到生產環境而不是大型表模式添加/更改。
我看它,只要你只處理小下拉數據等(典型的應用顯示的東西)的方式,它可以提供在性能,維護方面大的優勢和易用性上添加的新的類型。
我知道這是一個不受歡迎的方法。但是,它確實在正確的情況下,如果你對它的使用是有限的和有紀律的工作。
只是我2美分。不過,我相信我會扣除積分或其他任何對這個話題採取不受歡迎的立場。
看到http://www.simple-talk.com/sql/t-sql-programming/look-up-tables-in-sql-/ – 2012-02-21 16:58:16