Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Eindeutiger Schlüssel mit NULLen

Eine grundlegende Eigenschaft eines eindeutigen Schlüssels ist, dass es eindeutig sein muss. Wenn Sie einen Teil dieses Schlüssels auf Null setzen, wird diese Eigenschaft zerstört.

Es gibt zwei mögliche Lösungen für Ihr Problem:

  • Ein Weg, der falsche Weg, wäre, ein magisches Datum zu verwenden, um Unbekanntes darzustellen. Dies bringt Sie nur am DBMS-„Problem“ vorbei, löst das Problem aber nicht im logischen Sinne. Erwarten Sie Probleme mit zwei „John Smith“-Einträgen mit unbekannten Geburtsdaten. Sind diese Typen ein und derselbe oder sind sie einzigartige Individuen? Wenn Sie wissen, dass sie unterschiedlich sind, dann sind Sie wieder beim selben alten Problem – Ihr einzigartiger Schlüssel ist einfach nicht einzigartig. Denken Sie nicht einmal daran, eine ganze Reihe von magischen Daten zuzuweisen, um "unbekannt" darzustellen - das ist wirklich der Weg zur Hölle.

  • Eine bessere Möglichkeit besteht darin, ein EmployeeId-Attribut als Ersatzschlüssel zu erstellen. Dies ist nur eine willkürliche Kennung, die Sie Personen zuweisen, die Sie kennen sind einzigartig. Dieser Bezeichner ist oft nur ein ganzzahliger Wert. Erstellen Sie dann eine Employee-Tabelle, um die EmployeeId (eindeutiger Schlüssel ohne Nullwert) mit den Ihrer Meinung nach abhängigen Attributen in Beziehung zu setzen, in diesem Fall Name und Geburtsdatum (von denen alle nullable sein können). Verwenden Sie den EmployeeId-Ersatzschlüssel überall dort, wo Sie zuvor Name/Geburtsdatum verwendet haben. Dies fügt Ihrem System eine neue Tabelle hinzu, löst aber das Problem unbekannter Werte auf robuste Weise.