Datenbank Forum - für Anfänger und Profis

Willkommen im Datenbank Forum von Datenbanken-verstehen.de - Das Datenbank, Data Warehouse & Business Intelligence Forum!

Das Datenbank Forum für Anfänger und Profis ist eine Community zu den Themen Datenbanken, Data Warehouse & Business Intelligence. Nimm teil an der Community von Datenbanken-verstehen.de und tausch dich mit deinen Fragen und Lösungen mit anderen Nutzern aus.

Als registrierter Benutzer genießt Du viele Vorteile, wie

  • den vollen Zugang zu allen Foren und Unterforen
  • Kostenloses Lernmaterial inkl. Lösungen zum Thema Datenbanken
  • Zugriff auf DB-Tutorials, Best Practices und SQL-Snippets

Bevor Du einen Beitrag verfassen möchtest, kannst Du dich einfach kostenlos registrieren.

oder Einloggen mit



Beachte bitte die Forenregeln von Datenbanken-verstehen.de. Wir wünschen Dir viel Spaß im Datenbank Forum! - Dein Datenbanken-verstehen.de-Team

Muckibude / multiple Referenzen zur gleichen Entität

Ein gutes Datenbankdesign ist Pflicht! Doch wie geht man an die Datenmodellierung heran?
Hier treffen Datenbankdesign und Datenmodellierung aufeinander...

Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon MoonKid » Do 1. Okt 2015, 01:08

Entwurf und Design mit RDBMS hab ich in Grundzügen vor Jahren mal gelernt, bin aber schnell in die objektorientierte Welt (incl ODBMS) abgedriftet. Genau diese Denkstrukturen stehen mir jetzt gerade im Weg.

In Verbindung mit meiner Anwendung (Python3, SQLAlchemy mit sqlite3) merke ich, dass die aktuelle Struktur gegen diverse Regeln (z.b. 3NF) verstösst.

Kurz beschrieben: Eine einzige Person soll eine Nutzungsstatistik für Geräte eines Fitness-Studios anlegen können. as dient der Eigenmotivation. TrainingUnit fasst das Training an einem Gerät zusammen. Bspw. hebt man dort 12mal 40kg, macht ne kurze Pause, nochmal 40x12kg, Pause, nochmal. Das ergibt drei SetSet (Set ist in SQL reserviert!).
Da sich die Wiederholungen (im Beispiel 12) und das Level (im Beispiel 40) auch über mehrere Wochen wiederholt, möchte ich hierbei Redundanzen vermeiden.

Code: Alles auswählen
CREATE TABLE "SetSet" (
        oid INTEGER NOT NULL,
        repetitions INTEGER,
        level INTEGER,
        PRIMARY KEY (oid)
);
CREATE TABLE "TrainingUnit" (
        oid INTEGER NOT NULL,
        date DATE,
        machine INTEGER,
        PRIMARY KEY (oid),
        FOREIGN KEY(machine) REFERENCES "Machine" (oid)
);
CREATE TABLE tu_set_relation (
        tu_oid INTEGER,
        set_oid INTEGER,
        FOREIGN KEY(tu_oid) REFERENCES "TrainingUnit" (oid),
        FOREIGN KEY(set_oid) REFERENCES "SetSet" (oid)
);


Wenn in Trainingseinheit X (oid=100) dreimal das gleiche Set (oid=1) gemacht wurde, sieht entsprechend so in der Relations-Tabelle aus.
Code: Alles auswählen
sqlite> SELECT tu_oid, set_oid FROM tu_set_RELATION WHERE tu_oid = 100;
100|1
100|1
100|1


Könnt ihr mich da vielleicht mal in die richtige Richtung drehen, damit ich aus der OO-Denke rauskomme. :D
Zuletzt geändert von MoonKid am Fr 2. Okt 2015, 00:50, insgesamt 1-mal geändert.
MoonKid
 
Beiträge: 4
Registriert: Do 1. Okt 2015, 00:41

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon MoonKid » Fr 2. Okt 2015, 00:49

Wäre das eine Option?

Code: Alles auswählen
CREATE TABLE "Set_Values" (
        oid INTEGER NOT NULL,
        repetitions INTEGER,
        level INTEGER,
        PRIMARY KEY (oid)
);
CREATE TABLE "SetSet" (
        oid INTEGER NOT NULL,
        set_value_fk INTEGER,
        PRIMARY KEY (oid),
        FOREIGN KEY(set_value_fk) REFERENCES "Set_Values" (oid)
);
CREATE TABLE "TrainingUnit" (
        oid INTEGER NOT NULL,
        date DATE,
        machine INTEGER,
        PRIMARY KEY (oid),
        FOREIGN KEY(machine) REFERENCES "Machine" (oid)
);
CREATE TABLE tu_set_relation (
        tu_oid INTEGER,
        set_oid INTEGER,
        FOREIGN KEY(tu_oid) REFERENCES "TrainingUnit" (oid),
        FOREIGN KEY(set_oid) REFERENCES "SetSet" (oid)
);
MoonKid
 
