Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1421 connectés 

  FORUM HardWare.fr
  Programmation

  [MYSQL] Clefs étrangères qui marchent pas ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL] Clefs étrangères qui marchent pas ??

n°89153
shinji
Posté le 14-01-2002 à 15:18:23  profilanswer
 

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??

mood
Publicité
Posté le 14-01-2002 à 15:18:23  profilanswer
 

n°89157
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 15:19:30  profilanswer
 

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...


---------------
A+++ Bruce - http://www.bheller.com
n°89160
Mara's dad
Yes I can !
Posté le 14-01-2002 à 15:22:04  profilanswer
 

"Both tables have to be InnoDB type "
 
http://www.mysql.com/doc/S/E/SEC442.html


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°89161
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 15:22:17  profilanswer
 

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


---------------
A+++ Bruce - http://www.bheller.com
n°89164
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 15:24:33  profilanswer
 

Mara's dad a écrit a écrit :

"Both tables have to be InnoDB type "
 
http://www.mysql.com/doc/S/E/SEC442.html  




 
Mouais... Mais ce format de table change quoi ? C pas chiant à gérer ça ?
 
Sinon, dans la doc tj :
1.4.4.6 Reasons NOT to Use Foreign Keys constraints
 
There are so many problems with foreign key constraints that we don't know where to start:  
 
Foreign key constraints make life very complicated, because the foreign key definitions must be stored in a database and implementing them would destroy the whole ``nice approach'' of using files that can be moved, copied, and removed.  
The speed impact is terrible for INSERT and UPDATE statements, and in this case almost all FOREIGN KEY constraint checks are useless because you usually insert records in the right tables in the right order, anyway.  
There is also a need to hold locks on many more tables when updating one table, because the side effects can cascade through the entire database. It's MUCH faster to delete records from one table first and subsequently delete them from the other tables.  
You can no longer restore a table by doing a full delete from the table and then restoring all records (from a new source or from a backup).  
If you use foreign key constraints you can't dump and restore tables unless you do so in a very specific order.  
It's very easy to do ``allowed'' circular definitions that make the tables impossible to re-create each table with a single create statement, even if the definition works and is usable.  
It's very easy to overlook FOREIGN KEY ... ON DELETE rules when one codes an application. It's not unusual that one loses a lot of important information just because a wrong or misused ON DELETE rule.  
The only nice aspect of FOREIGN KEY is that it gives ODBC and some other client programs the ability to see how a table is connected and to use this to show connection diagrams and to help in building applications.  
 
MySQL will soon store FOREIGN KEY definitions so that a client can ask for and receive an answer about how the original connection was made. The current `.frm' file format does not have any place for it. At a later stage we will implement the foreign key constraints for application that can't easily be coded to avoid them.


---------------
A+++ Bruce - http://www.bheller.com
n°89171
shinji
Posté le 14-01-2002 à 15:32:08  profilanswer
 

Bruce a écrit a écrit :

 
 
Mouais... Mais ce format de table change quoi ? C pas chiant à gérer ça ?
 
Sinon, dans la doc tj :
1.4.4.6 Reasons NOT to Use Foreign Keys constraints
 
There are so many problems with foreign key constraints that we don't know where to start:  
 
Foreign key constraints make life very complicated, because the foreign key definitions must be stored in a database and implementing them would destroy the whole ``nice approach'' of using files that can be moved, copied, and removed.  
The speed impact is terrible for INSERT and UPDATE statements, and in this case almost all FOREIGN KEY constraint checks are useless because you usually insert records in the right tables in the right order, anyway.  
There is also a need to hold locks on many more tables when updating one table, because the side effects can cascade through the entire database. It's MUCH faster to delete records from one table first and subsequently delete them from the other tables.  
You can no longer restore a table by doing a full delete from the table and then restoring all records (from a new source or from a backup).  
If you use foreign key constraints you can't dump and restore tables unless you do so in a very specific order.  
It's very easy to do ``allowed'' circular definitions that make the tables impossible to re-create each table with a single create statement, even if the definition works and is usable.  
It's very easy to overlook FOREIGN KEY ... ON DELETE rules when one codes an application. It's not unusual that one loses a lot of important information just because a wrong or misused ON DELETE rule.  
The only nice aspect of FOREIGN KEY is that it gives ODBC and some other client programs the ability to see how a table is connected and to use this to show connection diagrams and to help in building applications.  
 
MySQL will soon store FOREIGN KEY definitions so that a client can ask for and receive an answer about how the original connection was made. The current `.frm' file format does not have any place for it. At a later stage we will implement the foreign key constraints for application that can't easily be coded to avoid them.  




 
Putain j'y crois pas!
C'est nul MySql ( à quoi sa sert une BDD sans intégrité référentielle???). Il y rien compris le mec qu'a écrit ça!! Il a jamais suivit une cours de BDD de sa vie!
 
