我目前正忙于实现一个基本的资产管理系统。这不会很复杂。只是为了追踪任何资产的名称,序列号,零件号和类型等。然而,我的问题是,我也想合并书籍。不幸的是,书籍的结构与普通资产(例如书名、作者、isbn代码等)非常不同。
我想从社会上了解一下他们认为什么是最好的设计。将书籍合并到资产管理中(如果是的话,数据库设计应该如何设计),或者我应该编写一个完全独立的库模块(可能具有一些功能,可以将一本书导出到具有较少/其他字段的资产管理系统)。
谢谢!
编辑:还可以使捕获屏幕动态化,这样用户就可以指定字段和值。然后,可以将其作为XML存储在数据库中。但他的不是我喜欢的方式。
编辑2:我忘了提到的,我非常受我可能使用的技术的约束。这些是MySQL、GWT、Hibernate和Spring (没有Spring事务)。
发布于 2010-12-11 16:02:50
一种方法可以是使用文档样式的无sql数据库(如Mongo)来存储资产。这样,每种不同类型的资产都可以轻松地拥有自己的字段集,而不需要额外的表等等。
基本上,我想象的是伪代码,类似于:
class Asset
{
int AssetNumber;
int AssetType;
string Description;
// etc.
}
class BookAsset : Asset
{
// book-specific fields
}
class ElectronicsAsset : Asset
{
// electronics-specific fields
}
// etc.
因此,额外的资产类型可以只是额外的派生类。然后将每个资产作为自己的独立文档写入文档数据库,并通过其资产编号(或根据其包含的字段进行搜索等)检索。或者名字或者不管它是怎么被存储的。
这将使您在跟踪其他资产或有关现有资产的其他信息时具有您可能希望的灵活性的快速和简单的系统。
基于编辑的编辑:用户定义的字段应该可以很好地工作。您可以将其设置为对象上的某种键/值字典,甚至可以使用更动态的语言将字段添加到对象本身。“基本资产”将由绝对需要的字段组成,其余的字段可以更松散地定义、有条件地要求、用户指定等。
发布于 2010-12-11 16:12:14
将资产的一般概念与您希望能够合并的每种类型的资产的具体内容分开是有意义的。通常,这将采取主资产表的形式,对于您希望包括的每种不同类型的资产,都有不同的表,即图书、硬件、家具。结构可能如下所示:
Asset(AssetId, Description, Comments)
HardwareAsset(HardwareAssetId, AssetId, SerialNumber, ...)
BookAsset(BookAssetId, AssetId, ISBN, Publisher, Author, ...)
其中,AssetId
在HardwareAsset
和BookAsset
中都是Asset
表的外键。这样,您就可以跟踪不同的资产,并在需要时将它们组合在一起。
编辑:或者,您可以创建一个键值表来存储单个对象的值,如下所示:
AssetValue(AssetValueId, AssetId, Key, Value)
然而,这是一个麻烦的解决方案,虽然仍然提供可搜索的字段,但很快就会使数据库膨胀。为了缓解这个问题,您可以根据您的需求限制字段大小。我不建议在单个字段中序列化字典,因为这样会使数据库更加臃肿。
发布于 2010-12-14 10:40:56
与技术限制相比,我建议将模块保持独立。
https://stackoverflow.com/questions/4417511
复制相似问题