Beiträge: 4
Registriert: Do 1. Okt 2015, 00:41

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon Micha » Mo 5. Okt 2015, 10:18

Hallo MoonKid,

trenne dich zu Beginn von deinen kryptischen IDs und nimm sprechende IDs,
sonst wirst Du mit der Zeit untergehen :o

Auch eine Konvention wie CamelCase wird Dir sicherlich weiterhelfen...

Gruß,
Micha
Micha
 
Beiträge: 129
Registriert: So 3. Nov 2013, 12:13

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon chuky666 » Mo 5. Okt 2015, 10:40

Hallo MoonKid,

könntest du mal kurz und knapp Beispiel-daten zeigen? Versteh noch nicht so ganz was dein Ziel ist ^^

Grüße
MCSA SQL-Server 2016; DBA
chuky666
 
Beiträge: 57
Registriert: Mo 28. Sep 2015, 21:04

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon MoonKid » Mi 7. Okt 2015, 02:59

Code: Alles auswählen
sqlite> .schema
CREATE TABLE "Machine" (
        oid INTEGER NOT NULL,
        code VARCHAR,
        name VARCHAR,
        note VARCHAR,
        PRIMARY KEY (oid)
);
CREATE TABLE "PersonalParameter" (
        oid INTEGER NOT NULL,
        date DATE,
        weight NUMERIC(10, 2),
        PRIMARY KEY (oid)
);
CREATE TABLE "TrainingUnit" (
        oid INTEGER NOT NULL,
        "order" INTEGER,
        date DATE,
        level INTEGER,
        sets INTEGER,
        repetitions INTEGER,
        machine INTEGER,
        PRIMARY KEY (oid),
        FOREIGN KEY(machine) REFERENCES "Machine" (oid)
);
sqlite> SELECT * FROM TrainingUnit WHERE oid > 100 AND oid < 105;
101|0|2015-01-29|90|||1
102|1|2015-01-29|4|3|10|2
103|2|2015-01-29|4|3|10|3
104|3|2015-01-29|12|3|12|4

Hier sind vier Trainingseinheiten and vier verschiedenen Geräten (7./letztes Feld).
"101" wurde mit Level 90 ohne Angabe von Sets oder Wiederholungen gemacht. Es ist ein CrossTrainer (ähnlich Ergometer) zum Aufwärmen. Da stellst du dich 10 Minuten drauf.
"102" ist ein klassisches Datum. Feld 4-6: vier Gewichtsscheiben, drei Mal zehn Wiederholungen gemacht.

So sieht das aus. Was ich nicht bedachte, war das es auch Aufwärmsets gibt. Dein erstes Set (mit 10 Wiederholungen) machst du mit 4 Scheiben zum Aufwärmen und danach machst du zwei weiteres Sets mit deinem Trainingsgewicht von 6 Scheiben.
MoonKid
 
Beiträge: 4
Registriert: Do 1. Okt 2015, 00:41

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon MoonKid » Mi 7. Okt 2015, 03:08

Micha hat geschrieben:trenne dich zu Beginn von deinen kryptischen IDs und nimm sprechende IDs,
sonst wirst Du mit der Zeit untergehen :o

Kannst du das bitte spezifizieren. Was ist an den IDs kryptisch und warum gehe ich damit unter?
Störst du dich an dem 'O' oder daran, dass ich die Identifikation der Daten (also die ID) von den Daten (sozusagen dem Content) trenne?
Oder was ganz anderes?

Micha hat geschrieben:Auch eine Konvention wie CamelCase wird Dir sicherlich weiterhelfen...


Nutze ich hier ja schon teilweise. Da wo ich Unterstrichte verwende, hat das für mich auch Sinn.
Aber sicher würde ich dein Anliegen besser vestehen, wenn du es mehr ausführst.
MoonKid
 
Beiträge: 4
Registriert: Do 1. Okt 2015, 00:41

Re: Muckibude / multiple Referenzen zur gleichen Entität

Beitragvon chuky666 » Mi 7. Okt 2015, 07:53

Moin moin Moonkid :)

ich glaube Micha meinte damit das du in jeder Tabelle die Spalte "oid" hast was bei Joins der Tabellen wirklich Kryptisch aussieht und zu unnötigen Verwirrungen führen kann. Ich bevorzuge bei solchen ID´s den Tabellennamen mit reinzubringen, bsp.: Machine_id oder so etwas in der Art. Somit lassen sich diese Spalten leichter lesen :)
MCSA SQL-Server 2016; DBA
chuky666
 
Beiträge: 57
Registriert: Mo 28. Sep 2015, 21:04


Zurück zu Datenbankdesign und Datenmodellierung

 


  • Related topics
    Antworten
    Zugriffe
    Letzter Beitrag

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast

  • Jetzt Fan werden
  • Newsletter abonnieren? Hier anmelden!

    Alle Informationen aus dem Portal, Blog und Forum in einem Newsletter!

    E-Mail-Adresse: