2012-02-21 116 views
1

所以我讀了足夠多的知道,有一個查找表是不是最好的方式去。從性能角度來看,這是爲什麼?考慮下面的例子:一個真正的查找表的優點與缺點

你有一個城市的學校名單。在給定的城市裏,我可以有不止一所學校。 所以你有一個交界處schoolCities之間的兩個。現在考慮一個商業清單。每個城市可以有多個企業。所以你有一個交界表businessCities。問題實際上是:如果你只是使用一張城市表格,爲學校和商業建立一個交叉表格,而爲每個表格學校和企業建立自己的城市表格副本,爲什麼這麼糟糕呢?

+0

看到http://www.simple-talk.com/sql/t-sql-programming/look-up-tables-in-sql-/ – 2012-02-21 16:58:16

回答

8

你所描述的不是「一個真正的查找表」;在你的例子中的城市表格聽起來像是一個很好的正常化想法。 「一個真正的查找表」會更喜歡

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' 

等。純粹的邪惡。

一個城市的表可能會城一國或其他家長地理區域相關聯,因爲可以有很多不同的城市具有相同的名稱(巴黎,利馬,敦等)。

+0

你可以給我一個真正的查找表的描述? – wootscootinboogie 2012-02-21 16:43:00

+2

http://tonyandrews.blogspot.com/2004/10/otlt-and-eav-two-big-design-mistakes.html – 2012-02-21 20:09:58

+0

gracias!kind sir。 – wootscootinboogie 2012-02-22 15:51:53

9

實際上,可以有一些好處OTLT設計(我簡直覺得頭上炸響現在)。

我見過的模型工作得很好,就像這樣。

lookupId所,LookupTypeId,LanguageId,說明(顯示數據)

然後你PARAMS在存儲過程。將只是typeid(獲取所有類型)。如果您只需要轉換特定類型的Id,則只需傳遞LookupId。默認語言將被設置(在我們的例子中,這是英語)。這是以多種語言格式對網站的顯示數據進行皮膚處理的好方法。

我們實際上使用了Match.com,並且每天支持數百萬用戶。我們簡直就是在網絡啓動時緩存查找。這是一個非常有效的系統。最大的好處是,我們可以直接將數據推送到生產環境而不是大型表模式添加/更改。

我看它,只要你只處理小下拉數據等(典型的應用顯示的東西)的方式,它可以提供在性能,維護方面大的優勢和易用性上添加的新的類型。

我知道這是一個不受歡迎的方法。但是,它確實在正確的情況下,如果你對它的使用是有限的和有紀律的工作。

只是我2美分。不過,我相信我會扣除積分或其他任何對這個話題採取不受歡迎的立場。

+1

我完全同意。在某些情況下,沒有相互依賴關係,它只是一個「愚蠢的價值清單」,與效率優勢相比,我並沒有看到很大的不利之處。 – Daniel 2016-11-03 02:04:57

+0

你的意思是你比喻地感到頭部爆炸... – wardw123 2018-02-21 21:54:49

+0

我的字面意思是隱喻。是。 – 2018-02-23 04:10:03