[SQL allgemein] Fremdschlüssel

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

  • [SQL allgemein] Fremdschlüssel

    Hallo zusammen!

    Weiß jemand zufällig, ob bzw. wie man von einer zweiten Tabelle aus auf einen zusammengesetzten Schlüssel verweisen kann?

    Ein (stark vereinfachtes!) Beispiel:

    Ich habe z. B. eine Tabelle mit Produkten (Felder: id, produktnummer, farbe, ...). In einer weiteren Tabelle stehen die Preise, die je nach Farbe unterschiedlich sind (Felder: produkt_id, preis, ...).

    Wie macht man das jetzt, daß man auf das Feld 'produkt_id' verzichtet, also in der Tabelle 'preise' einfach auf einen aus produktnummer und farbe bestehenden Schlüssel verweist?

    In MS-Access geht sowas ja ohne Probleme. Wie macht man das beispielsweise mit MySQL?

  • #2
    hmm, ich weiß nicht, ob ich das richtig sehe. aber vielleicht hilft dir CONTACT weiter.

    Willst du also

    Produkt a:
    0815 | gelb | Produkt

    Preis b:
    0815gelb | 12.95

    machen?

    dann könntest du mit

    SELECT b.preis
    FROM Produkt a, Preis b
    WHERE b.key = CONTACT(a.nr,a.farbe)
    LIMIT 1

    Abfragen.

    Wie gesagt, ich weiß net, ob das so ganz das ist, was du willst.

    Kommentar


    • #3
      @Tobiaz: das ist kein zusammengesetzter Fremdschlüssel

      @Rumborak:

      das ganze funktioniert dann über einen unique Key, welcher
      aus mehr als einer Spalte besteht. In deinem Falle wohl so:

      Code:
      create table produkte (
         id integer(10) auto_increment,
         produktnummer integer(10),
         farbe char(10),
         PRIMARY KEY (id),
         KEY bla (produktnummer,farbe)
      )
      
      create table preise (
         produktnummer integer(10),
         farbe char(10),
         preise float,
         PRIMARY KEY (produktnummer, farbe)
      )
      abzufragen über
      Code:
      select ... 
      from produkte, preise
      where
         produkte.produktnummer = preise.produktnummer
         AND
         produkte.farbe = preise.farbe
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        @Tobiaz: das ist kein zusammengesetzter Fremdschlüssel
        Jetzt wo ich deinen Code sehe, erkenne ich das auch.

        Kommentar


        • #5
          ...dann brauche ich ja in beiden Tabellen jeweils die Felder 'produktnummer' und 'farbe'. Diese werden dann mit 'und' verknüpft. Wie kann ich aber in der Tabelle 'preise' auf beide Felder komplett verzichten und stattdessen direkt auf den aus 'produktnummer' und 'farbe' zusammengesetzten Schlüssel verweisen?

          Also die Produktnummer ist z. B. '100487', die Farbe ist 'blau' (meinetwegen auch die ID der Farbe aus einer separaten Tabelle 'farben'). Ich kann ja in einem Feld nicht gleichzeitig zwei verschiedene Werte eintragen! Auch der Name des zusammengesetzten Schlüssels hilft mir nicht weiter - ich brauche ja den Inhalt...

          Bis jetzt habe ich das Problem stets so umgangen, daß ich auf zusammengesetzte Schlüssel grundsätzlich verzichtet habe. Das scheint mir aber keine optimale Lösung zu sein, oder?

          Kommentar


          • #6
            Original geschrieben von Rumborak
            ...dann brauche ich ja in beiden Tabellen jeweils die Felder 'produktnummer' und 'farbe'
            dies nennt sich dann zusammengesetzter Schlüssel
            Original geschrieben von Rumborak
            Wie kann ich aber in der Tabelle 'preise' auf beide Felder komplett verzichten und stattdessen direkt auf den aus 'produktnummer' und 'farbe' zusammengesetzten Schlüssel verweisen?
            garnicht, da du in diesem Moment deinen Verweis gekillt hast
            Original geschrieben von Rumborak
            Also die Produktnummer ist z. B. '100487', die Farbe ist 'blau' (meinetwegen auch die ID der Farbe aus einer separaten Tabelle 'farben'). Ich kann ja in einem Feld nicht gleichzeitig zwei verschiedene Werte eintragen! Auch der Name des zusammengesetzten Schlüssels hilft mir nicht weiter - ich brauche ja den Inhalt...
            in deinem Beispiel würde ich wahrscheinlich sogar nur eine Tabelle nehmen,
            ohne eine externe Preistabelle.
            Original geschrieben von Rumborak

            Bis jetzt habe ich das Problem stets so umgangen, daß ich auf zusammengesetzte Schlüssel grundsätzlich verzichtet habe. Das scheint mir aber keine optimale Lösung zu sein, oder?
            wenn das Ganze größer wird, wie viele Produkte, mit oft gleichen
            Preisen, oder oft ändernden Preisen, mach 3 Tabellen

            produkte <-> produkt_preis <-> preise
            TBT

            Die zwei wichtigsten Regeln für eine berufliche Karriere:
            1. Verrate niemals alles was du weißt!


            PHP 2 AllPatrizier II Browsergame

            Kommentar


            • #7
              in deinem Beispiel würde ich wahrscheinlich sogar nur eine Tabelle nehmen,
              naja, ich denke mal, das hier ist ja nur das vereinfachte beispiel...

              aber mir will es rein von der logik nicht in den kopf, wie das geht:

              produkte: id|farbe|beschreibung
              564 | blau | schönes ding

              preise: key | preis
              xxx | 2.50

              was sollte denn da bei xxx rein? In Access sagte er geht das.

              Kommentar


              • #8
                ...also ist es nicht möglich, einen zusammengesetzten Schlüssel direkt als Fremdschlüssel in einer weiteren Tabelle aufzunehmen! Ich kann entweder mehrere Felder mit 'und' verknüpfen oder gänzlich auf zusammengesetzte Schlüssel verzichten (wird wohl das einfachste sein, v. a. wenn man die DB später noch erweitern will).

                Wie das dann in so Pobeldatenbanken wie ACCESS gelöst ist, will mir zwar immer noch nicht in den Kopf, aber gut...

                Danke jedenfalls für Eure Hilfe!!!

                Kommentar


                • #9
                  Wie das dann in so Pobeldatenbanken wie ACCESS gelöst ist, will mir zwar immer noch nicht in den Kopf, aber gut...
                  mir will auch nicht so ganz in den Kopf, wie das hier gelöst wird. kannst du mir das mal erklären?

                  Kommentar

                  Lädt...
                  X