Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy SQL Server 2005 będzie karać mnie za używanie nvarchar(50) jako klucza podstawowego zamiast liczby całkowitej?

Trafiłeś na jedną z głównych „świętych wojen” projektowania baz danych. Debata, do której się odnosisz, to argument „zastępczy kontra klucz naturalny”, który szaleje tak długo, jak istnieją RDBMS (tak prawie, jak mogę to stwierdzić).

Debata zasadniczo sprowadza się do tego, czy należy użyć klucza reprezentatywnego (zamiennika, na przykład kolumny IDENTYFIKACJA), czy użyć rzeczywistych danych, które jednoznacznie opisują rekord (klucz naturalny).

Powiem, że nie ma „właściwej” odpowiedzi. Miary wydajności są artefaktem platformy i należy je oceniać eksperymentalnie, ale wydajność prawdopodobnie nie będzie głównym problemem.

To, co uważam za główny argument przemawiający za kluczami zastępczymi, to niezmienność kluczy podstawowych. Jeśli zdecydujesz się na użycie klucza naturalnego, rezygnujesz z możliwości zmiany tego klucza po jego ustanowieniu. Rezygnujesz również z możliwości, że w pewnym momencie w przyszłości może stać się nieunikatowe. Z tych powodów zazwyczaj (nie zawsze) używam kluczy zastępczych dla większości moich tabel.

Jednak, jak wspomniałem, istnieje bardzo długa debata wypełniona dyskusjami na temat strategii indeksowania i przestrzegania normalnej formy, którą należy przeczytać, jeśli masz taką ochotę.

Wygooglowałbym „zastępcze vs. naturalne klucze”. Oto kilka linków na początek:

Inżynieria systemów i RDBMS

Techrepublic

Blog Tony'ego Rogersona

Mam nadzieję, że to pomoże.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. zapisywanie kopii z zestawu rekordów do zakresu

  2. Jak mapować uint w NHibernate za pomocą SQL Server 2005

  3. Jak usunąć końcowe białe znaki w SQL Server — RTRIM()

  4. Czy MS SQL Server między obejmuje granice zakresu?

  5. Jak wstawić jedną kolumnę do innej kolumny w tej samej tabeli w SQL Server