|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Christophe Inscription : novembre 2009 Messages : 77 ![]() |
Bonjour à tous !
J'ai une question concernant les clés primaires composées de plusieurs colonnes. Actuellement, j'ai une table formée de cette manière : Code :
Mais j'aimerais plutôt concaténé ces 3 identifiants pour n'en former qu'un seul. (En théorie, ces 3 colonnes sont censées être, selon mon MCD, des identifiants relatifs). MySql me permet-il donc de créer une seule et unique clé qui concatènerait les 3 champs indiqués ? Ou dois-je réaliser différents traitements au niveau de mon application pour le faire ? (ce qui me semble embêtant). Merci pour vos futurs réponses |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
oui tu peux le faire.
non je sais pas ce que tu peux y gagner.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : janvier 2006 Messages : 951 ![]() |
vu le nom des champs, tu devrais te rappeler qu'on ne fait pas de change un vendredi. d'une part du va perdre le côté sympa des clés étrangères et de l'autre côté tu ne vas rien y gagner, et en plus tu vas perdre du temps.
__________________
PHP fait nativement la validation d'adresse électronique Utilisez le bouton résolu! |
|
|
00
|
|
|
#4 | ||
|
Membre régulier
![]() Christophe Inscription : novembre 2009 Messages : 77 ![]() |
Citation:
Citation:
N'y-a-t-il pas une autre solution ? Merci pour ta réponse. |
||
|
|
00
|
|
|
#5 |
![]() ![]() |
La question qu'on se pose, c'est : Pourquoi diable veux-tu concaténer ces 3 identifiants ?
pas pour remplacer la clé primaire normalisée par cette concaténation j'espère ? Ce serait une très mauvaise idée !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#6 | ||
|
Membre régulier
![]() Christophe Inscription : novembre 2009 Messages : 77 ![]() |
Non non, surtout pas.
En fait, j'ai modélisé ainsi ma bdd (enfin, ce n'est qu'une petite partie de la bdd) : audit 0,N ---------- 1,1 (R) ligne_commande commande 0,N ---- 1,1 (R) ligne_commande site 0,N ----------- 1,1 (R) ligne_commande Ce qui revient à faire une association ternaire. Maintenant, imaginons que j'ai une ligne de ce type dans ma table ligne_commande: Code :
Si ça pouvait être le cas, ça m'aurait arrangé car ça m'aurait permis d'identifier simplement une ligne de commande (et effectuer différents traitements par rapport à celle-ci). voila |
||
|
|
00
|
|
|
#7 |
![]() ![]() |
Si tu as vraiment besoin d'un identifiant indépendant de la ligne de commande, tu peux ajouter une colonne auto-incrémentée et en faire ta clé primaire puis ajouter un index UNIQUE sur le triplet des anciennes colonnes clés primaires.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#8 | ||||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Code :
1119 = 1119 Je ne saurais qu'appuyer CinePhil : Citation:
|
||||||
|
|
00
|
|
|
#9 | |||||
|
Membre régulier
![]() Christophe Inscription : novembre 2009 Messages : 77 ![]() |
Citation:
Citation:
-------------------------------------------------- Du coup, j'ai une autre question. J'ai fait un test sur MySql avec deux entités de ce genre : ALPHA 0,N --------------- 1,1 (R) BETA A noter que l'identifiant d'ALPHA est auto-incrémenté, celui de BETA aussi ! Ce qui me donne : Code :
Citation:
|
|||||
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Citation:
L'exemple classique de ce genre de modèle est celui des chambres d'hôtels. Hotel -1,n----Avoir----(1,1)- Chambre Ce MCD pourrait générer les tables suivantes : Hotel (htl_id, htl_nom...) Chambre (chb_id_hotel, chb_num_chambre...) Tu remarqueras que j'ai appelé la seconde colonne de la clé primaire de Chambre "chb_num_chambre" et pas "chb_id_chambre" ; cette colonne est porteuse de sens et correspond bel et bien au numéro physique de la chambre dans l'hôtel. Ainsi, pour chaque hôtel, les numéros de chambres vont de 1 à n. Dans ta table, tu as mis un AUTO_INCREMENT sur ce qui correspond au numéro de chambre. Autrement dit, pour une chaîne d'hôtels genre Campanile qui doit en comporter des centaines (des milliers ?), l'hôtel situé à Toulouse Labège pourrait avoir des numéros de chambre de 2815 à 2872. Ça fait bizarre non ? Idem pour les commandes et les lignes de commande ou de facture par identification relative ; les numéros de lignes de commande ou de facture vont de 1 à n pour chaque commande. Recevoir une facture avec des lignes numérotées de 165812 à 165823, ça fait bizarre non ? => Il ne faut pas mettre d'auto-incrémentation sur la seconde colonne de la clé primaire ! Il faut gérer la numérotation lors de l'INSERT en cherchant l'identifiant max pour la première colonne. Je reprends le message d'erreur que tu as reçu : Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#11 |
|
Membre régulier
![]() Christophe Inscription : novembre 2009 Messages : 77 ![]() |
Effectivement, je comprends mieux mon erreur !
Merci pour ta réponse CinePhil |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com