2010-12-11 18 views
4

Ich bin gerade dabei ein grundlegendes Asset Management System zu implementieren. Es wird nicht sehr kompliziert sein. Es ist einfach etwas zu merken, mit Namen, Seriennummer, Teilenummer und Typ etc. Das Problem ist jedoch, dass ich auch Bücher integrieren möchte. Leider haben Bücher eine ganz andere Struktur als normale Assets (zum Beispiel Titel, Autoren, Isbn-Codes etc.).Asset Management Datenbank Design

Ich hätte gerne Einblick in die Community, welches Design sie für das Beste halten. Bücher in das Asset Management integrieren (und wenn ja, wie sollte das Datenbankdesign aussehen), oder sollte ich einfach ein separates, unabhängiges Bibliotheksmodul schreiben (vielleicht mit einigen Funktionen zum Exportieren eines Buches in das Asset Management System [mit weniger/anderen Feldern] ]).

Danke!

EDIT: Etwas anderes, das möglich ist, ist die Erfassung Bildschirm dynamisch zu machen, so dass der Benutzer die Felder und Werte angeben. Dies kann dann als XML in der Datenbank gespeichert werden. Aber das wäre nicht meine bevorzugte Art, das zu tun.

EDIT 2: ich vergaß zu erwähnen, bin ich durch die Technologien sehr gebunden, die ich verwenden kann. Dies sind MySQL, GWT, Hibernate und Spring (keine Spring-Transaktionen).

Antwort

1

Ein Ansatz könnte sein, eine Dokument-Stil No-SQL-Datenbank (wie Mongo) zu verwenden, um die Assets zu speichern. Auf diese Weise jede andere Art von Vermögenswerten leicht seinen eigenen Satz von Feldern ohne zusätzliche Tabellen haben kann, usw.

Im Grunde, was ich picturing ist Pseudo-Code ähnlich:

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

So zusätzliche Asset-Typen kann nur zusätzliche abgeleitete Klassen sein. Dann würde jedes Asset in die Dokumentendatenbank als sein eigenes eindeutiges Dokument geschrieben werden und durch seine Asset-Nummer abgerufen (oder basierend auf den darin enthaltenen Feldern gesucht werden etc.) oder nach dem Namen oder wie es gespeichert ist.

Dies würde Ihnen ein schnelles und einfaches System mit der Flexibilität geben, die Sie wahrscheinlich benötigen, wenn Sie zusätzliche Assets oder zusätzliche Informationen über vorhandene Assets verfolgen.

Bearbeiten Sie basierend auf Ihrer Bearbeitung: Benutzerdefinierte Felder sollten damit gut funktionieren. Sie können es als eine Art Schlüssel/Wert-Dictionary für das Objekt einrichten oder sogar die Felder zum Objekt selbst hinzufügen, wenn Sie eine dynamischere Sprache verwenden. Das "Basis-Asset" würde aus den Feldern bestehen, die absolut erforderlich sind, der Rest kann loser definiert, bedingt erforderlich, benutzerspezifisch usw. sein.

+0

Danke für die Antwort. Leider bin ich sehr an die Technologien gebunden, die ich verwenden kann (werde es in der Frage erwähnen). Dies sind MySQL, GWT und Hibernate. –

+0

@Nico Huysamen: Das ist sicherlich eine Schande. Um diese Flexibilität, vor allem benutzerdefinierte Felder, zu haben, ist Ihre Idee, sie als XML in einem Textblock zu speichern, die beste Wahl. Es ist nicht ideal für eine relationale Datenbank, aber es funktioniert. Und wenn Sie über eine relativ kleine Menge an Daten sprechen (wie viele Vermögenswerte insgesamt?), Dann sollte es in Ordnung sein. Brechen Sie die "erforderlichen" Felder in andere Spalten für die Indizierung usw. auf. Versuchen Sie, das Ganze in eine Serialisierungs-/Deserialisierungsabstraktion einzubinden, um die Benutzerfreundlichkeit zu erhöhen. Ich bin mir nicht sicher, wie Sie in den benutzerdefinierten Feldern suchen können, wenn es nötig ist ... – David

+0

Das war, wovor ich Angst hatte. Das System sollte jedoch skalierbar sein. Im Moment sollte es für ein Unternehmen mit ca. 6000 Mitarbeitern funktionieren (damit Sie die Anzahl der Assets quantifizieren können). Aber theoretisch möchte ich, dass es für jede Größe funktioniert. Ich dachte auch an die Idee, dass Sie explizite Spalten für die erforderlichen Felder und dann nur die benutzerdefinierten in XML haben könnten. Aber wie du gesagt hast, würde es die Suche nach dem Autor eines Buches sehr schwierig machen. –

1

Es ist sinnvoll, den allgemeinen Begriff eines Assets zu trennen die Besonderheiten jedes Asset-Typs, den Sie integrieren möchten. Normalerweise würde dies die Form einer Master-Asset-Tabelle annehmen, mit verschiedenen Tabellen für jeden einzelnen Typ von Asset, den Sie einschließen möchten, d. H. Buch, Hardware, Möbel. Die Struktur könnte wie folgt aussehen:

Asset(AssetId, Description, Comments) 

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

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

Wo AssetId sowohl in HardwareAsset und BookAsset ist ein Fremdschlüssel für die Asset Tabelle. Auf diese Weise können Sie verschiedene Vermögenswerte verfolgen und sie gruppieren, wenn es darauf ankommt.


EDIT: Alternativ können Sie einen Schlüssel erstellen - Wert Tabellenwerte für einzelne Objekte zu speichern, die wie folgt aussehen könnte:

AssetValue(AssetValueId, AssetId, Key, Value) 

Dies ist jedoch eine umständliche Lösung, die, während sie noch Bereitstellung von durchsuchbaren Feldern, wird Ihre Datenbank schnell aufgebläht. Um das Problem zu verringern, können Sie die Feldgröße abhängig von Ihren Anforderungen begrenzen. Ich empfehle nicht, das Wörterbuch in einem einzigen Feld zu serialisieren, da dies Ihre Datenbank noch mehr aufblähen wird.

+0

Danke für die Antwort. Das würde in einer idealen Welt funktionieren, aber leider möchte ich das System nicht an bestimmte Arten von Vermögenswerten binden. Es wäre unmöglich für mich, alle Arten von Vermögenswerten zu erraten, die ein Unternehmen benötigen könnte. Der Sinn des Systems ist es, eine Lösung für alle Fälle zu sein. –

+0

@Nico: Ich habe meinen Beitrag bearbeitet. –

1

Von den technologischen Einschränkungen würde ich empfehlen, die Module getrennt zu halten.

+0

In der Tat! Danke für die Antwort. –

1

Ja auf der Haupttabelle können Sie kennzeichnen, welche Art von Asset es ist. Also, wenn es ein Buchgut ist, kann es ein Fremdschlüssel mit den Buchgegenständen verbinden. Dieses Weg, den Sie nicht Raum auf den Anlagen verschwenden, die diese Einzelteile nicht haben.