5 Stimmen

Die beste Wahl für den Primärschlüssel der Tabelle Person

Was ist Ihre Wahl für Primärschlüssel in Tabellen, die eine Person darstellen (wie Kunde, Benutzer, Kunde, Mitarbeiter usw.)? Meine erste Wahl wäre eine Sozialversicherungsnummer (SSN). Von der Verwendung der SSN wird jedoch aufgrund von Datenschutzbedenken und verschiedenen Vorschriften abgeraten. Die SSN kann sich im Laufe des Lebens einer Person ändern, was ein weiterer Grund dagegen ist.

Ich vermute, dass eine der Funktionen eines gut gewählten natürlichen Primärschlüssels darin besteht, Duplikate zu vermeiden. Ich möchte nicht, dass eine Person zweimal in der Datenbank registriert wird. Ein Surrogat oder ein generierter Primärschlüssel hilft nicht dabei, doppelte Einträge zu vermeiden. Wie kann ich dies am besten angehen?

Was ist der beste Weg, um Eindeutigkeit in Ihrer Anwendung für Person Entität zu garantieren und kann dies auf Datenbankebene mit Primärschlüssel oder Eindeutigkeitsbeschränkung behandelt werden?

1voto

duffymo Punkte 298898

Ich würde einen Ersatzschlüssel empfehlen. Fügen Sie alle Indizes hinzu, die Sie für andere Kandidatenschlüssel benötigen, aber halten Sie die Geschäftslogik aus dem Schlüssel heraus, das ist meine Empfehlung.

1voto

Walter Mitty Punkte 17177

Ich bevorzuge natürliche Schlüssel, wenn man ihnen trauen kann.

Wenn Sie nicht gerade eine Bank oder etwas Ähnliches leiten, gibt es für Ihre Kunden und Nutzer keinen Grund, Ihnen eine gültige SSN mitzuteilen oder sogar unbedingt eine zu haben. Daher sind Sie aus geschäftlichen Gründen gezwungen, der SSN in dem von Ihnen geschilderten Fall zu misstrauen. Eine ähnliche Argumentation würde für jeden natürlichen Schlüssel zu "Personen" gelten.

Es bleibt Ihnen nichts anderes übrig, als einen künstlichen (Read "surrogate") Schlüssel zu vergeben. Es könnte genauso gut eine ganze Zahl sein. Stellen Sie sicher, dass er groß genug ist, damit Sie ihn nicht bald erweitern müssen.

0voto

Hassan Syed Punkte 19607

Um @Mark und @Pascal zu ergänzen (autoincrement integers are your best bet) -- SSN's sind nützlich und sollten korrekt modelliert werden. Sicherheitsbedenken sind Teil der Anwendungslogik. Sie können sie in einer separaten Tabelle normalisieren, und Sie können sie eindeutig machen, indem Sie ein Feld für das Ausgabedatum bereitstellen.

P.S.: Für diejenigen, die mit dem Punkt "Sicherheit in der Anwendung" nicht einverstanden sind, eine Unternehmens-DB wird ein granulares ACL-Modell haben; dies wird also kein Knackpunkt sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X