ERLEDIGT
JA
JA
ANTWORTEN
4
4
ZUGRIFFE
559
559
EMPFEHLEN
-
23.02.07 09:37 #1
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ß RadhadMein 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
-
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 von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
23.02.07 12:15 #3
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
-
26.02.07 09:52 #4
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

Gruß RadhadCode 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;
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
-
26.02.07 14:15 #5
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ß RadhadMein 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
-
Anfängerfrage MySQL: Primary Key/Foreign Key
Von Tobias Köhler im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 05.11.07, 09:53 -
Foreign Constraints (MySQL 5.0)
Von Mik3e im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 25.10.05, 14:03 -
mysql 4.1.10 foreign keys
Von waterhouse533-lp im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 08.04.05, 14:21 -
MySQL Foreign Keys
Von dj-barry im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 23.01.05, 21:35 -
MySQL und Foreign Keys
Von noisy im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 12.03.04, 12:39





Zitieren

Login





