tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
559
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Radhad Radhad ist offline Mitglied Diamant
    Registriert seit
    Mar 2003
    Ort
    Wuppertal (NRW)
    Beiträge
    1.917
    Blog-Einträge
    35
    Hi zusammen,

    gestern hab ich mit einem Bekannten etwas diskutiert über ein Datenbankschema. Dabei kam die Frage auf, ob man in MySQL ebenfalls wie in Oracle einen Foreign Key anlegen kann, damit sich die Datenbank darum kümmert und nicht die Programmier-/Scriptsprache.

    Bei Oracle sieht das ja wie hier in dem Beispiel aus: http://www.datenbank-sql.de/oracle-constraints.htm

    Wie sähe das bei MySQL aus, falls das geht? Gibt es irgendwelche Einschränkungen?


    gruß Radhad
     
    Mein neues Projekt: zandman.de - Bericht über den Aufbau einer Entwicklungsumgebung für Test-Driven-Development mit phpUnderControl und dem Aufbau einer Webapplikation mit Zend Framework Version 1.9.x

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    Hi,

    Foreign Keys sind natürlich auch in MySQL möglich
    (siehe MySQL-Doku: http://dev.mysql.com/doc/refman/5.0/...nstraints.html)
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

  3. #3
    Radhad Radhad ist offline Mitglied Diamant
    Registriert seit
    Mar 2003
    Ort
    Wuppertal (NRW)
    Beiträge
    1.917
    Blog-Einträge
    35
    Hätte ich mal besser gleich in der englischen Dokumentation geschaut - in der deutschen ist das irgendwie unlogisch geschrieben. Wie es scheint, funktioniert es genauso wie in Oracle.

    Das "ON DELETE CASCADE" löscht auch alle Child-Einträge, richtig?

    Nehmen wir jetzt mal an, man hätte eine Website mit Blogs sowie einem Forum. Dann würde ich für den Blog, den User X erstellt hat, ON DELETE CASCADE verwenden und in den Forenbeiträgen "SET NULL"? Denn sowas sollte dann ja mit in die Planung aufgenommen werden - denn es vereinfacht eventuelle Löschvorgänge erheblich...


    PS: muss ich Engine = InooDB schreiben? Und ein Index muss auch gesetzt werden?
     
    Mein neues Projekt: zandman.de - Bericht über den Aufbau einer Entwicklungsumgebung für Test-Driven-Development mit phpUnderControl und dem Aufbau einer Webapplikation mit Zend Framework Version 1.9.x

  4. #4
    Radhad Radhad ist offline Mitglied Diamant
    Registriert seit
    Mar 2003
    Ort
    Wuppertal (NRW)
    Beiträge
    1.917
    Blog-Einträge
    35
    Ich hab das jetzt mal ein wenig studiert im Manual und wollte mal Fragen, ob hier jemand einen logischen Fehler entdeckt oder ob meine Überlegungen ok / gut sind. Ich hab das ganze mal wie bei einem Forum gemacht. Über Kritik würd ich mich freuen
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    CREATE TABLE Users (
        UserID INT(255) NOT NULL AUTO_INCREMENT,
        Username VARCHAR(255) NOT NULL UNIQUE,
        PRIMARY KEY(userid)
    ) ENGINE = INNODB;
     
    CREATE TABLE Forums (
        ForumID INT(255) NOT NULL AUTO_INCREMENT,
        Forumname VARCHAR(255) NOT NULL,
        ParentForumID INT(255),
        PRIMARY KEY(ForumID),
        FOREIGN KEY(ParentForumID) REFERENCES Forum(ForumID)
    ) ENGINE = INNODB;
     
    CREATE TABLE ForumModerators (
        ForumID INT(255) NOT NULL,
        UserID INT(255) NOT NULL,
        PRIMARY KEY(ForumID, UserID),
        FOREIGN KEY(ForumID) REFERENCES Forums(ForumID) ON DELETE CASCADE,
        FOREIGN KEY(UserID) REFERENCES Users(UserID) ON DELETE CASCADE
    ) ENGINE = INNODB;
     
    CREATE TABLE Threads (
        ThreadID INT(255) NOT NULL AUTO_INCREMENT,
        Title VARCHAR(255) NOT NULL,
        CreateDate DATE NOT NULL,
        CreateTimestamp INT(255) NOT NULL,
        CreatedBy INT(255),
        ForumID INT(255) NOT NULL,
        PRIMARY KEY(ThreadID),
        FOREIGN KEY(Createdby) REFERENCES Users(UserID) ON DELETE SET NULL,
        FOREIGN KEY(ForumID) REFERENCES Forum(ForumID) ON DELETE CASCADE
    ) ENGINE = INNODB;
     
    CREATE TABLE Posts (
        PostID INT(255) NOT NULL AUTO_INCREMENT,
        Text TEXT NOT NULL,
        CreateDate DATE NOT NULL,
        CreatedBy INT(255),
        LastModifiedBy INT(255),
        ThreadID INT(255) NOT NULL,
        PRIMARY KEY(PostID),
        FOREIGN KEY(CreatedBy) REFERENCES Users(UserID) ON DELETE SET NULL,
        FOREIGN KEY(LastModifiedBy) REFERENCES Users(UserID) ON DELETE SET NULL,
        FOREIGN KEY(ThreadID) REFERENCES Threads(ThreadID) ON DELETE CASCADE
    ) ENGINE = INNODB;
    Gruß Radhad

    PS: Das ist nur ein Auszug aus meinen Überlegungen - allerdings der, wo sich am meisten was ändert.
    PPS: Das SQL-Highlighting wär noch ne Überlegung Wert - beim Notepad++ ist das ganz hilfreich!

    [EDIT]
    Anscheinend klappt das nicht mit der aktuellen XAMPP-Version - Abhängigkeiten werden nicht berücksichtigt und "ON DELETE CASCADE"-Anweidungen werden auch nicht ausgeführt... Wo ist der Fehler? - INDEX'es habe ich eingefügt, sind hier aber nicht zu sehen.
    Geändert von Radhad (26.02.07 um 11:57 Uhr)
     
    Mein neues Projekt: zandman.de - Bericht über den Aufbau einer Entwicklungsumgebung für Test-Driven-Development mit phpUnderControl und dem Aufbau einer Webapplikation mit Zend Framework Version 1.9.x

  5. #5
    Radhad Radhad ist offline Mitglied Diamant
    Registriert seit
    Mar 2003
    Ort
    Wuppertal (NRW)
    Beiträge
    1.917
    Blog-Einträge
    35
    Ich hab den Fehler gefunden: InnoDB ist bei XAMPP standardmäßig deaktiviert obwohl die Dokumentation von MySQL das genaue Gegenteil sagt ?!

    Aber das ist nicht so schlimm, denn man kann es einfach wieder aktivieren: http://www.apachefriends.org/f/viewtopic.php?t=21118


    Gruß Radhad
     
    Mein neues Projekt: zandman.de - Bericht über den Aufbau einer Entwicklungsumgebung für Test-Driven-Development mit phpUnderControl und dem Aufbau einer Webapplikation mit Zend Framework Version 1.9.x

Ähnliche Themen

  1. Anfängerfrage MySQL: Primary Key/Foreign Key
    Von Tobias Köhler im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 05.11.07, 09:53
  2. Foreign Constraints (MySQL 5.0)
    Von Mik3e im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 25.10.05, 14:03
  3. mysql 4.1.10 foreign keys
    Von waterhouse533-lp im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 08.04.05, 14:21
  4. MySQL Foreign Keys
    Von dj-barry im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 23.01.05, 21:35
  5. MySQL und Foreign Keys
    Von noisy im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 12.03.04, 12:39