* Bonjour, *
Quelle différence entre un index Unique et un index Primary.
Puisque ses deux index font la même chose :
-indexer la colonne et ne pas autoriser les doublons dans cette colonne.
* Merci *
* Bonjour, *
Quelle différence entre un index Unique et un index Primary.
Puisque ses deux index font la même chose :
-indexer la colonne et ne pas autoriser les doublons dans cette colonne.
* Merci *
Conceptuellement, déjà, c'est la différence entre une façon d'identifier un objet, et une façon de pouvoir le retrouver de façon unique. Si je dois référencer l'objet, je le ferai plus naturellement par l'intermédiaire de sa clé primaire, que via les éléments constitutifs d'un index unique. Par exemple, en supposant que j'ai une table de personnes avec un n° de sécurité sociale, j'aurais potentiellement un index unique sur le n° de sécu, mais j'utiliserai quand même plutôt une clé primaire auto-incrémentée.
Ensuite, la clé primaire peut aussi organiser physiquement la table (Clustered index SQL Server, IOT Oracle).
Enfin, techniquement, un index unique peut être nullable, une clé primaire, non.
Déjà, il ne faut pas les voir comme des index mais comme des contraintes, le SGBD étant libre d'utiliser un ou des index non uniques pour assurer la validation de la contrainte.
Ensuite une clé primaire a une signification technique pour le SGBD et permet de créer les références entre les tables.
La contrainte d'unicité est généralement utilisée pour valider la contrainte fonctionnelle lorsque l'on utilise pour la partie technique une clé primaire subrogée.
Par exemple un site web comme DVP permet à des utilisateurs de se connecter et de modifier leurs identifiants de connexion.
Il y a donc une table user qui contient une colonne login. Il est évident que fonctionnelemnt le login doit être unique mais est ce une bonne clé primaire ?
Non car la clé primaire va être utilisée dans d'autres tables (par exemple la table des messages), donc lors de la modification du login, il faudra faire de lourds UPDATE des tables référençant ce login.
C'est pourquoi on utilise une clé technique (généralement un id numérique autoincrémenté) comme clé primaire, c'est la clé subrogée.
Dès lors la modification du login n'est qu'un simple update d'une seule ligne de la table user.
Il est généralement préférable de ne pas utiliser les colonnes fonctionnelles comme clés primaires, ces dernières pouvant être amenées à changer.
Dès lors qu'on utilise une clé primaire subrogée, on doit alors valider le fonctionnel par une contrainte d'unicité.
Super les réponses .
En gros l'index primary est utile pour créer des références entre les tables afin de pouvoir utiliser un logiciel.
Merci !
La clé primaire est ce qui permet de différentier chaque ligne d'une table. La contrainte d'unicité permet de s'assurer qu'il n'y aura pas deux fois la même valeur dans un ensemble de colonnes définies par la contrainte d'unicité.
Un cas intéressant est celui des cardinalités (1,1 - 0,1) ou (0,1 - 0,1).
Règle de gestion :
Un projet est dirigé par une seule personne et une personne peut diriger un seul projet.
MCD :
personne -0,1----diriger----1,1- projet
Tables :
te_personne_prs (prs_id, ...)
te_projet_prj (prj_id, prj_id_chef...)
=> On placera une contrainte d'unicité sur prj_id_chef pour assurer qu'une personne ne puisse pas diriger deux projets.
Il s'agit bien sûr d'un exemple fictif car dans la réalité on dira qu'une personne peut diriger un seul projet à la fois, ce qui entraînera une contrainte CHECk ou un trigger pour vérifier que le chef du projet que l'on insère dans la table des projets ne dirige pas déjà un projet non terminé.
Dans le cas des cardinalités (0,1 - 0,1), l'un des identifiants de la table associative sera la clé primaire et l'autre sera muni d'une contrainte d'unicité.
Vous confondes beaucoup de choses...
- Un index est un objet physique qui est la conséquence du désire d’obtenir de meileurs performances et n'a rien à voir avec les notions de PRIMARY KEY ou de UNIQUE qui sont des contraintes SQL.
- PRIMARY KEY est une contrainte qui permet de définir une collection de colonnes de la table dont les valeurs identifie à coup sur une seule ligne de la table. Et il ne peut y avoir qu'une seule contraintes PRIMARY KEY par table.
- UNIQUE est une contrainte qui permet de se substituer à la contrainte PRIMARY KEY, mais qui accepte que certaines valeurs ne soient pas connues (présence de NULLs). Il peut y en avoir plusieurs et on les appellent génériquement des clef alternatives...
Esemple :
Dans cette table il existe une seule primary key basée sur un auto incrément et deux contraintes d'unicité (MATRICULE et NUM_SECU).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE T_EMPLOYE ( EMP_ID AUTOINCRÉMENT NOT NULL PRIMARY KEY, EMP_NOM CHAR(32) NOT NULL, EMP_PRENOM VARCHAR(25), EMP_MATRICULE CHAR(4) UNIQUE, EMP_NUM_SECU CHAR(13) UNIQUE );
Si vous aviez mis la clef primaire sur NUM_SECU, alors il vous aurait été impossible de saisir un employé qui a oublié sa carte de sécu !!!
En règle générale, la clef primaire sert de clef technique (elle servira à faire les jointures et l'utilisateur n'a pas à la connaître) et les contraintes d'unicité sui jouent un rôle de clef sémantique pour la recherche de données à travers l'application (l'employé donnera son matricule ou son n° de sécu pour toute recherche dans la base).
Comme vous le voyez nous n'avons pas parlé d'index, car cela ne sert qu'aux aspects physique de temps de réponse. mais il faut savoir que derrière les contraintes PRIMARY KEY et UNIQUE, la plupart des SGBD relationnels posent des index pour vérifier plus vite l’unicité.
A +
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager