IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Différence entre un index Unique et un index primary


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Différence entre un index Unique et un index primary
    * 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 *

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    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.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    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é.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2013
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    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 !

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    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é.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par hukiro Voir le message
    * 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 *
    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 :
    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
    );
    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).
    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 +

Discussions similaires

  1. La différence entre une clé étrangère et un index
    Par youcef_allaoua dans le forum ALM
    Réponses: 1
    Dernier message: 19/08/2014, 15h05
  2. Réponses: 2
    Dernier message: 25/11/2010, 11h52
  3. Différence entre partitionnement et index
    Par audklie2 dans le forum Optimisations
    Réponses: 14
    Dernier message: 12/05/2010, 00h35
  4. La différence entre un Index et un fichier LF ?
    Par JauB dans le forum AS/400
    Réponses: 12
    Dernier message: 04/02/2010, 15h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo