Има известна липса на точност в дефинициите на първични и вторични индекси.
Използване на два популярни университетски текста като справка:
Основи на системите за бази данни, Elmasri &Navathe ги определя като:
Системи за бази данни:Пълната книга, Garcia-Molina et. ал ги определя като:
Някои свойства, които са валидни за двете дефиниции по-горе:
- първичните ключове могат да бъдат първични индекси
- може да има най-много 1 първичен индекс на таблица
- първичните индекси определят еднозначно къде се съхранява запис във физическото хранилище.
- Всички други индекси се класифицират като вторични.
Въпреки това, ако разположението на записите във файла с данни не се определя от нито едно поле, тогава първичен индекс не може да бъде конструиран.
По този начин за сортирани файлове има смисъл да се говори за първичен индекс (който би бил списъкът с полета, на които се основава сортирането). Не мога да намеря други примери за физически файлови структури, където може да бъде конструиран първичен индекс.
Postgresql използва структура на купчина за физическо съхранение на записи. Купчините не са сортирани (предупреждение за игра на думи:те са сортирани). Следователно дори първичните ключове се реализират с помощта на вторични индекси и като такива всички индекси в Postgresql са вторични.
Други RDBMS системи правят внедрите формати за съхранение, които поддържат първични индекси:
- InnoDB на Mysql нарича този клъстърен индекс
- MSSQL също се отнася до основния индекс като групиран индекс
- Oracle нарича това организирани по индекс таблици
Езикът в документацията на Postgres е неточен.
Това е вярно.
Това не е причината всички индекси да са вторични в Postgresql. Първичните индекси също могат да се съхраняват отделно от основната област с данни на таблицата.