4

我目前正忙于实施一个基本的资产管理系统。它不会很复杂。只需使用名称、序列号、部件号和类型等来跟踪任何资产。然而,我遇到的问题是我也想合并书籍。不幸的是,书籍的结构与普通资产(例如标题、作者、isbn 代码等)非常不同。

我想从社区那里获得一些关于他们认为最好的设计的见解。将书籍合并到资产管理中(如果是,数据库设计应该如何),或者我应该简单地编写一个完全独立的、独立的库模块(可能具有将书籍导出到资产管理系统的一些功能[具有更少/其他字段])。

谢谢!

编辑:其他可能的方法是使捕获屏幕动态化,以便用户可以指定字段和值。然后可以将其作为 XML 存储在数据库中。但他不会是我喜欢的方式。

编辑 2:我忘了提,我非常受我可能使用的技术的约束。它们是 MySQL、GWT、Hibernate 和 Spring(没有 Spring 事务)。

4

4 回答 4

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.

所以额外的资产类型可以只是额外的派生类。然后,每个资产将作为其自己的不同文档写入文档数据库,并通过其资产编号(或根据其包含的字段等进行搜索)或名称或存储方式进行检索。

这将为您提供一个快速而简单的系统,在您跟踪其他资产或有关现有资产的其他信息时,您可能需要它的灵活性。

根据您的编辑进行编辑:用户定义的字段应该可以正常工作。您可以将其设置为对象上的某种键/值字典,或者如果使用更动态的语言,甚至可以将字段添加到对象本身。“基础资产”将由绝对需要的字段组成,其余的可以更宽松地定义、有条件地要求、用户指定等。

于 2010-12-11T16:02:50.137 回答
1

将资产的一般概念与您希望能够合并的每种资产类型的细节分开是有意义的。通常,这将采用主资产表的形式,为您希望包含的每种不同类型的资产(即书籍、硬件、家具)提供不同的表。结构可能如下所示:

Asset(AssetId, Description, Comments)

HardwareAsset(HardwareAssetId, AssetId, SerialNumber, ...)

BookAsset(BookAssetId, AssetId, ISBN, Publisher, Author, ...)

其中AssetId和是表HardwareAssetBookAsset外键Asset。这样,您可以跟踪不同的资产,并在必要时将它们组合在一起。


编辑:或者,您可以创建一个键值表来存储各个对象的值,如下所示:

AssetValue(AssetValueId, AssetId, Key, Value)

然而,这是一个繁琐的解决方案,虽然仍然提供可搜索的字段,但会很快使您的数据库膨胀。为了缓解这个问题,您可以根据您的要求限制字段大小。我不建议在单个字段中序列化字典,因为这会使您的数据库更加膨胀。

于 2010-12-11T16:12:14.710 回答
1

从技术限制来看,我建议将模块分开。

于 2010-12-14T10:40:56.290 回答
1

是的,您可以在主表上标记它是什么类型的资产。因此,如果它是书籍资产,则外键可以将其链接到书籍项目。这样您就不会在没有这些项目的资产上浪费空间。

于 2012-05-28T00:40:54.993 回答