Mysql.._[JOINTURE - PRIMARY KEY - UNIQUE - INDEX ]

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Jeu Déc 15, 2005 16:34

thierry8 a écrit:euh...si je ne me trompe pas c'est l'inverse, le fait d'être indexé, la clé est unique...

non, c'est chantra qui a raison. c'est l'inverse.

thierry8 a écrit:En revanche dans mon cas, même les deux id ne peuvent être unique!

Je peux très bien avoir deux fois cela:
id1 = 1
id2 = 1


là j'ai perdu le fil.
pourquoi tu peux avoir ça ? c'est pas normal.
Tu as un pb dans la conception de ta base.
Tu peux poster les structures de tes 3 tables ?

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Jeu Déc 15, 2005 16:46

en gros:

TABLE 1: pages
id
url

TABLE 2: elements_ds_pages
id_page
id_elmt
typ_elmt

TABLE 3: divers elements
id
....


Bien entendue c'est vraiment grossièrement !
Il faut considérer que les tables ne peuvent qu'être ainsi !
Il y a encore pas mal de champs qui me permettent de dire cela !
(je suis certain de ma structure, cependant je l'ai mis pour que vous puissiez constaté que la TABLE 2 peut effectivement avoir id_page=1+id_elmt=1 ET id_page=1+id_elmt=1 du fait que le troisième champ "typ_elmt" permet de définir de quel element il s'agit)

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Jeu Déc 15, 2005 18:53

thierry8 a écrit:TABLE 2: elements_ds_pages
id_page
id_elmt
typ_elmt


Bien entendue c'est vraiment grossièrement !
Il faut considérer que les tables ne peuvent qu'être ainsi !
Il y a encore pas mal de champs qui me permettent de dire cela !
(je suis certain de ma structure, cependant je l'ai mis pour que vous puissiez constaté que la TABLE 2 peut effectivement avoir id_page=1+id_elmt=1 ET id_page=1+id_elmt=1 du fait que le troisième champ "typ_elmt" permet de définir de quel element il s'agit)



Je suppose que tu as +sieurs table correspond auxtype d' éléments :
- des news
- des trucs
- des bibules

=> ta clé primaire c'est : id_page, id_elmt, typ_elmt

typ_elemnt te permet de te joindre à la bonne table, c'est ça ?

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Jeu Déc 15, 2005 19:00

oui..


chantra
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 257
Inscription: 27 Juin 2005

Message le Ven Déc 16, 2005 9:40

pb resolu alors, tu doit mettre {id_page, id_elmt, typ_elmt} en unique.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Déc 16, 2005 10:23

et pourquoi ne pas le mettre en index ?
la différence je comprends pas entre les deux ?


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Ven Déc 16, 2005 10:28

Thierry8 il aura bientot 5000 messages WRI, mais ca sera 5000 messages ou on l'aura aidé à faire son site uh uh :)


chantra
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 257
Inscription: 27 Juin 2005

Message le Ven Déc 16, 2005 10:29

l'unicite d'assure de ne pas avoir de doublons.

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Ven Déc 16, 2005 10:34

thierry8 a écrit:et pourquoi ne pas le mettre en index ?
la différence je comprends pas entre les deux ?


Tu n'est pas obligé d'avoir une clé primaire, ou un index unique sur une table.
cela pourrait te permettre d'éviter des erreurs.
Tu insére dans ta table :
id1=1, id2=1, type_elmnt=1
id1=1, id2=1, type_elmnt=1

si tu as une clé primaire ou un index unique sur ces trois champs le 2° insert va échouer.
A toi de savoir si ce cas est possible ou non. A mons avis, non.

Un index : te permet d'optimiser les performances de tes requêtes SELECT.

Unique : est une propriétés supplémentaire d'un index.

Une clé primaire est un type d'index particulier qui identifie de manière unique un enregistrement.

Dans une table tu peux avoir simultanément :
- Une clé primaire ( index unique )
- Plusieurs clés étrangéres ( index non unique )
- Des index multi-colonnes.
- un ou plusieurs index unique.

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Déc 16, 2005 10:56

e-kiwi a écrit:Thierry8 il aura bientot 5000 messages WRI, mais ca sera 5000 messages ou on l'aura aidé à faire son site uh uh :)


...je préfère ça à 5 000 messages mesquins...

thierry8
WRInaute accro
WRInaute accro
 
Messages: 3251
Inscription: 11 Juil 2005

Message le Ven Déc 16, 2005 21:24

J'en reviens au problème et je vous remercie tous de votre aide !
-> En fouillant un peu sur l'installation de EasyPHP, sur la table mysql, j'ai pu m'apercevoir qu'ils mettaient le même style de champ que moi en clé primaire... <-

Donc je fais un petit récap' qui pourra servir à d'autres:
(corrigez moi si je me trompe)

Clé primaire: identifie de manière unique un enregistrement (INDEX + UNIQUE). La différence avec Unique c'est qu'il peut englober plusieurs champs et donc la clé est relative à l'ensemble de ces champs.

Unique: permet de rendre spécifiquement un champ unique, pour éviter les doublons. Par la même occasion un champ unique sera indexé.

Index: permet d'indexer un champ pour améliorer la vitesse des recherches sur ce même champ. En revanche la vitesse d'insertion ou de modification sera diminuée.


J'espère avoir bien résumé !

Merci à tous ceux qui m'ont aidé !

EDIT: J'ai constaté également que sur la base de données mysql (PHPMyAdmin), la table db possède plusieurs champs en PRIMARY KEY, mais que l'un de ces champs est repris en index a part...
Pourquoi donc ? PRIMARY KEY ne remonterait-il pas l'index automatiquement ? (on pourrait donc aussi penser qu'il en est de même pour "unique")

shrom
WRInaute impliqué
WRInaute impliqué
 
Messages: 865
Inscription: 5 Juil 2004

Message le Ven Déc 16, 2005 22:50

spidetra a écrit:Tu n'est pas obligé d'avoir une clé primaire, ou un index unique sur une table.


C'est la clé primaire qui identifie de manière unique un enregistrement, s'il est impossible de déterminer une clé primaire, il y a une grosse erreur de conception.
C'est une des bases de la théorie des base de données relationnelles ( première forme normale ) après qu'elle soit indiquée ou non au SGBD est une autre chose.

La clé primaire peut être un champs ou une combinaison de plusieurs champs. Elle est de préférence numérique ( entier non signé de préférence ) afin d'optimiser les performances.

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Dim Déc 18, 2005 18:40

shrom a écrit:
C'est la clé primaire qui identifie de manière unique un enregistrement, s'il est impossible de déterminer une clé primaire, il y a une grosse erreur de conception.
C'est une des bases de la théorie des base de données relationnelles ( première forme normale ) après qu'elle soit indiquée ou non au SGBD est une autre chose.


d'accord à 100% shrom. Je n'ai jamais fait une table sans clè primaire.
C'est tout a fait le sens de mon post.

Mysql.._[JOINTURE - PRIMARY KEY - UNIQUE - INDEX ]

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités