Wie speichere ich Daten in einer Datenbank ohne Tabellen?

12

Alles, was ich in der Schule gelernt habe, war SQL, das Daten in Tabellen speichert. Momentan arbeite ich an einem Projekt, in dem Daten in XML-Dateien gespeichert werden. Zusätzlich enthält jede XML einen Verweis auf visuelle Dateien (JPEG).

Das XML selbst enthält über tausend Koordinatenpunkte sowie zusätzliche Informationen zu den Daten.

Meiner Meinung nach macht es keinen Sinn, diese Informationen in Tabellen zu speichern. Außerdem konnte ich mit SQL auch keine JPEG-Dateien speichern.

Was wäre eine angemessene Lösung oder gibt es einen Denkfehler auf meiner Seite?

Wie Sie sehen, bin ich ziemlich neu in Datenbanken. Konstruktive Vorschläge, Links und Ratschläge sind daher willkommen.

チ チ ズ パ パ
quelle
SQL Server kann JPEG-Dateien mit dem Datentyp IMAGE speichern. Das würde ich jedoch nicht empfehlen. Mit FILE-STREAM sind Sie besser dran.
Datum
Wenn es darum geht, JPEG (oder eine andere Datei) in der Datenbank zu speichern, wird hier auf einige unserer am häufigsten gestellten Fragen eingegangen. Was die Art und Weise des Speicherns von XML und das schnelle Auffinden dieser Daten anbelangt, sind Dokumentendatenspeichersysteme genau dafür vorgesehen. Ich würde mir eine NoSQL-Lösung über einer relationalen Datenbank ansehen. Ich würde mir vorstellen, dass es einfacher sein wird, damit zu arbeiten.
Jcolebrand
Wenn es um XML geht, können Sie dies mit IBMs DB2 tun. Und Sie können die Daten entweder mit SQL oder XPath / XQuery abfragen. Die kostenlose Express-C-Edition bietet die Möglichkeit dazu. Wenn Sie jedoch zur Enterprise Edition wechseln, müssen Sie zahlen, um diese Funktion zu aktivieren.
Chris Aldrich

Antworten:

11

Alles, was Sie brauchen, ist die Persistenz Ihres XML. Verwenden Sie eine NoSQL-Lösung oder das Dateisystem.

Die Verwendung eines RDBMS bietet keine Vorteile, es sei denn, Sie möchten es anstelle von NoSQL oder des Dateisystems verwenden.

gbn
quelle
Was wäre eine geeignete NoSQL-Lösung? Ich arbeite mit C # in einer Winform-Anwendung übrigens.
チ チ ズ パ ン
@bodycountPP: Ich habe keine Erfahrung mit ihnen ...
gbn
7
Ich würde RavenDB ( ravendb.net ) oder CouchBase ( couchbase.com/couchbase-server/overview ) zur Verwendung unter Windows auschecken . Andere sind über die Googles zu finden - ich habe gute Erfahrungen mit diesen Produkten gemacht. Offensichtlich kann Ihre Laufleistung variieren :)
ITHedgeHog
10

Ich habe heute Phil Factors Blog-Post " Normalization" und "Anima notitia copia" als Lesezeichen hinzugefügt, da er die Gründe für und gegen die Normalisierung bestimmter Datentypen auf übersichtliche Weise zusammenfasst. Führen Sie die folgende Abfrage für eine SQL-Instanz aus und prüfen Sie, ob Sie damit einverstanden sind.

SELECT * FROM sys.syslanguages

Mit SQL können Sie relationale Datenbanken erstellen. Selbst wenn es schlecht riecht, ist es kein Verbrechen, mit einer SQL-Datenbank schrecklich unrelationale Dinge zu tun, solange dies erforderlich ist und Sie den Unterschied erkennen können. Nicht nur das, sondern auch nur, wenn Sie sich der Risiken und Auswirkungen bewusst sind.

Sie haben erwähnt, dass die XML-Datei "zusätzliche Informationen zu den Daten" enthält. Gibt es einen Vorteil bei der Modellierung dieser Metadaten in einer relationalen Datenbank, um sie möglicherweise abzufragen? In diesem Fall kann es sinnvoll sein, die relevanten Daten zu extrahieren und das verbleibende XML als XML-Dokumenttyp beizubehalten.

