Eddie: Was für Folgen hat die EXPLIZITE Kennzeichnung von Foreign Keys?

Hallo allerseits,

das ist zwar wirklich peinlich, aber Tatsache ist, ich habe bisher unter MySQL nicht mit explizit deklarierten Fremdschlüsseln gearbeitet - irgendwo hatte ich mal aufgeschnappt, dass MySQL das nicht unterstützt, was ja ganz offenbar ein Irrtum war. Aber das war der Grund, dass ich Fremdschlüssel eingesetzt habe, ohne das der DB mitzuteilen.

Neuerdings mache ich das so:

   alter table CITY  
   add constraint BELONGSTO foreign key (FK_COUNTRY)  
   references COUNTRY (id) on delete restrict on update restrict;

Was muss ich jetzt in Zukunft bei der Arbeit mit den Tabellen berücksichtigen? Ändert sich da was?

Danke für eure Hilfe,
Eddie

--
Old men and far travelers may lie with authority.
  1. Hi,

    Was muss ich jetzt in Zukunft bei der Arbeit mit den Tabellen berücksichtigen? Ändert sich da was?

    ja, aus meiner Sicht sind zwei Dinge auf jeden Fall bemerkenswert:

    1. Man muss sich um weniger kümmern:
      Durch die ON DELETE/ON UPDATE-Konstrukte kann man sich insbesondere Löschoperationen sparen, was ich persönlich recht angenehm finde. Es kann eben nicht mehr passieren, dass irgendwelche halbfertigen Konstrukte in der Datenbank bleiben weil das Skript einen Timeout hatte oder sonstwas. Die Integrität bleibt eben gewahrt.

    2. Man muss anders arbeiten:
      Die Integritätsbedingungen garantieren ein sauberes Datenmodell - das muss nicht immer praktisch sein. Man muss bei INSERT/UPDATE darauf achten, die Statements in der richtigen Reihenfolge auszuführen, d.h. erst den Satz mit dem Primärschlüssel und dann den Satz mit dem Fremdschlüssel. Das Problem wird noch viel extremer wenn es um die Wiederherstellung von ganzen Tabellen/Datenbanken geht. Da sind teilweise Klimmzüge nötig um die Bedingungen abzuschalten, die Tabellen in der richtigen Reihenfolge einzuspielen (sofern möglich) etc.

    Ich habe mich mittlerweile für das saubere Modell entschieden, aber gerade weil wir in der Firma häufig ganze Sätze von Tabellen durch die Gegend schieben müssen, kann das teilweise etwas hinderlich sein.

    MfG
    Rouven

    --
    -------------------
    Death is nature's way of telling you to slow down.
  2. echo $begrüßung;

    das ist zwar wirklich peinlich, aber Tatsache ist, ich habe bisher unter MySQL nicht mit explizit deklarierten Fremdschlüsseln gearbeitet - irgendwo hatte ich mal aufgeschnappt, dass MySQL das nicht unterstützt, was ja ganz offenbar ein Irrtum war.

    Fremdschlüssel, auch Foreign Keys genannt, bzw. ihre explizite Kennzeichnung als solche und die damit verbundenen Sicherstellung der referenziellen Integrität durch das DBMS, werden erst ab MySQL 5.2 für die hauptsächlich genutzte Storage Engine MyISAM unterstützt. Doch gänzlich neu werden sie bei MySQL nicht sein, denn bereits seit Version 3.23 gibt es sie für die InnoDB-Engine.

    Siehe auch die MySQL Development Roadmap.

    echo "$verabschiedung $name";