In einer Tabelle, die keinen natürlichen Schlüssel enthält, ist es häufig weiterhin nützlich, dass Benutzer einen eindeutig generierten Bezeichner verwenden können. Wenn die Tabelle einen Ersatz-Primärschlüssel hat (und in einem solchen Fall würden Sie es sicherlich erwarten), sollte dieser Schlüssel dem Benutzer zugänglich gemacht werden oder sollte ein anderes Feld für diesen Zweck verwendet werden?
Ein Grund, den Ersatzschlüssel nicht verfügbar zu machen, besteht darin, dass Sie jetzt keine Vorgänge ausführen können, bei denen die Beziehung zwischen Datensätzen beibehalten wird, sondern die Schlüsselwerte geändert werden, z. B. bestimmte Arten des Löschens / erneuten Einfügens ein anderer, etc.
Der Hauptvorteil beim Anzeigen des Ersatzschlüssels ist die einfache Verwendung eines Felds, das Sie ohnehin haben.
Unter welchen Umständen ist es besser, den Ersatzschlüssel den Benutzern direkt zur Verfügung zu stellen?
Antworten:
Sie müssen bereit sein für alle Identifikatoren, die Benutzern / Kunden zur Verfügung stehen, die geändert werden müssen. Wenn Sie die Identität einer Zeile in einer Datenbank ändern und diese Änderung auf alle Fremdschlüssel übertragen, müssen Sie lediglich die Daten brechen.
Wenn die Daten keinen natürlichen Geschäftsschlüssel haben, können Sie ein zusätzliches Feld für eine "Geschäftskennung" hinzufügen. Dies sollte für die Prozesse optimiert werden, für die es verwendet wird. Telefontastatureingabe bedeutet nur numerisch. Über das Telefon / verbale Mittel vermeiden Sie ähnlich klingende Symbole (B / D, M / N, etc.). Sie können sogar eine leicht einprägsame Phrase ("grünes Gelee") automatisch generieren lassen.
Dies hat zur Folge, dass das Unternehmen später ändern kann, wie es auf Datensätze verweisen möchte. Die einzige Änderung des Datenschemas besteht darin, entweder eine neue Spalte für diesen ID-Stil hinzuzufügen oder die bereits vorhandenen IDs zu transformieren. Die Änderung wird nicht in der gesamten Datenbank weitergegeben, und Sie haben immer noch eine ID (den Ersatz), die im Laufe der Zeit gültig ist.
Kurz gesagt, ich würde vermeiden, Ersatzschlüssel für Benutzer verfügbar zu machen. Wie aus den Kommentaren hervorgeht, sollten Ersatzschlüssel so gut wie nie geändert werden. Umgekehrt wollen Unternehmen alles ändern. Wenn der Ersatzschlüssel verfügbar ist, ist es nur eine Frage der Zeit, bis das Unternehmen ihn ändern möchte.
Als Randbemerkung, wenn ich sage „Aussetzen“ hier, ich meine den Schlüssel für den Benutzer mit der Erwartung zu geben , dass sie verwenden es direkt (wie in ihrer Auftragsnummer Support zu erhalten ).
quelle
In einigen Fällen werden Ersatzschlüssel erwartet, die für Benutzer sinnvoll sind. Mein Lieblingsbeispiel ist "Bestellnummer". Die Bestellnummer ist nicht wirklich ein natürlicher Schlüssel: Ein natürlicher Schlüssel kann ein Zeitstempel plus Benutzer sein oder mehr, wenn Sie erwarten, dass Benutzer mehr als eine Bestellung innerhalb der Granularität Ihres Zeitstempels generieren.
Trotzdem verstehen und erwarten die Benutzer die Bequemlichkeit einer Bestellnummer. Es gibt keinen Schaden und viel Wert, wenn Sie Benutzer über sie informieren.
Andererseits ergeben einige Ersatzschlüssel für einen Benutzer keinen Sinn. Sicher, meine Krankenkasse hat einen Ersatzschlüssel, der mich anhand meiner Mitgliedsnummer, meines Geburtsdatums, meines Trägers usw. identifiziert, aber das interessiert mich nicht, ich kümmere mich um die Informationen auf meiner Karte (die häufig IDs enthalten) auf meinem Arbeitgeber und sind nicht einzigartig im Universum ... Daher der Ersatzschlüssel bei der Versicherungsgesellschaft).
quelle
Sie sollten einen Ersatzschlüssel nur verfügbar machen, wenn es sich um eine ordnungsgemäß generierte GUID / UUID * handelt. Sequentielle Ersatzschlüssel verfügbar zu machen ist Nummer 4 bei den OWASP Top 10-Sicherheitsproblemen.
* In der Praxis ist es am besten anzunehmen, dass es für diese Zwecke nicht ordnungsgemäß generiert wurde, es sei denn, Sie wissen, dass es von einem kryptografisch sicheren Zufalls- oder Pseudozufallszahlengenerator erstellt wurde.
quelle
Wenn eine Tabelle keinen natürlichen Schlüssel hat, lassen Ersatzschlüssel solche Zeilen zu.
Ich würde diese künstlichen Schlüssel anstelle von Ersatzschlüsseln nennen, aber diese Unterscheidung ist für diese Frage nicht wichtig.
Angenommen, es gibt wichtige Daten, die diese Ersatzschlüssel durch Fremdschlüssel referenzieren. Woher wissen die Endbenutzer, welche Zeile aktualisiert werden muss, wenn sie die Ersatzschlüsselwerte nicht kennen?
quelle
Mit den Worten des Laien:
quelle
Sie sollten ein Feld NUR einem Benutzer aussetzen, der dem Benutzer nützliche Informationen zur Verfügung stellt, entweder direkt oder wenn Sie Fehler melden.
Umgekehrt sollten Sie IMMER "Ersatzprimärschlüssel" verfügbar machen, wenn diese das Hauptmittel zur Identifizierung eines Datensatzes (einfach oder komplex) für eine vom Benutzer durchgeführte Interaktion sind.
quelle
Es sollte keine Rolle spielen, ob Sie die Schlüssel dem Endbenutzer aussetzen oder nicht. Ihre Anwendung sollte die erforderliche Autorisierung durchführen, damit sie beispielsweise nicht durch einfache Kenntnis einer Bestellnummer auf etwas zugreifen können, auf das sie normalerweise keinen Zugriff haben.
Einschränkung: Dies setzt eine webbasierte oder n-Tier-Anwendung voraus, bei der serverseitige Autorisierung möglich / machbar ist. Wenn Sie eine VB-App haben, die SQL direkt ausführt, ist das ein ganz anderes Problem.
quelle