Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ще ме накаже ли SQL Server 2005 за използване на nvarchar(50) като първичен ключ, вместо цяло число?

Попаднахте на една от големите "свещени войни" на дизайна на бази данни. Дебатът, за който говорите, е аргументът „сурогатен срещу естествен ключ“, който бушува откакто съществуват RDBMS (доколкото мога да преценя).

Дебатът по същество се свежда до това дали трябва да се използва представителен ключ (сурогат, например колона IDENTITY) спрямо използването на действителните данни, които уникално описват запис (естествен ключ).

Ще кажа, че няма "правилен" отговор. Мерките за производителност са артефакт на платформата и трябва да се оценяват чрез експериментиране, но производителността вероятно няма да бъде основната грижа.

Това, което считам за основен аргумент за сурогатните ключове, е неизменността на първичните ключове. Ако решите да използвате естествен ключ, вие се отказвате от възможността да промените този ключ, след като бъде установен. Вие също се отказвате от възможността той да стане неуникален в някакъв момент в бъдещето. Поради тези причини обикновено (не винаги) използвам сурогатни ключове за повечето от моите таблици.

Въпреки това, както споменах, има много дългогодишен дебат, изпълнен с обсъждания на стратегии за индексиране и придържане към нормална форма, които трябва да прочетете, ако сте толкова склонни.

Бих поискал в Google „сурогатни срещу естествени ключове“. Ето няколко връзки, за да започнете:

Системно инженерство и RDBMS

Techrepublic

Блогът на Тони Роджърсън

Надявам се това да помогне.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Възстановяване на паралелно архивиране на SQL Server -2

  2. Преместване на бази данни на SQL Server в облака

  3. Проблем с внедряването на доклада за SSRS 2014

  4. Завъртете динамични колони, без агрегиране

  5. Как да синхронизирате два (или n) процеса на репликация за бази данни на SQL Server?