[mysql] une clé primaire est elle par défaut un index ?

une clé primaire est elle par défaut un index ? [mysql] - SQL/NoSQL - Programmation

Marsh Posté le 30-06-2005 à 14:47:32    

bonjour,
 
je fais mes schémas de tables avec le très bon logiciel libre DBDesigner.
 
Je me pose une question, j'ai une table qui fait le lien entre 3 tables diverses.
La clé primaire de cette table de liaison est la concaténation des 3 autres.
Je définie aussi un index sur chacun des 3 champs.
Mes questions :
- faut il définir un index sur chacun des 3 champs (donc 3 index) ? alors que ces 3 champs sont uen clé primaire ?
- faut il créer un index sur l'ensemble des 3 champs ? (donc 1 index)  alors que ces 3 champs sont uen clé primaire ?
 
donc faut il mieux faire
 

Code :
  1. CREATE TABLE users_link_permissions (
  2.   site_idsite INTEGER UNSIGNED NOT NULL,
  3.   permissions_idpermissions INTEGER UNSIGNED NOT NULL,
  4.   users_iduser INTEGER UNSIGNED NOT NULL,
  5.   PRIMARY KEY(site_idsite, permissions_idpermissions, users_iduser),
  6. );


 
ou

Code :
  1. CREATE TABLE users_link_permissions (
  2.   site_idsite INTEGER UNSIGNED NOT NULL,
  3.   permissions_idpermissions INTEGER UNSIGNED NOT NULL,
  4.   users_iduser INTEGER UNSIGNED NOT NULL,
  5.   PRIMARY KEY(site_idsite, permissions_idpermissions, users_iduser),
  6.   INDEX users_link_permissions_FKIndex1(users_iduser),
  7.   INDEX users_link_permissions_FKIndex2(permissions_idpermissions),
  8.   INDEX users_link_permissions_FKIndex3(site_idsite),
  9. );


 
ou

Code :
  1. CREATE TABLE users_link_permissions (
  2.   site_idsite INTEGER UNSIGNED NOT NULL,
  3.   permissions_idpermissions INTEGER UNSIGNED NOT NULL,
  4.   users_iduser INTEGER UNSIGNED NOT NULL,
  5.   PRIMARY KEY(site_idsite, permissions_idpermissions, users_iduser),
  6.   INDEX users_link_permissions_FKIndex1(users_iduser),
  7.   INDEX users_link_permissions_FKIndex2(permissions_idpermissions),
  8.   INDEX users_link_permissions_FKIndex3(site_idsite),
  9.   INDEX PRIMARY(site_idsite, permissions_idpermissions, users_iduser)
  10. );


 
Merci d'avance je suis un peu perdu
Matthieu


Message édité par matthieu_phpmv le 30-06-2005 à 14:48:06

---------------
développeur de phpMyVisites mesure d'audience de sites Internet
Reply

Marsh Posté le 30-06-2005 à 14:47:32   

Reply

Marsh Posté le 30-06-2005 à 23:37:14    

Oui, une PK est par défaut un index unique, généralement arrangé en cluster (l'ordre des données dans la table sont dans le même ordre que dans l'index).
 
Donc tu conserves la première solution ;)

Reply

Marsh Posté le 01-07-2005 à 08:43:38    

Ok mais même sous MySQL ?
 
Car le logiciel  DBDesigner me donne le code avec les index crées, comme si il voulait créer les index en plus des clés primaires.
Est ce dans la documentation officielle ou la norme ansi sql cette propriété ?
Merci !:)


---------------
développeur de phpMyVisites mesure d'audience de sites Internet
Reply

Marsh Posté le 01-07-2005 à 11:23:03    

Je pense que MySQl fait aussi un UIX sur une PK automatiquement.
 
Ce n'est pas dans la norme (uniquement une contrainte unique), mais la plupart des SGBD font directement un UIX.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed