Relationale Tabellenverknüpfung oder nicht?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Relationale Tabellenverknüpfung oder nicht?

    Hallo,

    mein Problem ist allgemein mehr ein allgemeines Verständnisproblem für relationale Verknüpfungen zwischen mehreren Tabellen innerhalb einer Datenbank. Ich weiss, dass solche Verknüpfungen einer der großen Stärken von relationalen Datenbanken wie MySQL ist, aber so richtig will mir das ganze irgendwie nicht schmecken.

    Mein Problem: Ich habe vor, eine kleine, private Schmuckdatenbank zu erstellen. Hierbei soll ein HTML-Formular als Webfrontend dienen, in das die Daten zu den einzelnen Schmuckteilen eingetragen und schließlich an ein PHP Script übertragen werden. Von dort aus gehts dann in die MySQL Datenbank.

    So weit, so gut.
    Ein Schmuckstück soll unter anderen folgende Felder besitzen:

    - Bestellnr.
    - (Schmuck-)Serie
    - Schmuckart (Ring, Kette, etc)
    - Legierung (WG, GG, Silber etc)
    u.s.w.

    ausserdem ist es so, dass bei Ringen und Ketten jeweils zusätzliche Angaben gemacht werden müssen:

    Für Ketten:

    - Kettenlänge
    - Kettendurchmesser

    Für Ringe:

    - Ringkopf (grösse)
    - Ringschiene (grösse)

    Mein erster Gedanke ist nun gewesen, dass ich alles in eine Tabelle schreibe, sprich dass alle Datenfelder in einer Tabelle sind:

    Bestellnr, Serie, Schmuckart, Legierung, Kettenlänge, Kettendurchmesser, Ringkopf, Ringschiene

    Und dann halt die entsprechenden Werte dieser Tabelle über das Formular zuordne. Hierbei wäre es natürlich so, dass bei einigen Datensätzen die Felder Kettenlänge, Kettendurchmesser, Ringkopf und Ringschiene NULL bleiben könnten - nämlich dann, wenn es sich nicht um einen Ring oder eine Kette handelt (hier bleiben 4 Felder auf Null) oder um eine Kette oder einen Ring handelt (hier bleiben jeweils 2 Felder leer).

    Nun kam mir aber in den Sinn, dass es vielleicht aus diesem Grund unter Umständen besser wäre, die Daten, die sich auf die Ketten und auf die Ringe beziehen, in eine jeweils extra Tabelle zu schreiben und das ganze dann am Ende zu verknüpfen.

    Das würde dann bedeuten, ich mache 3 Tabellen und weil ich weiss, dass das Ganze später über so eine Zuordnungstabelle verknüpft werden soll, gebe ich halt noch jeweils ne ID-Nummer hinzu (Bestellnr ist hierfür nicht geignet, weil nicht jedes Schmuckstück eine solche hat).

    Tabelle 1: Haupttabelle
    ID, Bestellnr, Serie, Schmuckart, Legierung

    Tabelle 2: Kettentabelle
    Kettenr, Kettenlänge, Kettendurchmesser

    Tabelle 3: Ringtabelle
    Ringnr, Ringkopf, Ringschiene

    Soderle - nun weiss ich ehrlich gesagt nicht, ob das bis hierhin überhaupt richtig ist und ob das Ganze überhaupt Sinn macht... wie gesagt, mit diesen Verknüpfungen kann ich mich nicht so anfreunden.

    Für mein Verständnis bräuchte man dann noch die 4. Tabelle zum verknüpfen. Aber wie soll das funktionieren?

    Tabelle 4: Zuordnung

    Code:
    ID   Kettenr   Ringnr
    1    1            NULL (es war ne Kette)
    2     NULL     NULL (es war weder Kette noch Ring)
    3     NULL     2       (es war ein Ring)
    oder wie? oder was?

    Also wie man sieht, hab ich eine Ahnung und bräuchte Hilfe ;(

    Danke,

    Patryn

  • #2
    Nein ... du brauchst keine 4. Tabelle. Die 2. und 3. Tabelle brauche nur 'nen Fremdschlüssen:

    Haupttabelle:
    [color=red]ID[/color], Bestellnr, Serie, Schmuckart, Legierung

    Ketten:
    [color=red]ID[/color], Kettenr, Kettenlänge, Kettendurchmesser

    Ringe:
    [color=red]ID[/color], Ringnr, Ringkopf, Ringschiene

    Der Primärschlüssel der Tabellen Ketten und Ringe setzt sich aus der ID und der Kettenr respektive Ringnr zusammen.

    Abfrage dann mit LEFT [OUTER] JOIN

    SELECT *
    FROM Haupttabelle AS h
    LEFT JOIN Ketten AS k
    ON h.ID=k.ID
    LEFT JOIN Ringe AS r
    ON h.ID=r.ID

    Fetisch ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Sorry, aber das versteh ich nicht.

      Was ist mit Fremdschüssel gemeint? Wozu brauch ich denn jetzt nochmal ne ID für die Ketten- und Ringtabelle - dafür hab ich doch extra die beiden Felder Kettennr und Ringnr eingeführt.

      Der Primärschlüssel der Tabellen Ketten und Ringe setzt sich aus der ID und der Kettenr respektive Ringnr zusammen.
      Und das kapier ich leider auch nicht...

      Patryn

      Kommentar


      • #4
        Die Tabellen haben einen zusammengesetzten Primärschlüssel aus ID und Kettenr bzw. aus ID und Ringnr.

        Btw.: Der Primärschlüssel Identifiziert einen Datensatz eindeutig.

        Du kannst allerdings auch Kettenr oder Ringnr alleine als Primärschlüssel verwenden ... wichtig ist der Fremdschlüssel ID der auf den Datensatz in der Haupttabelle verweist.

        Von der Kardinalität her ist das halt eine 1:1 (1:0) Beziehung dafür braucht man keine Verknüpfungstabellen ... .
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar

        Lädt...
        X