2016-07-05 9 views
5

Ich habe eine Tabelle wie folgt aus:Wann sollte ich eine Spalte als Primärschlüssel markieren?

// cookies 
+----+---------+-------------------+------------+ 
| id | user_id |  token  | expire | 
+----+---------+-------------------+------------+ 
| 1 | 32423 | dki3j4rf9u3e40... | 1467586386 | 
| 2 | 65734 | erhj5473fv34gv... | 1467586521 | 
| 3 | 21432 | 8u34ijf34t43gf... | 1467586640 | 
+----+---------+-------------------+------------+ 

Ein paar Tage, die ich darüber nachdenken. Ich denke, ich brauche keine id Spalte. Derzeit id Spalte ist PK und ich habe auch einen eindeutigen Index auf token Spalte, um es einzigartig und schnell für die Suche zu machen.

Jetzt möchte ich wissen, kann ich id Spalte aus der Tabelle entfernen und token Spalte als PK machen? Ist das normal?

Um ehrlich zu sein, habe ich nie erstellt eine Tabelle ohne id Spalte (es ist immer die PK) so weit, so dass seltsam für mich token Spalte als PK zu wählen.

+0

Ihre aktuelle Struktur ist in Ordnung. –

+0

@GordonLinoff In meiner aktuellen Struktur 'id' ist die PK. ist das gut? – stack

+7

Google "Natural Key vs Ersatzschlüssel". Es gibt Vorteile/Nachteile für beide und was für Ihr System besser ist, hängt von Ihren spezifischen Anforderungen ab. –

Antwort

2

In dem Maße, token ist eine breite varchar, würde ich mit der AI Int PK, die Sie bereits haben. Joins werden schneller sein. Dasselbe gilt für Einsätze. Updates würden wahrscheinlich die gleiche Geschwindigkeit haben, wie, warum sollte diese Spalte aktualisiert werden, wodurch Indexbaumänderungen erzwungen werden. Für die untergeordneten Beziehungen sind Einfügungen jedoch schneller, da der breite varchar nicht in einen Indexbaum gezogen wird.

Es kommt auf Präferenz und Lesbarkeit zu. Was die Lesbarkeit betrifft, so wenig davon mit solch einem Varchar. Es ist nicht so, als wäre es eine Kategorie wie "Schuhe". Es ist eine elende, unlesbare, nichtmenschliche Form. Aus Gründen der Lesbarkeit gibt es wenig Argumente dafür, die token als PK zu haben. Zugegeben, manchmal kann es ein wenig nützlich sein.

Zusätzliche Komposite (mehrspaltigen Indizes)

Wenn Sie die PK der Wahl mit anderen Kolleginnen und Spalten in Composites beginnen Kombinieren (zusätzliche Indizes Sie können wählen), die dünne int wird sehr offensichtlich, sei die beste Wahl. Auch mit mäßig großen Datensätzen.

1

Im Allgemeinen bevorzugen wir oft, dass die ID der Tabelle der Primärschlüssel ist, aber was primär sagt, dass es nicht null sein sollte und die Restaufzeichnungen der Tabelle (Spalten) eindeutig identifizieren sollte, wenn Sie also machen wollen Das Token als Primärschlüssel können Sie leicht machen, aber stellen Sie sicher, dass es (Id) nicht von den anderen Tabellen abhängen sollte. Wenn Sie also einen Datensatz abrufen müssen, können Sie ihn einfach mit dem Token abrufen.