(Auszug aus Wikipedia)

Primärschlüssel

Um die Tupel (=Zeilen) in einer Relation (=Tabelle) eindeutig identifizieren zu können, wird für die Relation ein Primärschlüssel angegeben – einer der Schlüsselkandidaten. Der Primärschlüssel wird üblicherweise so ausgewählt, dass er möglichst klein ist, das heißt möglichst wenige Attribute umfasst bzw. einen möglichst simplen Datentyp hat. Er sollte zeitlich stabil sein, seine Werte sollten sich also während des gesamten Lebenszyklus der betroffenen Tabellen nicht ändern, da dies auch Änderungen an den zugehörigen Fremdschlüsselwerten mit sich zöge (was durch sogenannte Kaskadierung zwar prinzipiell möglich, aber oft aufwändig ist).

Darüber hinaus muss der ausgewählte Primärschlüssel tatsächlich die eindeutige Identifizierbarkeit der realen Objekte erlauben, die durch die Tupel der Relation repräsentiert werden. Wählt man beispielsweise die Kombination {Name, Geburtstag} als Primärschlüssel aus, so legt man damit auch fest, dass es keine zwei gleichnamigen Personen geben darf, die am gleichen Tag Geburtstag haben (Eindeutigkeit, uniqueness). Durch die Einführung von Surrogatschlüsseln (künstliche Schlüssel, z. B. eine Laufnummer) wird dieses Problem in jedem Fall vermieden.
Besteht ein Primärschlüssel aus mehreren Attributen, spricht man auch von einem kombinierten (auch: zusammengesetzten) Primärschlüssel oder einem Verbundschlüssel.

Sekundärschlüssel sind Attributgruppen, die häufig zur Beschreibung einzelner und mehrerer Tupel benutzt werden (Suchbegriff). So kann etwa die Postleitzahl in einer Adresstabelle als Sekundärschlüssel infrage kommen.

In der Datenbank werden Sekundärschlüssel durch Sekundärindizes (umgangssprachlich einfach nur „Indizes“) implementiert. Ein Sekundärindex ist eine optionale, zusätzliche Suchstruktur einer Datenbank, die Tupel schneller auffindbar macht, indem das Durchsuchen des gesamten Datenbestandes vermieden wird (ähnlich dem Index eines Buches, durch den Begriffe gezielt aufgefunden werden können).

Sekundärschlüssel müssen nicht notwendigerweise eindeutig sein. Aber auch Fremdschlüssel (ebenfalls nicht zwingend eindeutig) sind Sekundärschlüssel, weil sie dazu dienen, Datensätze zu beschreiben (ordnen, gruppieren etc.).
 

Fremdschlüssel

Ein Primärschlüssel einer Relation kann Fremdschlüssel einer anderen werden.

Ein Fremdschlüssel ist ein Attribut oder eine Attributkombination einer Relation, welches auf einen Primärschlüssel (bzw. Schlüsselkandidaten) einer anderen oder der gleichen Relation verweist.

Er dient als Verweis zwischen zwei Relationen, d. h., er zeigt an, welche Zeilen der Relationen inhaltlich miteinander in Verbindung stehen.