2010-12-11 21 views
4

私は現在、基本的な資産管理システムの実装に忙しいです。それほど複雑ではありません。名前、シリアルナンバー、部品番号、タイプなどの資産を追跡するだけのものです。しかし、私が持っている問題は、私も本を組み込むことです。残念ながら、書籍は通常の資産とは非常に異なる構造をしています(例:タイトル、著者、ISBNコードなど)。資産管理データベースの設計

私は、彼らが一番いいと思うデザインについてコミュニティからいくつかの洞察を得たいと思います。資産管理に書籍を組み込む(もしそうなら、データベースデザインをどのように見えるか)、あるいは完全に分離した独立したライブラリモジュールを書かなければならないかもしれない(資産管理システムに本をエクスポートする機能])。

ありがとうございます!

EDIT:可能である他の何かキャプチャ画面を動的にすることで、ユーザはフィールドと値を指定することができます。これをXMLとしてデータベースに格納することができます。しかし、彼はそれをやるのが私の好みの方法ではないでしょう。

EDIT 2:私は言及を忘れてしまった、私は非常に私が使用することの技術に縛らています。これらは、MySQL、GWT、HibernateおよびSpringです(春トランザクション)。

答えて

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. 

ので、追加の資産タイプ追加の派生クラスだけでもかまいません。次に、各資産は、独自の文書として文書データベースに書き込まれ、資産番号で検索されます(または、そこに含まれるフィールドなどに基づいて検索されます)か、名前が格納されます。

これにより、追加の資産や既存の資産に関する追加情報を追跡する際に、柔軟性に富んだシステムを迅速かつ簡単に作成できます。

あなたの編集に基づいて編集:ユーザ定義フィールドはこれでうまくいくはずです。オブジェクトのキー/値ディクショナリとして設定することもできますし、より動的な言語を使用する場合は、オブジェクト自体にフィールドを追加することもできます。 「基本資産」は絶対的に必要なフィールドで構成され、残りはより緩やかに定義され、条件付きで要求され、ユーザー指定などになります。

+0

お返事ありがとうございます。残念ながら、私は非常に私が使用するかもしれない技術に縛られています(質問で言及します)。これらは、MySQL、GWT、およびHibernateです。 –

+0

@Nico Huysamen:それは確かに残念です。そのような柔軟性、特にユーザー定義のフィールドを持つためには、テキストBLOBにXMLとして格納することをお勧めします。リレーショナルデータベースには理想的ではありませんが、機能します。そして、比較的少量のデータ(資産の合計数はどれくらいですか)について言えば、それはうまくいくはずです。索引付けなどのために、「必須」フィールドを他の列に分割します。使いやすさのために、シリアライズ/デシリアライズ抽象化で全体をラップしようとします。しかし、必要に応じて、ユーザー定義のフィールドを検索する方法がわからない... – David

+0

これは私が恐れていたものでした。システムはスケーラブルでなければなりません。現時点では、約6000人の従業員を抱える会社で働くはずです(したがって、資産の数量を数値で表すことができます)。しかし、理論的には私はそれがどんなサイズでも働くことを望んでいます。また、必要なフィールドには明示的な列を、XMLではユーザー定義の列のみを使用できるという考えも考えました。しかし、あなたが言ったように、それは非常に困難な本の著者を言うために検索するだろう。 –

1

アセットの一般的な概念をあなたが取り入れることができるようにしたい資産の種類ごとの詳細。通常、これはマスターAssetテーブルの形を取ります。アセットテーブルには、ブック、ハードウェア、家具など、含めるアセットの種類ごとに異なるテーブルがあります。 HardwareAssetBookAssetの両方でAssetIdAssetテーブルへの外部キーです

Asset(AssetId, Description, Comments) 

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

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

:構造は次のようになります。こうすることで、異なるアセットを追跡し、重要なときにグループ化することができます。


EDITは:また、あなたがキーを作成することができます - このようになります。個々のオブジェクトの値を格納する値テーブル、:しかし

AssetValue(AssetValueId, AssetId, Key, Value) 

を、これは厄介なソリューションであること、まだしばらく検索可能なフィールドを提供することで、データベースが急速に膨張します。問題を軽減するために、要件に応じてフィールドサイズを制限することができます。 1つのフィールドの中で辞書をシリアライズすることはお勧めしません。これはデータベースをさらに膨らませるためです。

+0

答えをありがとう。それは理想的な世界では機能しますが、残念ながら私はそのシステムを特定の種類の資産に結びつけたくありません。企業が必要とするすべての種類の資産を推測することは不可能です。システムのポイントは*すべてのソリューションに適合する* 1サイズにすることです。 –

+0

@ニコ:投稿を編集しました。 –

1

技術の制約から、私はモジュールを分けておくことをお勧めします。

+0

本当に!返信いただきありがとうございます。 –

1

はいメインテーブルでは、どのような種類のアセットにフラグを立てることができます。したがって、 が書籍のアセットである場合、外部キーはそれをブックアイテムにリンクすることができます。この あなたはこれらの項目を持っていないそれらの資産のスペースを無駄にしません。

関連する問題