sql >> Database >  >> RDS >> Sqlserver

Zal SQL Server 2005 mij bestraffen voor het gebruik van een nvarchar(50) als primaire sleutel in plaats van een geheel getal?

U bent op een van de belangrijkste "heilige oorlogen" van databaseontwerp terechtgekomen. Het debat waarnaar u verwijst is het argument "surrogaat versus natuurlijke sleutel" dat al zo lang woedt als er RDBMS'en zijn (voor zover ik kan zien).

Het debat komt er in wezen op neer of een representatieve sleutel (surrogaat, bijvoorbeeld een IDENTITEIT-kolom) moet worden gebruikt versus het gebruik van de feitelijke gegevens die een record op unieke wijze beschrijven (natuurlijke sleutel).

Ik zal zeggen dat er geen "juist" antwoord is. Prestatiemetingen zijn een artefact van het platform en moeten door experimenten worden beoordeeld, maar prestaties zullen waarschijnlijk niet de grootste zorg zijn.

Wat ik beschouw als het belangrijkste argument voor surrogaatsleutels, is de onveranderlijkheid van primaire sleutels. Als u ervoor kiest om een ​​natuurlijke sleutel te gebruiken, geeft u de mogelijkheid op om die sleutel te wijzigen nadat deze is vastgesteld. Je geeft ook de mogelijkheid op dat het op een bepaald moment in de toekomst niet-uniek wordt. Om die redenen gebruik ik meestal (niet altijd) surrogaatsleutels voor de meeste van mijn tabellen.

Zoals ik al zei, is er echter een zeer lang bestaand debat vol discussies over indexeringsstrategieën en het naleven van de normale vorm om te lezen als u daartoe geneigd bent.

Ik zou Google "surrogaat versus natuurlijke sleutels" gebruiken. Hier zijn een paar links om u op weg te helpen:

Systems Engineering en RDBMS

Techrepublic

Tony Rogersons blog

Ik hoop dat dit helpt.



  1. PostgreSQL:3 tabellen samenvoegen, gesorteerd op datum

  2. MySQL ISNULL() uitgelegd

  3. SQL Server-groep op telling van datum/tijd per uur?

  4. Logische fout in PHP/MySQL INSERT-functie