2010-11-03 55 views
1

我正在爲業務組構建多個基於Web的工具。許多這些工具需要一個託管的城市名稱列表。現在,每個工具都有自己的位置查找表,我想集中它,因此一個位置表可以用於所有工具,因此不需要多次添加位置。SQL表設計助理

我創建了位置表

----------------------------- 
| LocationID | LocationName | 
----------------------------- 
|  1  |  Reno  | 
----------------------------- 
|  2  | San Diego | 
----------------------------- 

我想添加附加字段特定於每個工具,但不一定涉及到另一個。我是否應該創建其他表來管理這些字段,或者只是在需要時將新字段添加到此位置表中?

我最初的想法是創建表來保存每個引用的其他工具的設置。

WebTool1 settings table 
    ------------------------------------------------------ 
    | LocationID | HasAirConditioning| HasSecurityGuard | 
    ------------------------------------------------------ 
    |  1  |  TRUE   |  TRUE  | 
    ------------------------------------------------------ 
    |  2  |  FALSE   |  TRUE   | 
    ------------------------------------------------------ 

WebTool2 settings table 
    ------------------------------------------------------- 
    | LocationID | ServerName | RequiresDriveMapping | 
    ------------------------------------------------------- 
    |  1  | DELLSERVER1 |  TRUE    | 
    ------------------------------------------------------- 
    |  2  | HPSERVER3 |  FALSE    | 
    ------------------------------------------------------- 

這是一個很好的策略嗎?如果不是,爲什麼?

回答

3

我認爲這是一個非常好的策略。

對於數據庫,我傾向於首先進行歸一化處理,然後再提出問題......遇到性能問題非常罕見......在這種情況下,查詢語法不會變得更復雜。

唯一的問題是您可能想要構造約束以確保關係保持在1:1。如果這是一個平坦的桌子,這不會是一個問題,但很難說出哪些字段屬於哪種工具。

字段在基表中出現的時間是它們在所有工具中是否通用的時間。

我個人喜歡我的數據庫結構來反映業務。感覺更多自我記錄imo。

+0

感謝您的再次證實。 – zeroef 2010-11-04 02:49:23

+0

很高興......即使對於100k行的連接,如果您正確設置了鍵和索引,連接就會成爲sql server中的一個問題。我看到它在連接數百萬行中表現良好。SQL服務器是令人印象深刻的 – 2010-11-04 10:15:26

0

如果你有大量的這些額外的領域,將它們劃分爲一種自然分割是有意義的。否則,就數據庫而言,我認爲它不是真正重要的。

從純模式的角度來看,通過某些內部邏輯分組而不是應用程序打破字段也許更有意義。例如LocationItInfrastructure和LocationBuildingOperations或somesuch,而不是LocationApp1和LocaationApp2。總的來說,我認爲無論哪種方法對你最有意義,對你來說最簡單的方法是最好的解決方案。

+0

謝謝 - 表名稱剛剛​​被命名爲app1 ... app2 ...爲了我的問題,我一定會使用一個命名約定,傳達什麼表/ – zeroef 2010-11-03 23:59:23

0

這些表有多大?如果表格將包含1000行或更少的行,則沒有問題。但是,如果它是100K或更多,則需要考慮如何查詢這些表,因爲表連接可能會變慢。

例如,您希望顯示SERVERNAME = HPSERVER3和LOCATIONNAME = RENO的所有行以及您的事務表,如果HPSERVER3有很多行並且RENO也有很多行,則查詢規劃器可能會執行嵌套連接並且該查詢將會很慢。索引將有所幫助,但與將所有列組合成單個表相比,設置起來更爲棘手。

+0

表不會有超過100行 – zeroef 2010-11-04 00:32:15