2013-06-28 91 views
3

我有用於存儲公司資產多個表,這些表包括: -創建多個鎖定表比。創建一個查找表

•汽車

•服務器

•電腦

•傢俱

現在對於每個資產,我想創建一個商店資產模型查找表,例如在創建新PC時,用戶將選擇型號「Dell vostro 350」等。 但是有什麼更好的;要定義四個查找表(如vechicle_model,Server_models,Pc_models,furniture_model),或定義一個查找表,並有一列描述它的類型(Type = PC)

問候

+0

http://martinfowler.com/eaaCatalog/classTableInheritance.html –

回答

1

如果你只是打算用於查找,我會選擇一個表格解決方案。

如果您打算根據其型號存儲有關資產的其他信息,例如車輛是汽油/柴油車,還是PC機是臺式機或筆記本電腦,那麼多表解決方案可能會更好。

+0

但是一張表會影響性能,因爲我必須過濾只有特定類型的資產。例如,當我在新車上做廣告時,我不得不搜索那些型號爲Vechicle的車型。你覺得怎麼樣? –

+0

它可能會產生影響,但是,我猜這個表格不會是數千行而不是數百萬行,並且asset_type或assert_type,model_name上的索引會有所幫助 –

5

使用單獨的查找表,儘管它們可能具有相似性 - 除非您a)想要允許某人存儲Dell vostro 350作爲傢俱類型,或者b)想要在數據庫中具有顯着更復雜的約束條件防止這種交叉選擇被記錄。實際上,您對單個查詢表的建議是衆所周知的,它甚至獲得了它自己的縮寫--OTLT,一個真正的查找表的縮寫。如果你關心搜索它,它幾乎總是被稱爲「反模式」或「初學者錯誤」。

1

這些表是否共享相同的列,約束和物理存儲?

  • 如果是,他們應該是一張表。
  • 如果不是,請將它們分開。

請注意,上述條件實際上比第一眼看起來更難實現。例如,如果出現以下情況,應將表格分開保存:

  • 對於每個表,任何鍵都應該是唯一的,而不是所有表中的行的聯合。
  • 外鍵存在於一個表中但不是另一個,或外鍵引用一個表,但不是另一個表。
  • CHECK約束存在於一個表中,但不存在於另一個表中。這甚至包括簡單的東西,例如NOT NULL。
  • 列類型或寬度是不同的。
  • 觸發器是不同的。
  • 權限是不同的。
  • 需要採取表級鎖。
  • 表需要以不同的方式進行羣集或分區,或者存儲在不同的磁盤上,或者在其他一些物理存儲參數(取決於DBMS)上有所不同。
  • 等...

所以,很可能你會需要繼續保持的表分開。