2012-02-28 139 views
0

我正在開發資產管理應用程序。資產管理數據庫設計

通過以前使用的excel跟蹤器,我能夠識別出所有類別資產(基本上非技術屬性,如Purchase Order NoWarranty Info等)共有的一些屬性,我認爲這些屬性對於將製作一張單獨的桌子。

但存儲技術的屬性時,也有我只需要一個或兩個附加屬性存儲資產的許多類別。

如果一個使一個單一的表,所有這些屬性和存儲空值(如適用)或我應該做一個單獨的表每個類別只包含資產ID和另外的列?哪種方法更好/更實用?

使用太多的表會讓數據庫混亂嗎?我有大約10個這樣的類別。

回答

1

有3種已知的方法是:

單桌

在此模型中,您有一個包含所有已知列的單個表,並允許它們對於沒有該屬性的類型爲null。這爲您提供了一個簡單的數據庫和相當簡單的SQL,但不支持關係數據庫爲您提供的常見功能,例如堅持數據類型爲非空列,或者在有意義的情況下創建唯一索引。

這也往往導致混亂的SQL,與開發商忘記隨​​着時間的推移哪些列的意思,所以你可以得到被用於多種用途一欄。

它可以很容易地加入到其它表 - 所以,如果你有一個資產以及與該資產購買,「購買」表連接到「由assetid」中的「資產」表。每亞型

表在這種情況下,將構建表中的每個子類型,強制執行亞型的數據特性與不爲空,等等獨特

這產生更清晰的分離亞型,並且不太可能降解爲大球泥,但加入非常困難 - 從「購買」加入到「資產」,您必須知道哪個表包含該特定資產。

常見的領域有共同的表,每亞型

表在這種模式下,你有那個亞型之間是共同領域的單個表 - 你說你已經確定這一點 - 有更進一步的表爲每個子類型存儲唯一的屬性。

這解決了「資產」與「購買」之間的連接問題,使數據保持自我描述。

這確實意味着客戶端邏輯需要實現「將asset_master連接到asset_subtype」問題。

我更喜歡選項3 - 這是可維護性和可管理性之間的最佳平衡。

+0

感謝您的精心解答。我已經分離了常見的屬性,幸運的是,一半的資產不需要任何額外的屬性來存儲。我已經在「電腦」之下兜售了服務器,臺式機和筆記本電腦,剩下的我有一張名爲「其他」的表格,大約有8欄。 – Bazooka 2012-02-28 11:18:16

1

數據庫應該能夠處理大量列和大量的表,所以這兩種方法應該從這個角度工作。

如果你沒有任何額外的要求,我會使用單表方法。這是最簡單的,你正在失去的唯一的事情就是把不空約束上存在只能形成一些類別字段的能力