Een fundamentele eigenschap van een unieke sleutel is dat het uniek moet zijn. Door een deel van die sleutel Nullable te maken, wordt deze eigenschap vernietigd.
Er zijn twee mogelijke oplossingen voor uw probleem:
-
Een manier, de verkeerde manier, zou zijn om een of andere magische datum te gebruiken om onbekend te vertegenwoordigen. Hiermee kom je voorbij het DBMS-"probleem", maar lost het probleem niet in logische zin op. Verwacht problemen met twee "John Smith"-vermeldingen met onbekende geboortedatums. Zijn deze jongens één en dezelfde of zijn het unieke individuen? Als je weet dat ze anders zijn, heb je weer hetzelfde oude probleem:je unieke sleutel is gewoon niet uniek. Denk er niet eens aan om een hele reeks magische datums toe te wijzen om "onbekend" te vertegenwoordigen - dit is echt de weg naar de hel.
-
Een betere manier is om een EmployeeId-kenmerk als surrogaatsleutel te maken. Dit is slechts een willekeurige identificatie die u toewijst aan personen die u kent zijn uniek. Deze identifier is vaak gewoon een geheel getal. Maak vervolgens een Employee-tabel om de EmployeeId (unieke, niet-nullablekey) te relateren aan wat u denkt dat de afhankelijke attributen zijn, in dit geval Naam en Geboortedatum (waarvan elk nullable kan zijn). Gebruik de surrogaatsleutel EmployeeId overal waar u eerder de naam/geboortedatum hebt gebruikt. Dit voegt een nieuwe tabel toe aan uw systeem, maar lost het probleem van onbekende waarden op een robuuste manier op.