Il faut mettre Type=InnoDD (ça veut dire quoi?).
A quoi ça sert de même FOREIGN KEY si c'est pas pour avoir l'intégrité référentielle! C'est idio le Type=InnoDD!
 
Je suis déçu de MySql!

n°89172
shinji
Posté le 14-01-2002 à 15:33:45  profilanswer
 

Et en plus le CASCADE ON DELETE marche pas même avec InnoDb
 
:-(

n°89178
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 15:44:57  profilanswer
 

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...


---------------
A+++ Bruce - http://www.bheller.com
n°89184
Mara's dad
Yes I can !
Posté le 14-01-2002 à 15:48:22  profilanswer
 

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.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°89197
shinji
Posté le 14-01-2002 à 15:57:02  profilanswer
 

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!

mood
Publicité
Posté le 14-01-2002 à 15:57:02  profilanswer
 

n°89204
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 16:07:40  profilanswer
 

shinji a écrit a écrit :

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!  




 
Oracle c pas le même but, jusqu'à preuve du contraire c une boite et ils vendent le soft... Un SGBD commercial sans intégrité référentielle (même si on l'utilise pas), ça fait tâche...


---------------
A+++ Bruce - http://www.bheller.com
n°89215
shinji
Posté le 14-01-2002 à 16:17:52  profilanswer
 

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!

n°89219
Bruce
Music 4 your ears!
Posté le 14-01-2002 à 16:20:15  profilanswer
 

shinji a écrit a écrit :

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!  




 
Vi, vi je sais bien ! Comme je te dit, je ne suis pas contre l'intégrité référentielle, mais dire que MySQL c nul à cause de ça c'est franchement mal le juger ! Trouve moi un SGBD avec autant de possibilitées et aussi performant à ce prix là... :hello:  
L'IR bien utilisée est très bien et très pratique mais c'est souvent un gros bordel pour les gens qui ne s'y connaissent pas trop en BDD...


---------------
A+++ Bruce - http://www.bheller.com
n°89226
Mara's dad
Yes I can !
Posté le 14-01-2002 à 16:27:56  profilanswer
 

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 !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°89360
gizmo
Posté le 15-01-2002 à 11:37:24  profilanswer
 

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.

n°89570
Mara's dad
Yes I can !
Posté le 15-01-2002 à 16:54:16  profilanswer
 

Tout à fait D'accord !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [MYSQL] Clefs étrangères qui marchent pas ??

 

Sujets relatifs
[PHP-MySQL] mon form maison[php/mysql]probleme sur le renvoie d'une requete
existe-t-il un soft pour passer d'une BD sous Access en mySQL ?Choix en MySQL
[MySql] commande mysql pour effacer toutes les tables d'une BDarrive pô à extraire une valeur dans une table, avec mysql ...
Est t'il possible d'utiliser Bind (DNS) avec une base de donné Mysql ?mySQL et ODBC, c'est pareil ?
[Java] Comment marchent les chats en Java?Site PHP - MySQL
Plus de sujets relatifs à : [MYSQL] Clefs étrangères qui marchent pas ??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR