Il y a un certain manque de précision dans les définitions des indices primaires et secondaires.
En utilisant deux textes universitaires populaires comme référence :
Principes fondamentaux des systèmes de base de données, Elmasri et Navathe les définit comme :
Systèmes de bases de données :le livre complet, Garcia-Molina et. tous les définit comme :
Certaines propriétés qui sont vraies pour l'une ou l'autre des définitions ci-dessus :
- les clés primaires peuvent être des indices primaires
- il peut y avoir au plus 1 index primaire par table
- les indices primaires déterminent de manière unique où un enregistrement est conservé dans le stockage physique.
- Tous les autres indices sont classés comme secondaires.
Cependant, si le placement des enregistrements dans le fichier de données n'est déterminé par aucun champ, un index primaire ne peut pas être construit.
Ainsi, pour les fichiers triés, il est logique de parler de l'index primaire (qui serait la liste des champs sur lesquels le tri est basé). Je ne trouve pas d'autres exemples de structures de fichiers physiques où un index primaire peut être construit.
Postgresql utilise une structure de tas pour le stockage physique des enregistrements. Les tas ne sont pas triés (alerte au jeu de mots :ils sont en quelque sorte triés). Par conséquent, même les clés primaires sont implémentées à l'aide d'index secondaires, et en tant que tels, tous les index dans Postgresql sont secondaires.
Autres systèmes RDBMS faire implémentez des formats de stockage qui prennent en charge les index primaires :
- InnoDB de Mysql appelle cet index cluster
- MSSQL fait également référence à l'index primaire en tant que index cluster
- Oracle appelle cela tables organisées en index
Le langage de la documentation Postgres est imprécis.
C'est vrai.
Ce n'est pas la raison pour laquelle tous les indices sont secondaires dans Postgresql. Les indices primaires peuvent également être stockés séparément de la zone de données principale de la table.