Er is een gebrek aan precisie in de definities van primaire en secundaire indices.
Twee populaire universitaire teksten als referentie gebruiken:
Fundamentals van databasesystemen, Elmasri en Navathe definieert ze als:
Databasesystemen:het complete boek, Garcia-Molina et. al definieert ze als:
Enkele eigenschappen die gelden voor beide bovenstaande definities:
- primaire sleutels kunnen primaire indices zijn
- er kan maximaal 1 primaire index per tabel zijn
- primaire indices bepalen op unieke wijze waar een record in fysieke opslag wordt bewaard.
- Alle andere indices zijn geclassificeerd als secundair.
Als de plaatsing van records in het gegevensbestand echter door geen enkel veld wordt bepaald, kan er geen primaire index worden gemaakt.
Dus voor gesorteerde bestanden is het logisch om te praten over de primaire index (dat zou de lijst met velden zijn waarop de sortering is gebaseerd). Ik kan geen andere voorbeelden vinden van fysieke bestandsstructuren waar een primaire index kan worden geconstrueerd.
Postgresql gebruikt een heapstructuur voor de fysieke opslag van records. Hoopjes worden niet gesorteerd (woordspeling:ze zijn gesorteerd). Daarom worden zelfs de primaire sleutels geïmplementeerd met secundaire indices, en als zodanig zijn alle indices in Postgresql secundair.
Andere RDBMS-systemen doen opslagformaten implementeren die primaire indices ondersteunen:
- Mysql's InnoDB noemt dit geclusterde index
- MSSQL verwijst ook naar de primaire index als een geclusterde index
- Oracle noemt dit index-georganiseerde tabellen
De taal in de Postgres-documentatie is onnauwkeurig.
Dit is waar.
Dit is niet de reden waarom alle indices secundair zijn in Postgresql. Primaire indices kunnen ook apart van het hoofdgegevensgebied van de tabel worden opgeslagen.