PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mysql 5 kennt keine foreign keys?



sono
19.03.2006, 19:54
Morgen.

Ich hab in nem Buch zu Mysql 4.1 gelesen, dass MySQL keine Foreign Keys kennen würde.

Kann das sein, dass selbst die 5.0 er MySQL noch keine Foreign Keys kennt?
Check scheint auch noch nicht zu existieren.

Kennt jemand eine Erweiterung für MySQL mit der ich Check Constaints und Foreign Keys in MySQL bekomme?

Ohne ist das ziemlich bescheiden.

lordlamer
19.03.2006, 20:03
du musst nur den richtigen tabellentyp bzw dbtyp nehmen.

ich glaube das war auch innodb womit das ging.

für solche sachen würde ich aber eher postgresql empfehlen. das ist einfach ausgereifter und bietet da noch mehr funktionen.

mfg frank

sono
19.03.2006, 20:38
Eigentlich arbeite ich nur mit Postgres, von daher war ich etwas überrascht was MySQL alles nicht zu können scheint.

Leider muss ich in diesem Projekt MySQL nehmen, aber nix was man nicht irgendwie hinbekommen würde.

Was mich am meisten anranzt ist, dass trotz utf-8 Datenbanken ISO Encodierung in PHP rauskommt.

Ich verstehe gar nicht was an MySQL so viel leichter sein soll.

Thx, Gruß Sono

bytepool
19.03.2006, 21:37
hi,
also ich bin absolut sicher, dass mysql 5 foreign keys kennt, ich habe jedenfalls vor gut einem halben jahr noch eine mysql DB mit foreign keys aufgesetzt. Aber ich erinnere mich, dass ich auch einige zeit damit zu kaempfen hatte, bis ich die foreign keys richtig eingestellt hatte...
Ich kann mich aber leider auch nicht mehr genau daran erinnern, wie so eine konfiguration aussehen muss, aber es gibt eigentlich einige tutorials dazu im netz. Du wirst wohl einfach noch ein bisschen mehr zeit mit dem 5er handbuch zubringen muessen ;)
InnoDB als type ist jedenfalls definitiv richtig...
mfg,
bytepool

sono
19.03.2006, 23:05
Du wirst wohl einfach noch ein bisschen mehr zeit mit dem 5er handbuch zubringen muessen

Hoffen wir mal dass ich das auch mit einem kleinen Tutorial hinbekomme. So schwer kann das mit den Foreign Keys ja nicht sein.

Danke für den Hinweis.

Gruß Sono

bytepool
20.03.2006, 00:18
hi,
mir ist gerade eingefallen, dass ich noch den java code habe, mit dem ich damals die DB aufgesetzt habe:



String createTableGame = "create table Game ("
+ "game_id int unsigned not null auto_increment, "
+ "publisher_id int unsigned, "
+ "developer_id int unsigned, "
+ "genre_id int unsigned, "
+ "game_name varchar(100), "
+ "nr_of_players int, "
+ "online_game char(1), "
+ "monthly_fee decimal(5,2), "
+ "release_date varchar(30), "
+ "description varchar(200), "
+ "primary key (game_id), "
+ "index (publisher_id), "
+ "constraint pubid_to_compid_fk foreign key Game(publisher_id) references Company(company_id) on delete set null on update cascade, "
+ "index (developer_id), "
+ "constraint devid_to_compid_fk foreign key Game(developer_id) references Company(company_id) on delete set null on update cascade, "
+ "index (genre_id), "
+ "constraint genid_to_genid_fk foreign key Game(genre_id) references Genre(genre_id) on delete set null on update cascade"
+ ") ENGINE=INNODB;";

String createTableArticle = "create table Article ("
+ "URL varchar(200), "
+ "game_id int unsigned not null, "
+ "title varchar(50), "
+ "author varchar(30), "
+ "rating varchar(30), "
+ "source varchar(30), "
+ "primary key(URL, game_id), "
+ "index (game_id), "
+ "constraint art_to_gam_fk foreign key Article(game_id) references Game(game_id) on delete cascade on update cascade"
+ ") ENGINE=INNODB;";

String createTableCompany = "create table Company ("
+ "company_id int unsigned not null auto_increment, "
+ "company_name varchar(30), " + "country varchar(30), "
+ "primary key (company_id), " + "index (company_id)"
+ ") ENGINE=INNODB;";

String createTableGenre = "create table Genre ("
+ "genre_id int unsigned not null auto_increment, "
+ "genre_name varchar(50), " + "primary key (genre_id), "
+ "index (genre_id)" + ") ENGINE=INNODB;";


vielleicht hilft dir dieses Template ja.
mfg,
bytepool

YellowSPARC
20.03.2006, 01:53
Hier (http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html) ist das Kapitel aus der MySQL Doc (es gibt FOREIGN KEYS wirklich nur in InnoDB-Tables). Ziemlich schwer zu finden - das Online-Handbuch suckt gewaltig- aber ich hatte ein Bookmark.