... Wenn Sie eine JSON-Zeichenfolge oder XML-Datei übergeben und diese in einer Datenbank speichern müssen, müssen Sie sich lediglich als Anima notitia copia (Seele der Datenbank) fragen Interesse an den Inhalten dieser Information? Wenn die Antwort "Nein!" Oder "Nequequam!" Ist Dann ist es ein atomarer Wert, wie komplex er auch sein mag.

Phil Factors Argument ist, dass nicht relationale Felder in einer relationalen Datenbank vollkommen akzeptabel sind, wenn das Feld als atomar behandelt wird, dh es ändert sich nicht, oder wenn sich das gesamte Feld ändert, kein Bestandteil davon. Die natürliche Erweiterung besteht darin, dass die Anwendung eines relationalen Modells auf diese Elemente von Nutzen sein kann, wenn Ihr Dokument Elemente enthält, an denen Sie interessiert sind.

Relevant für die Frage, aber hauptsächlich für die Ausdrucksweise, ein letztes Zitat von Phil:

Natürlich habe ich nie wissentlich eine Datenbank erstellt, die Codd verpönt hätte, aber an den Rändern befinden sich Schnittstellen und Datenfeeds, die ich geschrieben habe und die bei den Normalisierungs-Fundamentalisten für verrückte Anfälle gesorgt haben.

Haben wir nicht alle!

Mark Storey-Smith
quelle
2
ACORD ist ein bisschen so. Ich habe Leute gesehen, die versucht haben, es als Datenbankmodell zu verwenden. ACORD ging daraufhin und lizenzierte ein Datenmodell von Prima, sodass selbst sie zugeben, dass es kein großes Datenmodell war. Der ACORD-Messaging-Standard verfügt über ca. 7.000 definierte Felder, von denen ca. 200 obligatorisch sind. Die beste Beschreibung für ACORD (von jemandem, der sich stark mit Messaging-Standards befasst) ist, dass er nicht weiß, wie ein Standardprozess zu verwalten ist.
ConcernedOfTunbridgeWells
3

In Bezug auf Oracle-Datenbanken lautet die Antwort: Sie können nicht . Alle Daten in einer Datenbank werden in Tabellen gespeichert, auch Metadaten. Daten können in Warteschlangen gespeichert werden, dies ist jedoch nur eine andere Art der Verwendung von Tabellen. XML-Dateien können außerhalb einer Datenbank gespeichert werden, dies entspricht jedoch nicht Ihrer Anforderung "In der Datenbank".

Über Ihre Frage hinaus können JPEG-Dateien oder andere Dateien in einer Datenbank gespeichert werden. Sie benötigen eine Tabelle und eine LOB-Spalte (BLOB oder CLOB). XML könnte auch auf diese Weise gespeichert werden. Durch das Importieren der XML-Daten in die Datenbank können Sie die Daten jedoch auf eine Weise verarbeiten, die derzeit nicht ohne Weiteres möglich ist. Es würde auch andere Vorteile von Datenbanken bieten, einschließlich: Reduzierte Redundanz, Zugänglichkeit, Parallelität, Skalierbarkeit, Interoperabilität, Sicherheit, Wiederherstellung und Leistung.

Wenn die Vorteile einer Datenbank Ihre Ziele nicht fördern, verwenden Sie keine.

Leigh Riffel
quelle
2

Es hört sich für mich so an, als würden Sie versuchen, eine räumliche Datenbank zu implementieren . Hierbei handelt es sich um eine Art relationale Datenbank (oder ein Add-On zu vorhandenen Datenbankprodukten, z. B. Oracle Spatial, postGIS), die Funktionen für räumliche Datentypen unterstützt und zur Optimierung der Speicherung und Abfrage von Daten in Bezug auf räumliche Merkmale wie polygonale Grenzen und Punkte verwendet wird und Schichten. Das XML, das Sie haben, klingt wie Grenzkoordinatenpaare, und die zugehörigen Bilder klingen wie Bildmaterial, das in dieser Grenze angezeigt wird. Wenn die Daten passen, ziehen Sie eine relationale räumliche Datenbank in Betracht, die eine integrierte räumliche Modellierung bietet, um Funktionen bereitzustellen, deren Implementierung ansonsten schwierig oder zeitaufwendig wäre.

viel Freizeit
quelle
Außerdem, wenn Sie sind eine Implementierung Geographisches Informationssystem , sollten Sie diese Frage über auf fragen Geographic Information Systems .
Darvids0n