Im relationalen Modell kann jede Spalte oder jeder Satz von Spalten, die garantiert sowohl vorhanden als auch eindeutig in der Tabelle sind, als Kandidatenschlüssel für die Tabelle bezeichnet werden. "Vorhanden" bedeutet "NOT NULL". Beim Datenbankdesign ist es üblich, einen der Kandidatenschlüssel als Primärschlüssel zu bezeichnen und Verweise auf den Primärschlüssel zu verwenden, um sich auf die gesamte Zeile oder auf den Gegenstand zu beziehen, den die Zeile beschreibt.
In SQL bedeutet eine PRIMARY KEY-Beschränkung eine NOT NULL-Beschränkung für jede Primärschlüsselspalte und eine UNIQUE-Beschränkung für alle Primärschlüsselspalten zusammen. In der Praxis stellen sich viele Primärschlüssel als einzelne Spalten heraus.
Bei den meisten DBMS-Produkten führt eine PRIMARY KEY-Beschränkung auch dazu, dass automatisch ein Index für die Primärschlüsselspalten erstellt wird. Dies beschleunigt die Überprüfungsaktivität des Systems, wenn neue Einträge für den Primärschlüssel gemacht werden, um sicherzustellen, dass der neue Wert nicht einen bestehenden Wert dupliziert. Außerdem werden Suchvorgänge auf der Grundlage des Primärschlüsselwerts und Verknüpfungen zwischen dem Primärschlüssel und einem Fremdschlüssel, der darauf verweist, beschleunigt. Wie stark die Beschleunigung ausfällt, hängt davon ab, wie der Abfrageoptimierer arbeitet.
Ursprünglich suchten die Entwickler relationaler Datenbanken nach natürlichen Schlüsseln in den gegebenen Daten. In den letzten Jahren geht die Tendenz dahin, immer eine Spalte namens ID, eine ganze Zahl, als erste Spalte und als Primärschlüssel jeder Tabelle anzulegen. Die automatische Erstellungsfunktion des DBMS wird verwendet, um sicherzustellen, dass dieser Schlüssel eindeutig ist. Diese Tendenz ist in den "Oslo Design Standards" dokumentiert. Es handelt sich nicht unbedingt um ein relationales Design, aber es erfüllt einige unmittelbare Bedürfnisse derjenigen, die es befolgen. Ich empfehle diese Praxis nicht, aber ich erkenne an, dass sie die vorherrschende Praxis ist.
Ein Index ist eine Datenstruktur, die einen schnellen Zugriff auf einige Zeilen einer Tabelle ermöglicht, basierend auf einer Beschreibung der Spalten der Tabelle, die indiziert werden. Der Index besteht aus Kopien bestimmter Tabellenspalten, den sogenannten Indexschlüsseln, die mit Zeigern auf die Tabellenzeilen durchsetzt sind. Die Zeiger sind im Allgemeinen für die DBMS-Benutzer nicht sichtbar. Indizes arbeiten mit dem Abfrageoptimierer zusammen. Der Benutzer gibt in SQL an, welche Daten gesucht werden, und der Optimierer entwickelt Indexstrategien und andere Strategien, um das Gesuchte in eine Strategie zum Auffinden zu übersetzen. Es gibt eine Art Organisationsprinzip, wie z. B. Sortierung oder Hashing, das es ermöglicht, einen Index für schnelle Suchvorgänge und bestimmte andere Zwecke zu verwenden. Dies alles ist DBMS-intern, sobald der Datenbankersteller den Index erstellt oder den Primärschlüssel deklariert hat.
Es können Indizes erstellt werden, die nichts mit dem Primärschlüssel zu tun haben. Ein Primärschlüssel kann auch ohne einen Index existieren, obwohl dies im Allgemeinen eine sehr schlechte Idee ist.