Ich schreibe eine Anwendung für Android mit SQLite (unterstützt von ORMlite, wenn es darauf ankommt). Bisher bin ich in der Konzeptionsphase und arbeite am Datenbankdesign. Die Datenbank soll eine Sammlung von Assets enthalten, die für einen oder mehrere Benutzer registriert sind. Ich habe noch nie an Daten außerhalb von SQLite gearbeitet und selbst dann habe ich nur wenige sehr kleine Datenbanken erstellt. Als solches bin ich mir nicht sicher, ob ich mit diesem Design richtig umgehe. Wenn ich mein Design erweitere, fängt es an, wie ein Durcheinander auszusehen. Meine Fragen sind:
- Entwerfe ich diese Datenbank zu objektorientiert? Als Java-Programmierer ist es genau so sinnvoll, die Datenbank zu entwerfen.
- Gibt es eine Möglichkeit, die Datenbank weniger chaotisch aussehen zu lassen?
- Bin ich überhaupt auf dem richtigen Weg?
Als Referenz dient hier ein früher leichter lesbarer Prototyp des Datenbankdesigns. Es wurden noch keine Eingaben zugewiesen.
Hier ist eine aktuellere Visualisierung meines Problems.
quelle
messy
ist eigentlichnormalization
das, was normalerweise gut ist.Antworten:
Dies ist eher ein Kommentar, aber da dies eine lange Antwort ist, die es wert ist, erwähnt zu werden, poste ich sie als Antwort.
Ihre Datenbank sieht für Ihre Bedürfnisse ausreichend aus. (Na ja, wie es am besten aus dem Diagramm übernommen werden.) Ich gehe davon aus, dass die
UserAccount
Tabelle , die eine Beziehung einer Eins-zu-viele hat zwischen den vier TabellenVehicle
,Book
,VideoGame
undMovie
(von hier an, den VBVM Tabellen) . Als nächstes gehe ich davon aus, dass derAsset
Tisch hat eine Eins-zu-Eins-Beziehung zu jeder Verbindung zwischen den VBVM-Tabelleneinträgen. Mit diesen Informationen würde ich empfehlen, dieUserAccount_id
von jeder VBVM-Tabelle in die zu verschiebenAssetTable
.Als nächstes scheint dies
Asset
immer mit einer der vier VBVM-Tabellen verbunden zu sein. In Anbetracht dieser Art der Einrichtung würde ich empfehlen, eine zusätzliche Tabelle zu erstellenAssetType
.Aktualisieren Sie als Nächstes die
Asset
Tabelle und jede VBVM-Tabelle, um einAssetType_ID
Feld einzuschließen . DieAssetType
Tabelle sollte für jeden Asset-Typ einen Eintrag enthalten. In diesem FallVehicle
,Book
,Video Game
undMovie
, die jeweils mit einer eindeutigen Beschreibung und ID.Möglicherweise möchten Sie dies aus mehreren Gründen tun: Zunächst können Sie jetzt die
Asset
Tabelle abfragen und erkennen, welche Art von Asset in einem bestimmten Datensatz gespeichert ist, ohne die Daten mit Ihren vier anderen VBVM-Tabellen verknüpfen zu müssen. Dies beschleunigt das Abfragen der Daten, wenn nicht alle Informationen aus Ihren vier Tabellen benötigt werden. Zweitens bietet dies auch eine einfache Möglichkeit, eine Textbeschreibung des mit demAsset
Eintrag verknüpften Asset-Typs zu verknüpfen . Auch hier müssen Sie keine Verknüpfung zu den VBVM-Tabellen herstellen, um dies herauszufinden.Schließlich können Sie wollen prüfen , die Barcode - Datenverarbeitung unterschiedlich. Wenn es sich bei dem Barcode um eine einfache Suche handelt, können Sie ihn der Asset-Tabelle hinzufügen. Wenn Barcode-Werte jedoch eindeutig sein müssen, muss sie in einer sekundären Tabelle gespeichert werden, da die Datenbank eingeschränkt werden muss. Sie könnten dies tun, wenn es in die
Asset
Tabelle integriert wäre. Ihre Fahrzeugdaten würden jedoch Probleme verursachen, da Fahrzeuge keine Barcodes haben. Meines Wissens können Sie in den meisten, wenn nicht allen großen Datenbankmodulen kein eindeutiges Feld definieren, das auchnull
Werte zulässt , da die Daten dann nicht mehr eindeutig sind.Sie könnten geneigt sein zu glauben, dass Sie das
Barcode
Feld mit dem kombinieren könntenVIN
. Da VINs eindeutig und Barcodes eindeutig sind und auch nicht identisch sein sollten, können sie nicht in einem Feld in derAsset
Tabelle zusammengefasst werden, sodass Sie die zusätzlicheBarcode
Tabelle löschen können . Ich würde dies nicht empfehlen, da ich denke, dass die Daten dadurch weniger "fokussiert" werden.Ja, es ist eine Form der eindeutigen Objekt-ID, aber Barcodes sind Barcodes und VINs sind VINs - das Konzept hinter beiden ist völlig unterschiedlich und die Konsolidierung der beiden kann mit der Zeit verwirrend werden. Wenn Sie Ihr Projekt in Zukunft erweitern, kann dies außerdem zu Kollisionen führen. Technisch gesehen sehe ich kein großes Problem damit (in Ihrem Fall), aber ich würde trotzdem empfehlen, diese Option zu vermeiden.
Außerdem würde ich das auch
assetType_id
zurBarcode
Tabelle hinzufügen , aus den gleichen Gründen, aus denen Sie es derAsset
Tabelle hinzugefügt haben .quelle
Barcode
Daten in diePublication
Tabelle zu verschieben, es sei denn, Sie erwartenBarcode
, dass mehrere Instanzen einer Veröffentlichung berücksichtigt werden. Ist der Barcode für ein einzelnes Objekt spezifisch oder ähnelt er einem ISDN?Barcode
zur Veröffentlichung überzugehen. Je mehr ich darüber nachdenke, desto sinnvoller ist es, dort zu sein. ABarcode
ist garantiert nicht eindeutig. Jemand könnte mehrere Instanzen eines Assets haben. Wo wären wir, wenn (s / h / it) jeden im Auge behalten wollte? Andererseits könnte ich ein Feld in derAsset
Tabelle für die Menge haben. Danke noch einmal.