[PHP MySQL] Clef primaire multiple ?(prob. réglé + infos législation)

Clef primaire multiple ?(prob. réglé + infos législation) [PHP MySQL] - PHP - Programmation

Marsh Posté le 12-04-2003 à 20:16:30    

Voila, j'ai un soucis, plus avec mysql que php d'ailleur.
 
J'ai une table avec une clef primaire composée de 2 champs. Probleme :
msql a l'air de considerer que la table a 2 clefs primaire => des qu'on a duex enregistrements avec 1 des 2 champs identique, ca bloque.
 
les 2 champs sont N° sécurité sociale et année scolaire qui forment en fait un dossier scolaire .
 
On peut avoir 2 x le meme NSS dans le cas d'un redoublant, donc on prends une clef composée de l'année et du NSS.
 
help ???


Message édité par Gurumeditation le 13-04-2003 à 18:01:23
Reply

Marsh Posté le 12-04-2003 à 20:16:30   

Reply

Marsh Posté le 12-04-2003 à 21:39:38    

gurumeditation a écrit :

Voila, j'ai un soucis, plus avec mysql que php d'ailleur.
 
J'ai une table avec une clef primaire composée de 2 champs. Probleme :
msql a l'air de considerer que la table a 2 clefs primaire => des qu'on a duex enregistrements avec 1 des 2 champs identique, ca bloque.
 
les 2 champs sont N° sécurité sociale et année scolaire qui forment en fait un dossier scolaire .
 
On peut avoir 2 x le meme NSS dans le cas d'un redoublant, donc on prends une clef composée de l'année et du NSS.
 
help ???


 
j'ai envie de dire >> google groups  :)


---------------
"Only Bikers understand why dogs love to stick their heads out car windows"
Reply

Marsh Posté le 12-04-2003 à 21:41:17    

gurumeditation a écrit :

Voila, j'ai un soucis, plus avec mysql que php d'ailleur.
 
J'ai une table avec une clef primaire composée de 2 champs. Probleme :
msql a l'air de considerer que la table a 2 clefs primaire => des qu'on a duex enregistrements avec 1 des 2 champs identique, ca bloque.
 
les 2 champs sont N° sécurité sociale et année scolaire qui forment en fait un dossier scolaire .
 
On peut avoir 2 x le meme NSS dans le cas d'un redoublant, donc on prends une clef composée de l'année et du NSS.
 
help ???


 
autre chose, en France il est interdit d'utiliser le numéro de sécurité sociale comme clé. heureusement d'ailleurs.


---------------
"Only Bikers understand why dogs love to stick their heads out car windows"
Reply

Marsh Posté le 12-04-2003 à 22:23:38    

Je sais pas si tu peux faire une clé primaire sur plusieurs champs [:figti]  
Mais tu peux créer un index unique :)

Reply

Marsh Posté le 12-04-2003 à 22:44:53    

   ton erreur, c'est que tu n'as pas d'index unique (comme l'indique notre confrère du post précedent), alors ajoute un champ 'numero' avec l'état auto incrément et le tour est joué !!!
 
   petit conseil, toujours avoir une clé primaire dans une table de type auto incrément, ca evite tous les problèmes de doublons et c'est très utile comme clé etrangère dans les autres tables  ;)


---------------
La raison du plus fort est toujours la plus forte.... Parce que c'est comme ça NA !
Reply

Marsh Posté le 12-04-2003 à 23:15:50    

Aussi naze que soit MySQL, le manuel spécifie qu'une clef primaire peut être multiple :
http://www.mysql.com/documentation [...] EATE_TABLE
 
Tu ne peux en avoir qu'une (de clef pas de colone) et tu n'as pas le choix de son nom.
Evidement, il serait intéressant de mettre un index sur les colones de ta clef (car ça accélère la recherche des doublons lors des inserts), mais c'est uniquement pour des raisons de perfs et n'a rien d'obligatoire (dans le monde des bases de données au moins, dans celui de MySQL c'est peut-être plus compliqué).
 
edit : gloup  

Citation :

KEY is a synonym for INDEX


mouais, c'est vraiment n'importe quoi cette appli ; oublie mon post et tape toi la doc, vu quye rien de ce qui a cours dans le monde des BDD à cours chez MySQL.


Message édité par nraynaud le 12-04-2003 à 23:18:39
Reply

Marsh Posté le 12-04-2003 à 23:17:35    

gurumeditation a écrit :

Voila, j'ai un soucis, plus avec mysql que php d'ailleur.
 
J'ai une table avec une clef primaire composée de 2 champs. Probleme :
msql a l'air de considerer que la table a 2 clefs primaire => des qu'on a duex enregistrements avec 1 des 2 champs identique, ca bloque.
 
les 2 champs sont N° sécurité sociale et année scolaire qui forment en fait un dossier scolaire .
 
On peut avoir 2 x le meme NSS dans le cas d'un redoublant, donc on prends une clef composée de l'année et du NSS.
 
help ???


 
amha t'as du te planter quelque part. vérifie bien ta syntaxe de création de clé primaire, chez moi ça marche nickel les clés primaires sur deux colonnes (dernière version de prod de mysql)
 
A+

Reply

Marsh Posté le 13-04-2003 à 00:07:50    

merci pour les réponses, par contre le coup du c'est interdit, j'aimerai bien savoir d'ou ca vient :??: (sérieusement, ca fait 2 fois qu'on me le dit, et j'aimerai bien avoir le texte de loi qui le dit. La base est de toute facon déclarée a la CNIL )
 
c'est une appli pour une école, et le NSS en clef primaire c'est carrément pratique .
 
 
dropsy> le probleme c'est que quand je spécifie que les 2 champs composent la clef primaire (primary key(nss,annee) ) il fait en fait comme si la table avait 2 clef primaires distinctes, ce qui est un peu lourd ...
 
 
la création des tables, je l'ai faite a la main, puis avec phpmyadmin, et ca change rien :(
 
 

Reply

Marsh Posté le 13-04-2003 à 00:23:21    

gurumeditation a écrit :

merci pour les réponses, par contre le coup du c'est interdit, j'aimerai bien savoir d'ou ca vient :??: (sérieusement, ca fait 2 fois qu'on me le dit, et j'aimerai bien avoir le texte de loi qui le dit. La base est de toute facon déclarée a la CNIL )


Je pense que tu peux commencer tes recherches juridique du côté de l'interdiction qui a été donnée au ministère des finances de l'utiliser.

Reply

Marsh Posté le 13-04-2003 à 00:49:28    

y'a pas un lien par la ?
 
je me base sur les textes de la cnil (www.cnil.fr) et j'ai pas vraiment trouvé quoi que ce soit la bas...

Reply

Marsh Posté le 13-04-2003 à 00:49:28   

Reply

Marsh Posté le 13-04-2003 à 18:00:52    

bon ben ca peut peut etre interesser du monde, j'ai trouvé la solution a mes problemes :
 
1/ c'est tout a fait légal d'utiliser le NSS dans une base de donnée a partir  du moment ou l'utilisateur en est averti, et que cette info n'est pas divulguée.
 
2/le pb que j'avais: le NSS était déclaré en int de longueur 15 (unsigned) et tronquait a 11 ou 12, je ne me souviens plus . De plus, phpmyadmin remettait automatiquement comme nss et comme année ce qu'on avait mis dans le premier enregistrement ...
 
a la limite, je peux comprendre que INT est inférieur a 15 chiffre. M'enfin l'année sur 4 chiffres elle déconnait aussi ...
 
probleme réglé en passant tout en char :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed