Unterschied, Primär- und Superschlüssel in Datenbanken (habe das Prinzip "Superschlüssel" leider nich nicht verstanden)?

7 Antworten

Den Begriff Superschlüssel kenne ich nicht (es ist sicher kein gebräuchlicher Begriff, unter dem jeder dasselbe versteht, oder der im SQL Standard definiert wäre).

Denkt man aber daran, dass es in vielen Tabellen einen nur aus einer laufenden Nummer bestehenden Schlüssel gibt, dessen Wert beim Anlegen eines neuen Datensatzes vom DBMS per Autoincrement-Funktion automatisch erzeugt wird, so könnte man sich vorstellen, dass der hierfür notwendige tabellenspezifische Zähler durch einen globalen, nicht mehr tabellenspezifischen ersetzt sein könnte mit dem Effekt, dass der Schlüsselwert dann nicht nur lokal zur Tabelle eindeutig ist, sondern eindeutig wird über alle Tabellen hinweg. Für Anwendungen hätte das einige Vorteile.

Dies dann als Superschlüssel zu bezeichnen, würde -- so denke ich -- Sinn machen.

Dass man Schlüssel dieser Art NICHT hat, liegt wohl nur daran, dass dann die maximale Zahl aller Datensätze, die über die Zeit hinweg entstehen, allzu sehr begrenzt wäre.

Die Primärschlüssel einer Datenbank (oder wie auch immer jemand die Dinger bezeichnen will) werden aber in der Praxis nicht dadurch festgelegt, dass man die konkret vorhandenen Daten mühevoll analysiert und sich dann die best passende Minimalkombination von Attributen sucht. Das wird man schon allein deshalb nicht tun, weil es oft nicht auszuschließen ist, dass durch neu hinzukommende Datensätze - eventuell unter sich weiterentwickelnden externen Bedingungen der DB-Anwendung - nicht doch mal der Fall auftritt, dass die ehemals eindeutigen Attribute auf einmal nicht mehr eindeutig werden können.

Extrem viel leichter und restlos fehlerfrei ist es, einfach ein extra (numerisches) Attribut für diesen Identifikator vorzusehen, diesen so groß anzulegen, dass er mit viel Luft alle über die zu erwartende Lebenszeit der DB absehbar eintreffenden Datensätze durchnummerieren kann und dem dann die Eigenschaft "autoincrement" zu verpassen. Dieses Identifikator-Attribut ist per se zwingend "minimal", stellt zwar eine möglicherweise redundante, aber darin auch praktisch irrelevante (eben weil minimale) Erweiterung der Datenmenge dar und kann überall nach gleichem "Schema F" verwendet werden.

In meiner Datenbank heißen diese Dinger eindeutiger Index. Wozu man da einen neuen Begriff in die Welt setzen muss, kann ich nicht nachvollziehen. Vielleicht steckt auch nur eine einfache Umschreibung zur besseren Verständlichmachung dahinter.

Der eindeutige Index ist praktisch ein weiterer Primärschlüssel. Er kann jedenfalls genauso benutzt werden. Die einzigen Ausnahmen: Kann nicht als Fremdschlüssel benutzt werden (braucht es auch nicht) und es gibt keine automatische Nummerierungsoption.

Superschlüssel hab ich bei uns im Skript und im Internet gefunden. Also erfunden ist es anscheinend nicht. 

Habs mittlerweile so verstanden: Superschlüssel ist eine Attributmenge die jedes Tupel in einer Relation eindeutig identifizieren kann, sie ist aber nicht minimal. Ich kann also auf Attribute in dieser Menge verzichten und die identifizierende Eigenschaft bleibt bestehen. Schlüsselkandidaten sind Superschlüssel die aber minimal sind, hier kann ich auf kein Attribut verzichten ohne dass meine Eigenschaft verloren geht alle Tupel eindeutig zu identifizieren. Der Primärschlüssel ist ein Schlüssel der aus den Schlüsselkandidaten ausgewählt wurde.

Vielleicht hilft das ja jemanden weiter in Zukunft ;)

Superschlüssel sagt mir nichts.

Meinst du evtl. Primär -und Fremdschlüssel?