2010-12-11 102 views
4

我目前正在忙于实施基本资产管理系统。它不会很复杂。只需要跟踪任何资产的名称,序列号,零件号和类型等等。然而,我所遇到的问题是我也想整合书籍。不幸的是,书籍的结构与普通资产(例如标题,作者,isbn代码等)完全不同。资产管理数据库设计

我想从社区了解他们认为最好的设计。将书籍合并到资产管理中(如果是这样,数据库设计应该如何查看),还是应该编写完全独立的独立库模块(可能有一些功能可将图书导出到资产管理系统[使用较少/其他字段])。

谢谢!

编辑:别的东西,可能是使拍摄画面的动态,这样用户可以指定字段和值。然后这可以作为XML存储在数据库中。但他不会是我喜欢的方式。

编辑2:我忘了提及,我很受我可能使用的技术的约束。这些是MySQL,GWT,Hibernate和Spring(没有春季交易)。

回答

1

一种方法可能是使用文档样式的非sql数据库(如Mongo)来存储资产。这样,每个不同类型的资产可以轻松拥有自己的一套领域,而不需要额外的表格等

基本上我想象是伪代码类似于:

class Asset 
{ 
    int AssetNumber; 
    int AssetType; 
    string Description; 
    // etc. 
} 
class BookAsset : Asset 
{ 
    // book-specific fields 
} 
class ElectronicsAsset : Asset 
{ 
    // electronics-specific fields 
} 
// etc. 

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

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

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

+0

感谢您的回答。不幸的是,我非常关注我可能使用的技术(将在问题中提及它)。这些是MySQL,GWT和Hibernate。 – 2010-12-11 16:07:25

+0

@Nico Huysamen:这当然是一个耻辱。为了获得这种灵活性,特别是用户定义的字段,最好的办法可能是将它作为XML存储在文本块中。这对于关系数据库来说并不理想,但它可以工作。如果你谈论的是相对较少的数据(总共有多少资产?),那么它应该没问题。将“required”字段分解为其他列以进行索引等。并尝试将整个事件封装在序列化/反序列化抽象中以便于使用。不知道如何搜索用户定义的字段,但如果需要的话... – David 2010-12-11 16:13:23

+0

这就是我所害怕的。该系统应该是可扩展的。目前,它应该为拥有大约6000名员工的公司工作(这样您可以量化资产数量)。但是,理论上我希望它可以适用于任何规模。我还想到了这样一个想法,即可以为必填字段显示明确的列,然后只有用户在XML中定义的列。但正如你所说,它会让寻找一本书的作者非常困难。 – 2010-12-11 16:19:51

1

将资产的一般概念与您希望能够包含的每种资产的具体细节。通常情况下,这将采用主资产表格的形式,对于您希望包括的每种不同类型的资产(即书籍,硬件,家具)使用不同的表格。结构可能是这样的:

Asset(AssetId, Description, Comments) 

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

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

AssetId两个HardwareAssetBookAsset是一个外键Asset表。这样,您可以跟踪不同的资产,并在重要时将它们分组在一起。


编辑:或者,你可以创建一个键 - 值表存储为单个对象的值,这可能是这样的:

AssetValue(AssetValueId, AssetId, Key, Value) 

然而,这是一个繁琐的解决方案,同时还提供可搜索的字段,将快速膨胀你的数据库。为了缓解问题,您可以根据您的要求限制字段大小。我不建议在单个字段内序列化字典,因为这会使数据库膨胀得更厉害。

+0

感谢您的回答。这将在理想的世界中发挥作用,但不幸的是,我不想将系统与特定类型的资产联系起来。我猜测一家公司可能需要的所有资产类型是不可能的。该系统的要点是成为一种适合所有人的解决方案。 – 2010-12-11 16:17:23

+0

@Nico:我编辑了我的帖子。 – 2010-12-11 17:27:11

1

从技术约束我建议保持模块分开。

+0

确实!谢谢回复。 – 2010-12-14 10:41:42

1

在主表上可以标记它是什么类型的资产。因此,如果它是 是书籍资产,它们可以将外键链接到书籍项目。这种方式不会浪费那些没有这些物品的资产。