Apakah direkomendasikan untuk menggunakan Identity sebagai alternatif dari kunci primer?

11

Kami dapat mendeklarasikan Identitysejenis id_numsehingga id_numakan memiliki peningkatan angka unik.

CREATE TABLE new_employees
(
  id_num int IDENTITY(1,1),
  fname varchar (20),
  minit char(1),
  lname varchar(30)
)

Apakah disarankan untuk digunakan Identitysebagai alternatif Primary keykarena Identitymemberikan nomor unik untuk setiap baris?

Mendongkrak
sumber
Mengapa Anda perlu melakukan ini? karena itu baik untuk menjadi salah satu kunci utama dalam tabel itu secara otomatis membuat indeks cluster dan bagus untuk optimasi
KuldipMCA
4
Tidak, disarankan untuk digunakan IDENTITY sebagai kunci utama (bukan sebagai alternatif untuk PK). Itu membuat kunci primer yang sangat baik, sangat efisien (yang secara default juga adalah kunci pengelompokan dalam SQL Server) - sempit, biasanya statis, biasanya unik (kecuali jika Anda mengutak-atik spesifikasi identitas), dan itu selalu meningkat
marc_s

Jawaban:

23

Identity columnsdan Primary Keysdua hal yang sangat berbeda. An Identity columnmemberikan nomor yang bertambah secara otomatis. Hanya itu yang dilakukannya. The Primary Key(setidaknya di SQL Server) merupakan kendala unik yang jaminan keunikan dan biasanya (tetapi tidak selalu) kunci berkerumun. Sekali lagi dalam MS SQL Server itu juga merupakan indeks (dalam beberapa RDBMS mereka tidak terikat erat) Sebagai indeks ini menyediakan pencarian lebih cepat dll. Sering Identity columnsdigunakan sebagai Primary Keyjika tidak natural keyada barang, tetapi bukan pengganti.

Kenneth Fisher
sumber
1
Dalam SQL Server, indeks non-clustered berisi kunci utama di tingkat daun. Menunjuk kunci alami sebagai kunci utama akan membuat indeks Anda sangat besar.
Andomar
2
@Andomar PK adalah entitas yang logis. Indeks pendukung untuk PK bersifat fisik. Dan indeks nonclustered dapat mendukung PK, tidak harus menjadi indeks berkerumun. Oleh karena itu, pernyataan Anda salah jika indeks PK adalah NCI. Ini adalah kunci indeks berkerumun di tingkat daun NCI.
Thomas Stringer
@ThomasStringer: Anda benar, komentar saya harus membaca di clustered index keymana katanya primary key.
Andomar
Mungkin. Kunci alami Anda bisa berupa bilangan bulat dalam hal ini tidak ada perbedaan. Jumlah argumen yang akan Anda lihat pada kunci Artificial vs Natural sangat mengejutkan. Coba cari di web kapan-kapan :) Itu kebetulan menjadi salah satu argumen untuk kunci buatan.
Kenneth Fisher
5

Tidak, karena identitas tidak menjamin nilai yang unik. Properti identitas dapat di-bypass SET IDENTITY_INSERT <schema>.<table> ON(dalam SQL Server - Anda tidak menentukan RDBMS apa yang Anda gunakan).

Batasan kunci primer (dan batasan unik) menggunakan indeks unik untuk menegakkan keunikan.

Greenstone Walker
sumber
5
itu tidak menjamin nilai unik. Tetapi tidak ada yang lain. Siapa pun yang memiliki akses ke database dapat mencoba menyisipkan nilai duplikat ke kunci utama. Apa yang dilakukan identitas adalah membuatnya lebih mudah untuk menghasilkan nilai-nilai unik (terutama jika Anda tidak memiliki kunci alami yang baik seperti yang dikatakan Kenneth Fisher). Anda bisa mendeklarasikan bidang bilangan bulat dengan kunci utama dan itu akan menjadi hal yang persis sama tetapi tanpa pembuatan otomatis. Jadi IDENTITY adalah untuk generasi dan kuncinya adalah untuk menegakkan keunikan.
Chris Aldrich
+1 Untuk menunjukkan cacat dasar pada premis pertanyaan - Identitydan Primary Keytidak setara dan melayani dua tujuan yang berbeda.
JNK