我目前正在忙于实施基本的资产管理系统。这不会很复杂。简单地跟踪任何资产的名称,序列号,零件编号和类型等等。然而,我遇到的问题是我想要整合书籍。不幸的是,书籍的结构与普通资产有很大不同(例如标题,作者,伊斯本代码等)。
我希望社区能够从他们认为最好的设计中获得一些见解。将书籍纳入资产管理(如果是这样,数据库设计应该如何看待),或者我应该简单地编写一个完全独立的,独立的库模块(可能具有将书籍导出到资产管理系统的一些功能[使用更少/其他字段] ])。
谢谢!
编辑: 其他可能的方法是使捕获屏幕动态化,以便用户可以指定字段和值。然后,可以将其作为XML存储在数据库中。但他不会成为我的首选方式。
编辑2: 我忘了提及,我受到我可能使用的技术的约束。这些是MySQL,GWT,Hibernate和Spring( no Spring transactions )。
答案 0 :(得分:1)
一种方法可能是使用文档样式的no-sql数据库(例如Mongo)来存储资产。这样,每种不同类型的资产都可以轻松拥有自己的一组字段,而无需额外的表格等。
基本上我所描绘的是伪代码,类似于:
class Asset
{
int AssetNumber;
int AssetType;
string Description;
// etc.
}
class BookAsset : Asset
{
// book-specific fields
}
class ElectronicsAsset : Asset
{
// electronics-specific fields
}
// etc.
因此,额外的资产类型可以是其他派生类。然后,每个资产将作为其自己的不同文档写入文档数据库,并通过其资产编号(或根据其包含的字段搜索等)或名称或其存储来检索。
这将为您提供一个快速简便的系统,您可以在跟踪其他资产或现有资产的其他信息时获得灵活性。
根据您的修改进行修改:用户定义的字段应该可以正常使用。您可以将其设置为对象上的某种键/值字典,或者如果使用更动态的语言,甚至只需将字段添加到对象本身。 “基础资产”将由绝对需要的字段组成,其余字段可以更松散地定义,有条件地要求,用户指定等等。
答案 1 :(得分:1)
将资产的一般概念与您希望能够合并的每种资产的具体情况分开是有意义的。通常,这将采用主资产表的形式,为您希望包括的每种不同类型的资产(即书籍,硬件,家具)使用不同的表格。结构可能如下所示:
Asset(AssetId, Description, Comments)
HardwareAsset(HardwareAssetId, AssetId, SerialNumber, ...)
BookAsset(BookAssetId, AssetId, ISBN, Publisher, Author, ...)
AssetId
和HardwareAsset
中的BookAsset
是Asset
表的外键。这样,您可以跟踪不同的资产,并将它们组合在一起。
编辑:或者,您可以创建一个键值表来存储单个对象的值,如下所示:
AssetValue(AssetValueId, AssetId, Key, Value)
然而,这是一个麻烦的解决方案,虽然仍然提供可搜索的字段,但会迅速膨胀您的数据库。要缓解此问题,您可以根据需要限制字段大小。我不建议在单个字段中序列化字典,因为这会使数据库更加膨胀。
答案 2 :(得分:1)
从技术限制来看,我建议将模块分开。
答案 3 :(得分:1)
在主表上,您可以标记它是什么类型的资产。所以,如果它 是一本书资产,他们可以将外键链接到书籍项目。这个 你不会在那些没有这些物品的资产上浪费空间。