|
Dernière réponse | |
---|---|
Sujet : [MYSQL] Clefs étrangères qui marchent pas ?? | |
Mara's dad | Tout à fait D'accord ! |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Mara's dad | Tout à fait D'accord ! |
gizmo | L'intégrité référentielle, ca sert beaucoup dans les gros projets ou beaucoup de monde travaille, car c'est une garantie supplémentaire face aux mélanges de bouts de code qui réunis au final. C'est très pratique pour palier aux bugs qui n'ont pas été trouvé. Et dans ces gros travaux, la rapidité, tu l'obtient en mettant des machines conséquentes.
Le but de mysql est de tourner sur des petits serveurs pour des petites applic. Donc ca ne leur est d'aucun intérêt. |
Mara's dad | A quoi elle te sert l'IR ?
A part : Vérifier que ton code est pas RIPOUX ? Faire ramer ton SGBD ? T'emerder quand tu fait une restauration, ou une copie de table... Parce-que sinon, quand la base te renvoie une erreur d'IR, t'es bien obligé de la traiter dans ton code, non ? Moi, je dis, autant faire les choses bien du premier coup ! |
Bruce |
|
shinji | Je suis pas sûr qu'ils l'utilisent pas comme tu dit!
J'ai des profs qui sont intervenant extérieurs (qui bossent dans des boîtes du coin) et je te garanti qu'ils l'utilisent! |
Bruce |
|
shinji | Parce que tu crois que Oracle, ils ont laissé de côté comme ça l'intégrité référentiel du genre : "Oh de toute façon, ça sert pas à grand chose, c'est chiant" ça éviterai un bon paquet de programmation! Puisque de toute façon, il faudra le faire par un moyen ou un autre! |
Mara's dad | Ben moi, j'aime bien MySql parceque :
C'est rapide, fiable, et que çà fait CE QUE JE LUI DEMANDE, RIEN QUE CE QUE JE LUI DEMANDE ! J'aime pas les boîtes noires qui font des trucs pas clair, genre : Triggers CASCADE ON DELETE ... Pas clair dans le sens ou, en lisant le code, il est pas évident d'être sûr de ce qui se passe VRAIEMENT ! J'aime pas les applis qui proposent de supprimer un trucs pour te demander ensuite confirmation et finalement te dire, "A ben on est désolé, mais la SACRO-SAINTE intégrité référentielle, elle dit que c'est pas possible !" Mais bon, je sais y'a plein de gens très bien qui pensent exactement le contraire ! Moi, j'aime que la logique de fonctionnement soit INTEGRALEMENT visible dans le code. |
Bruce | Ok, je crois que c toi qui as pas bien pigé le fonctionnement des BDD. Toutes les raisons qu'il explique sont vraies. Une bonne intégrité référentielle c sympa sur le papier, mais en pratique, c'est l'enfert plus qu'autre chose ! Surtout à gérer pour un SGBD... Bref ils ont préféré aller à l'essentiel (faire un SGBD efficace, léger, gratuit et portable) que faire une intégrité référentielle de merde qu'une personne sur 1000 as envie d'utiliser... |
shinji | Et en plus le CASCADE ON DELETE marche pas même avec InnoDb
:-( |
shinji |
|
Bruce |
|
Bruce | Dans la doc de MySQL :
1.4.4 Functionality Missing from MySQL 1.4.4.1 Sub-selects 1.4.4.2 SELECT INTO TABLE 1.4.4.3 Transactions 1.4.4.4 Stored Procedures and Triggers 1.4.4.5 Foreign Keys 1.4.4.6 Reasons NOT to Use Foreign Keys constraints 1.4.4.7 Views 1.4.4.8 `--' as the Start of a Comment |
Mara's dad | "Both tables have to be InnoDB type "
http://www.mysql.com/doc/S/E/SEC442.html |
Bruce | MySQL as tout pour gérer ce genre de trucs mais ne le fait pas... En fait c à toi de gérér l'intégrité référentielle de tes données... |
shinji | Voilà, j'ai créé deux tables toutes cons liéés par une clé étrangère:
create table table1( id1 number(2) PRIMARY KEY, nom1 varchar(5) ); create table table2( id2 number(2) PRIMARY KEY, nom2 varchar(5), id1 number(2), FOREIGN KEY(id1) REFERENCES table1(id1) ); Normalement, si j'ai dans table1: "1 toto" et que j'essaye la requète suivante: "insert into table2 values('1','toto','2');" Il devrait me faire un erreur comme quoi il n'y a pas de valeur id1=2 dans table1. Or, il fait qd même l'insertion dans la table2. Pourquoi ne tient-il pas compte de ma clef étrangère?? |