2016-12-09 3 views
1

Ich erstelle eine neue Datenbank und habe ein Dilemma: Ich habe eine Autoren-Tabelle. Meine Anforderungen sind, dass es die Spalten firstName und lastName enthalten sollte, und ich sollte zwei Autoren nicht erlauben, die den gleichen firstName und lastName haben.SQL: Zeichenfolge PK (möglicherweise Composite) oder Auto-Nummer künstliche PK mit eindeutigen Einschränkung?

Meine erste Idee war, firstName und lastName composite pk zu machen, und das war's!

Aber ich werde diese Tabelle an andere Tabellen so binden, um mein Leben einfacher zu machen, obwohl ich eine int Auto_increment PK verwenden und eine zusammengesetzte UC von firstName und lasteName machen.

Meine Frage ist allgemein: Sagen wir, ich habe eine Personen Tabelle und ich kann die SSN als PK verwenden. Wenn ich diese Tabelle mit n Tabellen verknüpfe, die den SSN-Wert in den Kindtabellen duplizieren, kann mehr Speicher verbraucht werden, als mit einer int auto_increment-PK und UC der SSN-Spalte zu machen?

Welcher Ansatz ist besser und wann was zu verwenden?

Mit freundlichen Grüßen

Antwort

0

Der beste Ansatz ist Primarykey vom Rest der Tabelle getrennt zu halten, die Business-Logik. Außerdem ist es aufgrund der Indizierung viel schneller, eine separate PK zu haben, es ist so viel leistungsfähiger, einfacher zu warten und Tabellen miteinander zu verknüpfen, es stellt auch eine schnellere Ausführung von Anweisungen auf der Tabelle sicher.

Ihre beste Wette wäre, für eine PK-Spalte wie id dann eine separate UNIQUE Einschränkung für den firstName-lastName zu gehen.

+0

Aber in der SSN Beispiel? Ich meine, wenn ich nur einen einzigen Comic habe, kann ich SSN die PK richtig machen? – adragomir

+0

SSN ist Sozialversicherungsnummer, richtig? –

+1

Wenn dies der Fall ist, ist es immer noch besser, eine separate ID-Spalte zu haben, auch wenn der SSN eindeutig ist und keine Duplikate enthalten kann. Ich weiß, das ist es, was sie mir in der Schule beigebracht haben, eine einzigartige Kolumne wie SSN als PK zu benutzen, aber es ist nicht gut für die Performance. –