#1 Le 09/11/2007, à 10:25
- x@v
[Résolu] - clé primaire obligatoire [SQL]
Bonjour,
A chaque fois que je crée une table sql, je suis obligé de mettre un champ en clé primaire, mais pourquoi ?
Merci
[-- qwerty user --]
Hors ligne
#2 Le 09/11/2007, à 10:35
- KLeMiX
Re : [Résolu] - clé primaire obligatoire [SQL]
Tu bosses sur quoi ?
Que connais tu des Bases de Données ?
Poster c'est poster ! Editer n'est pas jouer © KLeMiX
Hors ligne
#3 Le 09/11/2007, à 10:48
- x@v
Re : [Résolu] - clé primaire obligatoire [SQL]
sur phpmyadmin j'ai voulu créer une table simple avec 3 champs
donc cette table ne donctionne pas sous ce soft
CREATE TABLE stagiaire (
id tinyint(11) unsigned NOT NULL auto_increment,
nom varchar(100) NOT NULL,
prenom varchar(100) NOT NULL,
age tinyint(3) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
mais avec une clé primaire sa fonctionne :
CREATE TABLE stagiaire (
id tinyint(11) unsigned NOT NULL auto_increment,
nom varchar(100) NOT NULL,
prenom varchar(100) NOT NULL,
age tinyint(3) NOT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
Pour mon utilisation c'est pour du java (mon premier ihm)...
Et donc j'aimerai comprendre au dela de sont fonctionnement
Dernière modification par x@v (Le 09/11/2007, à 11:13)
[-- qwerty user --]
Hors ligne
#4 Le 09/11/2007, à 14:12
- KLeMiX
Re : [Résolu] - clé primaire obligatoire [SQL]
Le type de colonne auto_increment est forcément sur la PK dans MySql
PK => identifiant unique donc ca ne devrait pas te poser de probleme pour cette colonne
Poster c'est poster ! Editer n'est pas jouer © KLeMiX
Hors ligne
#5 Le 09/11/2007, à 14:20
- x@v
Re : [Résolu] - clé primaire obligatoire [SQL]
Oui mais ce que je veux savoir c'est pourquoi il faut toujours une clé primaire ?
Je n'est pas de problème particulier pour faire fonctionner le code...
Dernière modification par x@v (Le 09/11/2007, à 14:23)
[-- qwerty user --]
Hors ligne
#6 Le 09/11/2007, à 14:26
- dekans
Re : [Résolu] - clé primaire obligatoire [SQL]
Oui mais ce que je veux savoir c'est pourquoi il faut toujours une clé primaire ?
Je n'est pas de problème particulier pour faire fonctionner le code...
Parce que MySQL créé une base de donnée indexé, ce qui veut dire que chacun de tes tuples (ici les personnes) doivent être référencés avec un identifiant unique.
Comme ca l'index contient les Id de tous tes tuples ce qui permet de les retrouver plus rapidement pour une base de données assez grande.
dekans@jabber.kubuntu-fr.org
Hors ligne
#7 Le 09/11/2007, à 16:46
- x@v
Re : [Résolu] - clé primaire obligatoire [SQL]
j'ai une autre question :
à quoi sert-il de faire des clé index ?
Merci
[-- qwerty user --]
Hors ligne
#8 Le 09/11/2007, à 17:14
- dekans
Re : [Résolu] - clé primaire obligatoire [SQL]
pour éviter de parcourir toute la base de données lorsqu'on recherche un ou des élément(s) précis.
L'index sert à trouver directement ce qui nous intéresse.
dekans@jabber.kubuntu-fr.org
Hors ligne
#9 Le 09/11/2007, à 17:41
- KLeMiX
Re : [Résolu] - clé primaire obligatoire [SQL]
Oui mais ce que je veux savoir c'est pourquoi il faut toujours une clé primaire ?
Je n'est pas de problème particulier pour faire fonctionner le code...
si tu ne choisi pas le auto_increment, tu n'es pas obligé d'avoir de PK.
C'est cette option qui t'obliges à avoir une PK.
Poster c'est poster ! Editer n'est pas jouer © KLeMiX
Hors ligne
#10 Le 09/11/2007, à 17:46
- KLeMiX
Re : [Résolu] - clé primaire obligatoire [SQL]
j'ai une autre question :
à quoi sert-il de faire des clé index ?
Merci
Une clé indexé sert au moteur de base de données pour faire des requetes avec jointure.
Select tb1.nom,tb2.tel
from tb1, tb2
where tb1.id_user=tb2.id_user
and tb1.nom='TOTO'
Grace à la clé idexé de la table tb2 le moteur n'ira lire que les info dont l'id_user de la table tb1 correspont
Poster c'est poster ! Editer n'est pas jouer © KLeMiX
Hors ligne
#11 Le 09/11/2007, à 20:02
- John Matrix
Re : [Résolu] - clé primaire obligatoire [SQL]
Vouloir créer une table sans clé primaire est une abération. Une clé primaire te sert à garantir l'intégrité de tes données. Elle permet d'identifier chaque enregistrement de ta table par quelque chose d'unique et donc d'éviter les doublons.
Hors ligne
#12 Le 10/11/2007, à 00:38
- KLeMiX
Re : [Résolu] - clé primaire obligatoire [SQL]
Vouloir créer une table sans clé primaire est une abération. Une clé primaire te sert à garantir l'intégrité de tes données. Elle permet d'identifier chaque enregistrement de ta table par quelque chose d'unique et donc d'éviter les doublons.
Pas forcement, une table de parametre ou temporaire, sans PK tu gagnes en temps de chargement
Poster c'est poster ! Editer n'est pas jouer © KLeMiX
Hors ligne
#13 Le 11/11/2007, à 00:47
- Martopioche
Re : [Résolu] - clé primaire obligatoire [SQL]
Vouloir créer une table sans clé primaire est une abération. Une clé primaire te sert à garantir l'intégrité de tes données. Elle permet d'identifier chaque enregistrement de ta table par quelque chose d'unique et donc d'éviter les doublons.
Mouairf...
C'est un peu une optique d'intégriste de certains conceptes de bases de données ça. Si mon modèle prévoit des doublons, il est pas intègre ?
Hors ligne
#14 Le 11/11/2007, à 01:19
- plmegalo
Re : [Résolu] - clé primaire obligatoire [SQL]
Juste pour apporter un peu d'eau au moulin.
La notion de clé primaire n'a rien d'une notion d'intégriste lorsqu'il s'agit de base de données. J'aurais même tendance à dire qu'une table sans clé primaire ne sert à rien : autant utiliser un fichier indexé.
De plus de par sa définition, une clé primaire est obligatoirement unique et non nulle.
La création d'une base de donnée relationnelle suit des règles de développement précises (cf MERISE) qui assure l'intégrité des données ainsi que leur utilisation et leur définition optimale. D'ailleurs, l'écriture d'un modèle de données devient rapidement incourtournable dés lors que l'on veut faire fonctionner correctement une application de gestion.
Par contre Klemix "Une clé indexé sert au moteur de base de données pour faire des requetes avec jointure." : c'est faux !
Ce n'est le cas que si l'on a pris soin de créer une contrainte dite de clé "étrangère" ("foreign key"). Une clé est dite indexée simplement si on y a adjoint un index. Cet index permet d'accéder plus rapidement aux données correspondant à la valeur de la clé. Cet index peut très bien n'être utilisé que pour un accès à la table concernée sans aucune notion de jointure à une autre table.
Dernière modification par plmegalo (Le 11/11/2007, à 01:21)
#15 Le 11/11/2007, à 10:38
- x@v
Re : [Résolu] - clé primaire obligatoire [SQL]
oui maie en même temps on peux souvent lire qu'une jointure s"appuie sur des clés indexer en reliant une autre clé index.
Et donc les deux concept sont implicitement lier, mais moi je suis perdu ?
[-- qwerty user --]
Hors ligne
#16 Le 11/11/2007, à 14:12
- plmegalo
Re : [Résolu] - clé primaire obligatoire [SQL]
Les deux concepts ne sont absolument pas liés.
La notion d'index existait bien longtemps avant la notion de clé étrangère et donc de jointure.
Un index n'est qu'un fichier qui permet d'associer un ensemble de valeurs de donnée aux adresses physiques des enregistrements dans un fichier (ou des lignes dans une table).
La notion de clé étrangère est apparues avec les bases de données relationnelles (c'est même ça qui fait qu'une base est relationnel).
De plus, la jointure est l'opération qui consiste à utiliser une ou plusieurs clés étrangères pour accéder conjointement aux informations de plusieurs tables. Cette opération ne nécessite pas la présence d'index pour fonctionner. La présence des index est uniquement lié à un principe d'accélération des accès aux données.
En résumé, on peut distinguer (entre autre) :
Index : moyen d'accéder plus rapidement aux données d'une table (et une seule)
Clé étrangère : clé présente dans une table pour permettre d'établir la relation avec une autre table portant cette clé comme identifiant (indexé ou non)
Clé primaire : donnée identifiant de façon unique une ligne d'une table
Donnée(s) (ou champs ou colonnes de table) indexée(s) : donnée(s) sur la(les)quelle(s) on a appliquée un index
C'est la clé étrangère qui permet donc de faire la jointure et non l'index.
De plus dans les débuts des bases de données relationnel, la notion de contrainte de clé étrangère n'était pas gérée par les SGBD, mais "à la main" (par programmation). Ce n'est que plus tard que les SGBD ont permis de gérér ces contraintes (notamment en permettant ou en empèchant la suppression en cascade)
Mais, tous ça est un peu pédant et il existe de nombreuses publications qui t'en diront bien plus et mieux que je ne saurai le faire, sur ce sujet.
Dernière modification par plmegalo (Le 11/11/2007, à 14:13)
#17 Le 11/11/2007, à 14:41
- compte supprimé
Re : [Résolu] - clé primaire obligatoire [SQL]
Bonjour,
Si google n'avait pas un système d'indexation particulièrement sophistiqué, mais seulement des tables, il ne répondrait jamais aux questions qu'on lui pose.
L'index, c'est un peu comme la table des matières d'un bouquin qui permet d'accéder beaucoup plus vite à un chapitre qu'en feuilletant en commençant à la page 1.
A+
Mais effectivement, il vaudrait mieux commencer par lire de la doc sur les "systèmes de bases de données relationnelles"...
Dernière modification par faustus (Le 11/11/2007, à 14:45)
#18 Le 11/11/2007, à 14:54
- plmegalo
Re : [Résolu] - clé primaire obligatoire [SQL]
Bonjour,
Si google n'avait pas un système d'indexation particulièrement sophistiqué, mais seulement des tables, il ne répondrait jamais aux questions qu'on lui pose.
Bien sûr que si... mais il mettrait très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très
très très très très très très très très...
longtemps
#19 Le 11/11/2007, à 16:33
- compte supprimé
Re : [Résolu] - clé primaire obligatoire [SQL]
à‡a me rappelle une célèbre formule de Keynes, l'économiste, qui, pour se moquer de Say (qui précisait que ses "lois de l'économie" étaient parfaitement valides "du moins à long terme") répondait : "à long terme, nous serons tous morts"...
Dernière modification par faustus (Le 11/11/2007, à 16:44)
#20 Le 11/11/2007, à 22:42
- x@v
Re : [Résolu] - clé primaire obligatoire [SQL]
quoi qu'il en soit phpmyadmin ne propose pas de clé étrangère fk. Alors que c'est omniprésent et présenté comme fondamental par-ci et par-là ?
Dernière modification par x@v (Le 11/11/2007, à 22:45)
[-- qwerty user --]
Hors ligne
#21 Le 12/11/2007, à 00:13
- compte supprimé
Re : [Résolu] - clé primaire obligatoire [SQL]
pimegalo a déjà tout dit.
Si tu veux en savoir plus, c'est-à -dire comprendre ce qu'il a dit, il faut que tu prennes un bouquin et que tu étudies un peu la question... et surtout avant de faire. Personne, je pense, n'aura le temps (ni probablement l'envie) de t'écrire ce bouquin sur le forum... En revanche, tout le monde sera sans doute disposé à te répondre sur une question précise.
http://dev.mysql.com/doc/refman/5.0/fr/
C'est tout ce que j'ai sous la main (le reste c'est des bouquins... et plutà´t sur les bases orientées objet, ce qui est encore autre chose).
A+
#22 Le 12/11/2007, à 10:13
- plmegalo
Re : [Résolu] - clé primaire obligatoire [SQL]
... il faut que tu prennes un bouquin et que tu étudies un peu la question... et surtout avant de faire...
+1
effectivement. Meme si les principes de mise en place et d'utilisation d'une base de donnée ne sont pas compliqués, ils nécessite quand même un minimum d'investissement personnel pour pouvoir être appliqués correctement.
Désolé de ne pas avoir plus de temps pour t'aider, mais tu trouveras des livres très bien
Sur PhpAdmin précisément tu as aussi ce bouquin qui semble pas mal, http://www.amazon.fr/PhpMyAdmin-Marc-Delisle/dp/2744019550 et dans la page il y a d'autre liens.
Etudie un peu, crée toi un "vernis" et je pense que toutes les bases deviendront plus claires pour toi.
bon courage
#23 Le 17/12/2007, à 10:29
- DJiK
Re : [Résolu] - clé primaire obligatoire [SQL]
Vous êtes gentil les gars, mais avec tout ça, j'ai pas la réponse que j'étais venu chercher!
J'ai une table qui contient:
num_reponse
num_membre
note
num_reponse et num_membre sont des clés primaires dans d'autres tables, MAIS num_membre peut être vide (là j'avais mis les 2 en clés, mais ça va pas). Donc est-ce que je dois rajouter une clé primaire?
La seule requête jamais faite est "SELECT note FROM notes WHERE num_reponse = X" donc je n'ai jamais besoin de sélectionner par clé primaire.
#24 Le 17/12/2007, à 11:06
- plmegalo
Re : [Résolu] - clé primaire obligatoire [SQL]
Vous êtes gentil les gars, mais avec tout ça, j'ai pas la réponse que j'étais venu chercher!
Contrairement à ce que tu dis , tu as toutes les réponses dans ce thread.
Une clé primaire suit deux contraintes :
1- elle ne peut être vide
2- elle doit être unique
Dans ton cas :
1- Si num réponse n'est jamais vide alors la concaténation de num réponse et de num membre ne le sera pas !
2-
La question que tu dois te poser, c'est donc plutà´t est-ce que je peux avoir plusieurs numéro de réponses identiques ?
Si c'est le cas alors il faut rendre la donnée num membre obligatoire afin de distinguer par exemple la réponse 1 du membre 3 de la réponse 1 du membre 4 !!!
A l'inverse, si num réponse est toujours différent, alors cette donnée suffit comme clé unique et num membre n'est à considérer que comme une information de ta table au même titre que "note".
Si num membre est présent, tu peux t'en servir le cas échéant pour accéder à la table des membres, c'est tout...
Sur cette partie, c'est toi qui sait (enfin j'espère) ce que doit faire ton application...
Tu as vraiment beaucoup de réponses dans ce thread et je pense que tu devrais le re-potasser en même temps que de lire des livres de fond sur les bases de données.
Ce sera sûrement toujours mieux qu'un forum, car tes questions sont des questions de base et tu dois te faire ta propre expérience en fonction de tes besoins que tu es le mieux placer pour spécifier...
#25 Le 17/12/2007, à 11:53
- DJiK
Re : [Résolu] - clé primaire obligatoire [SQL]
Si c'est le cas alors il faut rendre la donnée num membre obligatoire
Non, c'est pas possible!
C'est pour ça que j'ai supprimé le mode clé primaire sur tous les champs. Les doublons sont possibles avec ces 2 champs-là.
Donc toute la question est est-ce que je DOIS rajouter un nouveau champ qui ne sert que de clé primaire, ou si je peux garder ma table sans clé?