资产管理数据库设计

时间:2012-02-28 09:42:06

标签: database database-design

我正在开发一个资产管理应用程序。

通过以前使用的excel跟踪器,我能够识别出所有类别资产共有的一些属性(基本上是非技术属性,例如Purchase Order No。,Warranty Info等。)我想我会另外制作一张表。

但是在存储技术属性时,有许多类别的资产,我只需要存储一两个额外的属性。

是否应为所有这些属性创建一个表并在适用的地方存储NULL,还是应该为每个仅包含资产ID和添加列的类别创建一个单独的表?哪种方法更好/更务实?

是否有太多表格使数据库混乱?我有大约10个这样的类别。

2 个答案:

答案 0 :(得分:1)

数据库应该能够处理大量的列和大量的表,因此这两种方法都应该从这个角度出发。

如果您没有任何其他要求,我会使用单表方法。这是最简单的,你唯一要放弃的是能够对仅存在于某些类别中的字段设置非空约束

答案 1 :(得分:1)

有三种已知的方法:

单人表

在此模型中,您有一个包含所有已知列的表,并允许它们对于没有该属性的类型为null。这为您提供了一个简单的数据库和相当简单的SQL,但不允许支持关系数据库为您提供的常用功能,例如坚持数据类型的非空列,或创建有意义的唯一索引。

它也会导致混乱的SQL,开发人员会随着时间的推移忘记列的含义,因此您可以将列用于多种用途。

它确实可以轻松加入其他表 - 因此,如果您拥有与该资产相关的资产和购买,则“购买”表会加入“assetID”上的“资产”表。

每个子类型的表格

在这种情况下,您为每个子类型构建一个表,并强制该子类型的数据特征为非null,唯一等。

这样可以更清晰地分离子类型,并且不太可能降级为大球泥,但是加入非常困难 - 从“购买”到“资产”加入,你必须知道哪个表保存了特定的资产。

公共字段的公用表,每个子类型的表格

在这个模型中,你有一个表,用于子类型之间常见的字段 - 你说你已经识别了这个 - 并且每个子类型都有更多的表来存储唯一属性。

这解决了“资产”和“购买”之间的加入问题,使数据保持自我描述。

这意味着客户端逻辑需要实现“join asset_master to asset_subtype”问题。

我更喜欢选项3 - 这是可维护性和可管理性之间的最佳平衡。