[MySQL 4.1] foreign key - für was genau?

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

  • [MySQL 4.1] foreign key - für was genau?

    Hi,

    ich darf hier gerade ein Projekt weiter entwickeln. Die erste Version der Datenbankstruktur wurde mit sehr vielen Fremschlüsseln erstellt. Mir ist klar, dass man mit diesen Schlüsseln eine Beziehung der einzelnen Tabellen untereinander herstellen kann. Ich wäre euch jedoch sehr dankbar, wenn ihr mir ein ein paar Sätzen (gerne auch links) erklären würdet für was ich diese Fremschlüssel in meiner späteren Programmlogik verwerden kann.

    Kann ich z. b. beim löschen eines Datensatzes, der für einen anderen Datensatz ein Feld enthält welches einen Fremdschlüssel enthält eine automatische Löschung des verbunden Datensatzes erreichen?

    Vielen Dank

  • #2
    http://www.mysql.de/doc/de/ANSI_diff_Foreign_Keys.html

    du legst zwei tabellen an:

    create table tbl1 (
    feld1 int,
    feld2 int,
    constraint tbl2_fk foreign key (feld1 ) references tbl1_fk
    );

    create table tbl2_fk (
    feld1_fk int
    );

    wenn ich mich jetzt nicht vertippt habe oder gerade aufm schlauch stehe:

    tbl1.feld1 nimmt jetzt den wert von tbl2_fk.feld1_fk an

    interessant auch das hier:
    http://www.mysql.de/doc/de/example-Foreign_keys.html

    gruss

    Kommentar


    • #3
      Hi,

      danke für die schnelle Antwort.

      Aus der Doku konnte ich leider nicht rauslesen, was für funktionen mysql zwischenzeitlich unterstützt bzw. wie man das ganze einsetzen kann. Beim googeln erhalte ich leider immer nur die Antwort, dass mysql noch keine foreign key ´s unterstützt... (scheint wohl noch nicht so lange implementiert zu sein). (wir setzen InnoDB - Tabellen ein)

      Wenn man nun in deinem Beispiel ein Datensatz aus der Tabelle löscht, die den Key zur Verfügung stellt wird dann der Datensatz der sich darauf bezieht auch gelöscht? (ist dafür eine bestimmte Syntax notwendig?)

      Danke

      Kommentar


      • #4
        Re: [MySQL 4.1] foreign key - für was genau?

        Original geschrieben von nordpol
        Kann ich z. b. beim löschen eines Datensatzes, der für einen anderen Datensatz ein Feld enthält welches einen Fremdschlüssel enthält eine automatische Löschung des verbunden Datensatzes erreichen?
        Auch wenn ich jetzt nicht ganz sicher bin das ich den Satz korrekt verstanden habe ... JA ... kannst Du ...!

        FOREIGN KEY's sind ein Konstrukt um die Referenz-Integrität einer Datenbank aufrecht zu erhalten (es sollen nur gültige Daten vorhanden sein).

        Dieses wird erreicht indem das einfügen von bzw. ändern in ungültige Daten entweder verhindert wird ... oder (durch Verwendung der ON [action] [do] Angaben automatisch korregiert wird).

        Gerne verwendet wird gerade auch die ON DELETE CASCADE Angabe um Master-Detail Beziehungen zu bereinigen.

        Hast man beispielsweise eine Tabelle Aufträge und eine weitere Tabelle Auftragspositionen, legt man einen Fremdschlüssel von Auftragspositionen auf Aufträge (mit kaskadierendem Löschen) so werden beim Löschen eines Auftrags automatisch dessen Positionen bereinigt!

        Beispiel:
        Code:
        CREATE TABLE auftraege (
        	auftrnr INT(11) not null,
        	...
        	PRIMARY KEY (auftrnr)
        );
        
        CREATE TABLE auftragspositionen (
        	auftrnr INT(11) not null,
        	posnr INT(11) not null,
        	...
        	PRIMARY KEY (auftrnr, posnr),
        	CONSTRAINT FOREIGN KEY (auftrnr) REFERENCES auftraege (auftrnr) ON DELETE CASCADE
        );
        Zuletzt geändert von goth; 14.05.2004, 11:39.
        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


        • #5
          ah super - jetzt hab ichs auch verstanden! Danke für euere Antworten! Hat mir sehr weitergeholfen!

          Gruß & einen schönen Tag noch!

          Kommentar

          Lädt...
          X