Strukturfrage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

Hi,

da ich mit sql noch nicht so fit bin wäre es toll wenn Ihr mir einen Tip geben könntet.
Ich habe Klassen und Unterklassen und möchte die in einer Datenbank speichern.
Die Klassen sehen etwa so aus:

Code: Alles auswählen

class BaseClass(object):
    def __init__(self):
        self.baseAttribut = 1

class SubClass(BaseClass):
    def __init__(self):
        BaseClass.__init__(self)
        self.subAttribut = "somestring"
Um diese Struktur abzubilden würde ich in einer Datenbank eine Tabelle anlegen, welche die notwendigen Attribute der Basisklasse enthält.
Zusätzlich würde ich eine weitere Tabelle anlegen, welche nur die Attribute der Subklasse enthält.
Und dann würde ich die beiden über Indizes miteinander verknüpfen, so dass ich die Subklasse abfragen kann und über den Index die Infos aus der Tabelle der Baseklasse bekommen kann.

Ich hoffe es ist soweit verständlich was ich machen will. Ist das von der Praxis her sinnvoll das so anzugehen, oder habe ich da ein Struktur oder Designproblem?

Und wenn das sinnvoll ist, dann hab ich ein Problem. Prinzipiell würde ich beim Speichern so vorgehen:
-Eintrag der Baseklasse in die Basetabelle
-Holen des index des gerade geschriebenen Eintrags
-mit diesem Index die Subklasse in die Tabelle schreiben

Wie bekomme ich dann den gerade geschriebenen Eintrag wenn ich kein eindeutiges Element habe nach dem ich abfragen kann? Oder kann ich irgendwie das Schreiben von beiden Tabellen sinnvoll verknüpfen?

Ihr merkt es ist noch etwas wirr bei mir. Bin für Tips jeder Art dankbar.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

haggi hat geschrieben:Ich hoffe es ist soweit verständlich was ich machen will. Ist das von der Praxis her sinnvoll das so anzugehen, oder habe ich da ein Struktur oder Designproblem?
Schau Dir doch mal an, wie die Jungs von elixir das regeln:
http://elixir.ematia.de/trac/wiki/Tutor ... nheritance

Ansonsten böte sich ggf. eine Dokumenten-basierte DB wie CouchDB oder MongoDB an. Dort ist es egal, ob sich Dokumente in ihren Attributen unterscheiden. Imho für genau diesen Fall (und 1:n-Beziehungen) halte ich diesen Ansatz für geeignet.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 4149
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was IMHO auch geht ist ein KV-Store wie Redis. Das könntest du die Schlüssel z.B. wie folgt anlegen:
  • BaseClass1 = ...
  • BaseClass1:SubClass1 = ...
  • BaseClass1:SubClass1.Attribute = ...
usw.

Kommt halt drauf an, was an Werten gespeichert werden muss / soll.

CouchDB ist aber auch gut. ;-)

Gruß, noisefloor
haggi
User
Beiträge: 42
Registriert: Mittwoch 27. Februar 2008, 10:18
Kontaktdaten:

Danke, werd mir die Sachen mal ansehen.
Antworten