我正在开发一个资产管理应用程序。
通过以前使用的excel跟踪器,我能够识别出所有类别资产共有的一些属性(基本上是非技术属性,例如Purchase Order No
。,Warranty Info
等。)我想我会另外制作一张表。
但是在存储技术属性时,有许多类别的资产,我只需要存储一两个额外的属性。
是否应为所有这些属性创建一个表并在适用的地方存储NULL,还是应该为每个仅包含资产ID和添加列的类别创建一个单独的表?哪种方法更好/更务实?
是否有太多表格使数据库混乱?我有大约10个这样的类别。
答案 0 :(得分:1)
数据库应该能够处理大量的列和大量的表,因此这两种方法都应该从这个角度出发。
如果您没有任何其他要求,我会使用单表方法。这是最简单的,你唯一要放弃的是能够对仅存在于某些类别中的字段设置非空约束
答案 1 :(得分:1)
有三种已知的方法:
单人表
在此模型中,您有一个包含所有已知列的表,并允许它们对于没有该属性的类型为null。这为您提供了一个简单的数据库和相当简单的SQL,但不允许支持关系数据库为您提供的常用功能,例如坚持数据类型的非空列,或创建有意义的唯一索引。
它也会导致混乱的SQL,开发人员会随着时间的推移忘记列的含义,因此您可以将列用于多种用途。
它确实可以轻松加入其他表 - 因此,如果您拥有与该资产相关的资产和购买,则“购买”表会加入“assetID”上的“资产”表。
每个子类型的表格
在这种情况下,您为每个子类型构建一个表,并强制该子类型的数据特征为非null,唯一等。
这样可以更清晰地分离子类型,并且不太可能降级为大球泥,但是加入非常困难 - 从“购买”到“资产”加入,你必须知道哪个表保存了特定的资产。
公共字段的公用表,每个子类型的表格
在这个模型中,你有一个表,用于子类型之间常见的字段 - 你说你已经识别了这个 - 并且每个子类型都有更多的表来存储唯一属性。
这解决了“资产”和“购买”之间的加入问题,使数据保持自我描述。
这意味着客户端逻辑需要实现“join asset_master to asset_subtype”问题。
我更喜欢选项3 - 这是可维护性和可管理性之间的最佳平衡。