Beste Lösung für heterogene Daten in relationaler Datenbank?
Verfasst: Freitag 11. Dezember 2015, 13:45
Hallo,
ich stehe vor dem Problem, dass ich heterogene Daten irgend wie in einer relationalen Datenbank abbilden muss. D.h., ich habe unterschiedlichste Domänenobjekte, die als Persistenz definitiv nur die Datenbank haben. Alternative Ansätze a la KV-Store für genau dieses Teilproblem scheiden also aus.
Die Daten sind im Grunde genommen Konfigurationsdaten, wie Kombinationen aus URL, Username und Passwort für einen Webservice, ein Dateiname für das Ablegen einer zu generierenden Datei usw. Hinzu kommen noch Wertebereiche für Auswahllisten und Defaultwerte.
Als Datenbanken kommen sowohl MS Access als auch MS SQL Server zum Einsatz, als Sprachen C# und C++ (wobei das nicht unbedingt relevant für das Konzept sein sollte)
Nun fallen mir spontan drei Lösungen ein:
1.) Separate Tabellen für die einzelnen Typen
2.) Key-Value-Tabelle mit gruppierenden IDs
3.) Daten serialisiert in XML, JSON o.ä. in einer Spalte speichern.
Lösung 1 klingt zunächst am sinnvollsten bezüglich des relationalen Konzepts. Nachteil ist, dass ich *eine* fixe ID benötige, die in allen sonst wie verstreuten Tabellen identisch sein muss, um von einem gemeinsamen Ausgangsobjekt die spezialisierten Teile laden und generieren zu können. An sich klingt das noch machbar, aber: Es soll auch die Möglichkeit bestehen, Vorgaben für Einheiten zu hinterlegen und beim Konfigurieren auswählbar zu machen. Wie bekommt man solche Datensätze in dieselbe Tabelle? Und die Vorgaben dürfen durchaus "Lücken" enthalten; ``NOT NULL`` constraints usw. müsste ich also weglassen oder separate Tabellen für die Vorlagen basteln (was auch wieder doppelte Pflege bedeutet usw)
Lösung 2 ist bedeutet definitiv das Aufweichen des relationalen Konzepts... will man solche Konfigurationen basierend auf einem Kriterium als Menge ablegen, müsste man dabei auch wieder Spalten hinzufügen, z.B. eine Login-Kombination pro Standort o.ä.
Lösung 3 bietet zunächst viel Flexibiltität und das Serialisieren gibt es (in C#) quasi gratis. Haken ist dabei, dass man später Formatänderungen nicht einfach durchführen kann (ohne spezielle Mechanismen zum Transformieren der abgelegten Daten). Zudem bietet Access afaik keine Hilfe beim Auslesen von XML-Daten an.
Habt ihr Erfahrungen damit, womit man letztlich am glücklichsten wird?
DB-Zugriffe müssen übrigens von Hand gecodet werden; es gibt also keinen ORM o.ä. (Und ja, das klingt an sich schon eklig)
ich stehe vor dem Problem, dass ich heterogene Daten irgend wie in einer relationalen Datenbank abbilden muss. D.h., ich habe unterschiedlichste Domänenobjekte, die als Persistenz definitiv nur die Datenbank haben. Alternative Ansätze a la KV-Store für genau dieses Teilproblem scheiden also aus.
Die Daten sind im Grunde genommen Konfigurationsdaten, wie Kombinationen aus URL, Username und Passwort für einen Webservice, ein Dateiname für das Ablegen einer zu generierenden Datei usw. Hinzu kommen noch Wertebereiche für Auswahllisten und Defaultwerte.
Als Datenbanken kommen sowohl MS Access als auch MS SQL Server zum Einsatz, als Sprachen C# und C++ (wobei das nicht unbedingt relevant für das Konzept sein sollte)
Nun fallen mir spontan drei Lösungen ein:
1.) Separate Tabellen für die einzelnen Typen
2.) Key-Value-Tabelle mit gruppierenden IDs
3.) Daten serialisiert in XML, JSON o.ä. in einer Spalte speichern.
Lösung 1 klingt zunächst am sinnvollsten bezüglich des relationalen Konzepts. Nachteil ist, dass ich *eine* fixe ID benötige, die in allen sonst wie verstreuten Tabellen identisch sein muss, um von einem gemeinsamen Ausgangsobjekt die spezialisierten Teile laden und generieren zu können. An sich klingt das noch machbar, aber: Es soll auch die Möglichkeit bestehen, Vorgaben für Einheiten zu hinterlegen und beim Konfigurieren auswählbar zu machen. Wie bekommt man solche Datensätze in dieselbe Tabelle? Und die Vorgaben dürfen durchaus "Lücken" enthalten; ``NOT NULL`` constraints usw. müsste ich also weglassen oder separate Tabellen für die Vorlagen basteln (was auch wieder doppelte Pflege bedeutet usw)
Lösung 2 ist bedeutet definitiv das Aufweichen des relationalen Konzepts... will man solche Konfigurationen basierend auf einem Kriterium als Menge ablegen, müsste man dabei auch wieder Spalten hinzufügen, z.B. eine Login-Kombination pro Standort o.ä.
Lösung 3 bietet zunächst viel Flexibiltität und das Serialisieren gibt es (in C#) quasi gratis. Haken ist dabei, dass man später Formatänderungen nicht einfach durchführen kann (ohne spezielle Mechanismen zum Transformieren der abgelegten Daten). Zudem bietet Access afaik keine Hilfe beim Auslesen von XML-Daten an.
Habt ihr Erfahrungen damit, womit man letztlich am glücklichsten wird?
DB-Zugriffe müssen übrigens von Hand gecodet werden; es gibt also keinen ORM o.ä. (Und ja, das klingt an sich schon eklig)