Welche Eigenschaften stehen Ihnen zur Verfügung? Welche davon sind für Ihre Anwendung wichtig? Zum Beispiel können keine zwei Menschen zur exakt gleichen Sekunde am exakt gleichen Ort geboren sein, aber Sie haben wahrscheinlich keinen Zugang zu diesen Daten mit dieser Genauigkeit! Sie müssen also anhand der Attribute, die Sie modellieren wollen, entscheiden, welche davon ausreichen, um ein akzeptables Maß an Datenintegrität zu gewährleisten. Wie auch immer Sie sich entscheiden, Sie haben Recht, wenn Sie sich auf die Aspekte der Datenintegrität (Verhinderung des Einfügens mehrerer Zeilen für dieselbe Person) Ihrer Auswahl konzentrieren.
Für Joins/Fremdschlüssel in anderen Tabellen ist es am besten, einen Surrogatschlüssel zu verwenden.
Ich bin zu der Überzeugung gelangt, dass die Verwendung des Wortes Primärschlüssel als eine falsche Bezeichnung oder bestenfalls als verwirrend. Jeder Schlüssel, egal ob Sie ihn als Primärschlüssel , Alternativer Schlüssel , Einzigartiger Schlüssel o Einzigartiger Index ist immer noch ein Schlüssel und erfordert, dass jede Zeile der Tabelle eindeutige Werte für die Attribute im Schlüssel enthält. In diesem Sinne sind alle Schlüssel gleichwertig. Vielmehr kommt es darauf an, ob es sich um natürliche Schlüssel (abhängig von sinnvollen Datenattributen des realen Domänenmodells) oder um Surrogate (unabhängig von realen Datenattributen) handelt.
Zweitens kommt es auch darauf an, wofür Sie den Schlüssel verwenden. Surrogatschlüssel sind eng und einfach und ändern sich nie (kein Grund dazu - sie bedeuten nichts). Daher sind sie eine bessere Wahl für Joins oder für Fremdschlüssel in anderen abhängigen Tabellen.
Aber um die Datenintegrität zu gewährleisten und das Einfügen mehrerer Zeilen für dieselbe Domäneneinheit zu verhindern, sind sie völlig nutzlos... Dafür brauchen Sie eine Art von Natürlicher Schlüssel die Sie aus den Ihnen zur Verfügung stehenden Daten ausgewählt haben und die Ihre Anwendung für einen bestimmten Zweck modelliert.
Der Schlüssel muss nicht zu 100 % unveränderlich sein. Wenn Sie (als Beispiel) Name, Telefonnummer und Geburtsdatum verwenden, können Sie, selbst wenn eine Person ihren Namen oder ihre Telefonnummer ändert, einfach den Wert in der Tabelle ändern. Solange keine andere Zeile bereits die neuen Werte in ihren Schlüsselattributen hat, ist alles in Ordnung.
Selbst wenn der von Ihnen gewählte Schlüssel nur in 99,9 % der Fälle funktioniert (z. B. wenn Sie das Pech haben, auf zwei Personen mit demselben Namen und derselben Telefonnummer zu treffen, die zufällig am selben Tag geboren wurden), sind zumindest 99,9 % Ihrer Daten garantiert korrekt und konsistent - und Sie können z. B. einfach die Zeit zu ihrem Geburtsdatum hinzufügen, um sie eindeutig zu machen, oder ein anderes Attribut zum Schlüssel hinzufügen, um sie zu unterscheiden. Solange Sie aufgrund der Änderung keine Datenwerte in Fremdschlüsseln in Ihrer gesamten Datenbank aktualisieren müssen (da Sie diesen Schlüssel nicht an anderer Stelle als FK verwenden), stehen Sie vor keinem größeren Problem.