2012-02-28 85 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

数据库应该能够处理大量列和大量的表,所以这两种方法应该从这个角度工作。

如果你没有任何额外的要求,我会使用单表方法。这是最简单的,你正在失去的唯一的事情就是把不空约束上存在只能形成一些类别字段的能力