- Was sind Schlüssel?
- Einfache Tasten
- Verkettete oder zusammengesetzte Schlüssel
- Primärschlüssel
- Nummerierung und automatisches Inkrementieren
- Kann eine Tabelle mehrere Primärschlüssel enthalten?
Während viele Entwickler und Datenbankadministratoren möglicherweise mit primary keys
arbeiten Jeden Tag ist es ein faszinierendes Thema, sich zu fragen:„Was genau ist ein primary key
und kann (oder sollte) eine Datenbanktabelle mehrere primary key
enthalten gleichzeitig?“
Im Folgenden werden wir diese Fragen genauer untersuchen und versuchen, zu einem vernünftigen und allgemein vereinbarten Konsens innerhalb der Entwicklergemeinschaft zu kommen.
Was sind Schlüssel?
Um zu verstehen, was ein primary key
ist in einer Datenbanktabelle befindet, müssen wir zuerst etwas über non-primary keys
verstehen . Ein key
in einer Tabelle ist einfach ein Attribut, das verwendet wird, um diese Informationen zu identifizieren und darauf zuzugreifen. Eine Tabelle kann und wird oft mehrere Schlüssel haben, wie zum Beispiel in der Tabelle Users
beide email
und username
könnten als Schlüssel betrachtet werden.
Abhängig von dem Entwickler oder Administrator, mit dem Sie sprechen, hören Sie möglicherweise von einer Vielzahl von Schlüsseltypen und ihren Definitionen, daher behandeln wir unten nur ein paar verschiedene Beispiele und eine grundlegende Definition von jedem.
Einfache Tasten
Ein simple key
ist nur ein Schlüssel, der nur ein einziges Attribut in der Tabelle verwendet. Sofern wir dem Schlüssel oder der Tabelle keine weiteren Einschränkungen auferlegen, dann der username
Attribut im obigen Beispiel ist ein simple key
.
Verkettete oder zusammengesetzte Schlüssel
Noch einen Schritt weiter von simple keys
werden concatenated
oder compound
Schlüssel. Wie der Name schon sagt, ein concatenated key
ist ein Zusammenfügen mehrerer single keys
. Beispielsweise kann das System den last_name
automatisch kombinieren und year_of_birth
single keys
in einen concatenated key
, etwa so:smith1980
.
Primärschlüssel
Ein [primary key](https://en.wikipedia.org/wiki/Unique_key)
ist ein Schlüssel, der als Prinzipal (oder primär) ausgewählt wurde ) repräsentatives Attribut für diese Datenzeile. Der primary key
ist einzigartig und dieses Attribut wird dann in der gesamten Datenbank verwendet und wird aufgerufen und als repräsentatives Attribut für die betreffenden Daten an andere Tabellen weitergegeben.
In der Praxis der primary key
Attribut ist auch als NOT NULL
markiert in den meisten Datenbanken, was bedeutet, dass das Attribut immer einen Wert für den in die Tabelle einzufügenden Datensatz enthalten muss.
Als Beispiel entweder die email
oder username
simple keys
könnte die Bezeichnung des primary key
zugewiesen werden , aber in der Regel empfiehlt es sich, den primary key
festzulegen zu einem Attribut, das weder durch die Geschäftslogik noch durch den Einzelnen geändert wird (oder werden konnte). Stellen Sie sich zum Beispiel einen User
vor erhält eine neue E-Mail-Adresse, die dann alle bisherigen primary key
bewirkt Zuordnungen, die mit der alten E-Mail-Adresse vorgenommen wurden, werden bei Verwendung der neuen E-Mail-Adresse ungültig.
Aus diesem Grund (unter anderem) sind die meisten primary key
Verwenden Sie eine Zahl oder eine eindeutige Zeichenfolge, z. B. [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier)
.
Nummerierung und automatisches Incrementing
Es sei auch kurz erwähnt, dass viele Datenbanksysteme so eingerichtet sind, dass jede Tabelle einen primary key
hat das ist sowohl numerisch als auch automatisch inkrementiert. Das bedeutet einfach, dass die Datenbank-Engine automatisch jedem neuen Datensatz in dieser Tabelle einen eindeutigen primary key
zuweist Wert, der inkrementell größer ist als alle vorherigen Werte. Die meisten Entwickler sind sich jedoch einig, dass diese Vorgehensweise veraltet ist und unnötige Sicherheitslücken für das System aufdeckt, wenn sie für einige verwendet wird Tabellen, die bestimmte Daten darstellen.
Stellen Sie sich zum Beispiel alle User
vor Datensätzen wird ein automatisch inkrementierter primary key
zugewiesen Wert, bekannt als id
Attribut. Wenn eine böswillige Person entdeckt, dass die id
Attribut eines bestimmten Benutzers (z. B. John Smith) ist der Wert 1500
, dies gibt bereits ein paar Informationen preis. Erstens zeigt es an, dass es wahrscheinlich mindestens 1499 andere Benutzer im System gibt oder zu irgendeinem Zeitpunkt gab. Es bedeutet auch, dass auf die Benutzerseite von John Smith über einen URL- oder API-Aufruf zugegriffen werden kann, der diese id
enthält Wert von 1500
, dann besteht eine gute Chance, den Wert einfach in eine andere Zahl zu ändern, z. B. 1499
oder 1501
, zeigt die Seite eines anderen Benutzers an, der möglicherweise nicht möchte, dass dieser Besucher auf seine Seite zugreift. Auf diese Weise können Aufzeichnungen durch einfaches Raten abgefragt werden die id
Werte auf einer Massenskala.
Dies sind offensichtlich sehr einfache Beispiele, aber aus diesen Gründen verwenden die meisten modernen Datenbanken einen zufälligen und eindeutigen primary key
Attributwert wie eine UUID
bei der Arbeit mit sensiblen Daten.
Kann eine Tabelle mehrere Primärschlüssel enthalten?
Die kurze Antwort ist nein , darf eine Tabelle nicht mehrere primary key
enthalten , da dies gegen die Grundprinzipien des relationalen Datenbankdesigns verstößt (siehe:[database normalisation](https://en.wikipedia.org/wiki/Database_normalisation)
). und [Third normal form](https://en.wikipedia.org/wiki/Third_normal_form)
).
Es ist Es ist möglich, dass eine Tabelle mehrere candidate keys
hat , die sich effektiv ähnlich wie ein primary key
verhalten darin ein candidate keys
ist eindeutig, NOT NULL
, und ist eine singuläre Darstellung dieses Tabellendatensatzes.
Allerdings, wenn es darum geht, einen auszuwählen Attribut wird als primary key
zugewiesen für die Tabelle kommt die Auswahl aus der Liste aller potentiellen candidate keys
(daher der Name, sie sind Kandidaten dafür, ein primary key
zu werden ). Letztendlich nur ein candidate keys
wird als das beste repräsentative Attribut für diesen Datensatz ausgewählt, um in dieser Tabelle als primary key
verwendet zu werden und an anderer Stelle in der Datenbank von anderen Tabellen über ihre jeweiligen foreign keys
referenziert werden .