sql >> Database teknologi >  >> RDS >> Mysql

Unik nøgle med NULL

En grundlæggende egenskab ved en unik nøgle er, at det skal være unikt. At gøre en del af denne nøgle Nullable ødelægger denne egenskab.

Der er to mulige løsninger på dit problem:

  • En måde, den forkerte måde, ville være at bruge en eller anden magisk dato til at repræsentere ukendt. Dette bringer dig bare forbi DBMS-"problemet", men løser ikke problemet i en logisk forstand. Forvent problemer med to "John Smith"-poster med ukendte fødselsdato. Er disse fyre en og samme, eller er de unikke individer? Hvis du ved, at de er forskellige, er du tilbage til det samme gamle problem - din unikke nøgle er bare ikke unik. Tænk ikke engang på at tildele en hel række magiske datoer til at repræsentere "ukendte" - dette er virkelig vejen til helvede.

  • En bedre måde er at oprette en EmployeeId-attribut som en surrogatnøgle. Dette er blot en vilkårlig identifikator, som du tildeler til personer, du kender er unikke. Denne identifikator er ofte kun en heltalsværdi. Opret derefter en Employee-tabel for at relatere EmployeeId'et (unik, ikke-nullbar nøgle) til det, du mener er de afhængige attributter, i dette tilfælde Navn og Fødselsdato (hvoraf enhver kan være nullbar). Brug EmployeeId surrogatnøglen overalt, hvor du tidligere brugte Navn/Fødselsdato. Dette tilføjer en ny tabel til dit system, men løser problemet med ukendte værdier på en robust måde.



  1. Tilladelsesproblem i SSMS:SELECT-tilladelsen blev nægtet på objektet 'extended_properties', databasen 'mssqlsystem_resource', ... Fejl 229)

  2. Tillad brugeren at oprette og ændre tabel?

  3. SQL Dev 4.2 Top SQL

  4. Sådan opretter du en CHECK-begrænsning i SQL Server (T-SQL-eksempler)