“Apa perbedaan antara batasan kunci utama dan batasan kunci unik?”
Ini mungkin pertanyaan wawancara kerja yang paling sering diajukan untuk pengembang basis data. Pada artikel ini, kami akan mencoba menjawabnya.
Mari kita mulai dengan melihat apa itu kunci utama dan kunci unik, serta persamaannya.
Kunci Utama
Kunci utama digunakan untuk mengidentifikasi secara unik setiap catatan dalam tabel. Setiap tabel harus memiliki setidaknya satu kunci utama. Untuk menentukan kunci utama di server SQL, Anda hanya perlu menggunakan kata kunci 'Kunci Utama' setelah nama kolom.
Kunci Unik
Kolom dengan batasan kunci unik hanya dapat berisi nilai unik – ini adalah hasil dari kunci unik yang melarang nilai duplikat disimpan di dalam kolom.
Untuk menentukan kunci unik, Anda harus menambahkan 'Unik' ke nama bidang. Harap diingat bahwa tidak wajib memiliki kunci Unik dalam sebuah tabel.
Contoh Membuat Kunci Utama dan Unik
Skrip berikut membuat database 'Test' yang berisi satu tabel yang disebut 'Mobil'.
Tabel ini akan memiliki kolom kunci utama bernama 'ID' dan kolom kunci unik bernama 'Plate Nomor'.
CREATE DATABASE TEST GO USE TEST GO CREATE TABLE Cars ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int );
Selanjutnya, mari tambahkan beberapa catatan dummy ke tabel 'Mobil' kita. Jalankan script berikut:
INSERT INTO Cars VALUES (1, 'Toyota', 'ABC 123', 199), (2, 'Toyota', 'ABC 345', 207), (3, 'Toyota', 'ABC 758', 205), (4, 'Toyota', 'ABC 741', 306), (5, 'Toyota', 'ABC 356', 124)
Sebelum kita membahas perbedaannya, mari kita lihat dulu persamaan antara kunci utama dan kunci unik.
Kesamaan antara Kunci Utama dan Kunci Unik
- Kolom dengan kunci utama atau unik tidak boleh memiliki nilai duplikat.
Mari kita coba menambahkan record baru dengan nilai ID 2 (yang sudah ada) ke tabel 'Mobil'. Jalankan script berikut:
INSERT INTO Cars VALUES (2, 'Toyota', 'ABC 345', 356)
Saat Anda menjalankan skrip di atas, kesalahan berikut akan ditampilkan:
Kesalahan dengan jelas mengatakan bahwa pernyataan ini melanggar batasan kunci utama dan bahwa nilai duplikat tidak dapat dimasukkan ke dalam kolom kunci utama.
Demikian pula, mari kita coba memasukkan nilai duplikat ke dalam kolom 'NumberPlate' dengan batasan kunci unik dengan menggunakan kueri berikut:
INSERT INTO Cars VALUES (6, 'Toyota', 'ABC 345', 356)
Kali ini, Anda akan melihat adanya pelanggaran terhadap unique key constraint karena nilai 'ABC 345' sudah ada di kolom 'NumberPlate' yang memiliki unique key constraint. Pesan kesalahan akan terlihat seperti ini:
- Karena kunci utama dan kolom unik tidak menerima nilai duplikat, keduanya dapat digunakan untuk mengidentifikasi catatan dalam tabel secara unik. Artinya, untuk setiap nilai di kolom kunci utama atau unik, hanya satu catatan yang akan dikembalikan.
Perbedaan antara Kunci Utama dan Kunci Unik
Sekarang setelah kita memahami persamaan antara kunci utama dan kunci unik, mari kita lihat perbedaannya.
- Sebuah tabel hanya dapat memiliki satu kunci utama, tetapi beberapa kunci unik.
Contoh berikut akan membantu kita memahami hal ini dengan lebih baik.
Di dalam database 'Test' yang kami buat sebelumnya, mari buat tabel 'Cars2' baru dengan dua kunci utama. Untuk melakukannya, jalankan skrip berikut:
CREATE TABLE Cars2 ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int PRIMARY KEY );
Dalam skrip di atas, kami menetapkan batasan kunci utama pada kolom ID dan Model. Namun, karena hanya satu kolom dalam tabel yang dapat memiliki batasan kunci utama, Anda akan melihat kesalahan berikut:
Pesan kesalahan ini dengan jelas memberi tahu kami bahwa sebuah tabel tidak dapat memiliki banyak batasan kunci utama.
Sekarang, mari tambahkan beberapa batasan kunci unik ke tabel 'Cars2'. Perhatikan script berikut:
CREATE TABLE Cars2 ( ID int PRIMARY KEY, Name varchar(255) NOT NULL, NumberPlate varchar(255) UNIQUE, Model int UNIQUE );
Ini memungkinkan kita untuk menambahkan batasan kunci unik pada kolom 'Plate Nomor' dan 'Model'. Karena tabel dapat memiliki beberapa kolom dengan batasan kunci yang unik, Anda tidak akan melihat pesan kesalahan saat menjalankan skrip di atas.
- Kolom kunci utama tidak boleh memiliki nilai nol sedangkan kolom Kunci Unik hanya boleh memiliki satu nilai nol.
Mari kita lihat ini dalam aksi. Pertama, mari tambahkan record dengan nilai null ke kolom kunci utama di tabel 'Mobil'. Perhatikan script di bawah ini:
INSERT INTO Cars VALUES ( null, 'Toyota', 'ABC 345', 356)
Anda dapat melihat bahwa skrip ini memasukkan null sebagai nilai ke dalam kolom ID. Saat Anda menjalankannya, Anda akan melihat kesalahan berikut di jendela pesan keluaran:
Kesalahan memberi tahu kita bahwa nilai nol tidak dapat dimasukkan karena kolom kunci utama tidak mengizinkan nilai nol.
Sekarang mari kita coba menambahkan nilai nol ke kolom kunci unik 'Plate Nomor'. Untuk melakukannya, jalankan skrip berikut:
INSERT INTO Cars VALUES ( 6, 'Toyota',null, 356)
Ini menambahkan catatan baru dengan nilai ID 6 dan nilai nol ke tabel 'Mobil' - khususnya, nilai nol ditetapkan ke kolom 'Plate Nomor'. Anda akan melihat bahwa skrip di atas akan dieksekusi tanpa kesalahan karena kolom kunci unik dapat menerima nilai nol secara default.
Untuk memverifikasi apakah nilai nol benar-benar telah dimasukkan ke dalam kolom 'Plate Nomor', kita perlu memilih semua catatan dari tabel 'Mobil' dengan menggunakan skrip berikut:
SELECT * FROM Cars
Pada hasil yang ditetapkan di atas, kita dapat dengan jelas melihat bahwa kolom kunci utama 'ID' tidak 'tidak mengandung nilai nol. Di sisi lain, kolom 'NumberPlate' dengan batasan kunci unik memang berisi nilai nol yang baru saja kita sisipkan. Ingat, Anda tidak dapat menambahkan lebih dari satu nilai nol ke kolom kunci unik karena nilai nol kedua akan menjadi duplikat dari yang pertama – dan duplikat tidak diperbolehkan.
- Secara default, indeks berkerumun unik dibuat di kolom kunci utama; di sisi lain, indeks non-cluster yang unik dibuat pada kolom kunci yang unik.
Untuk melihat indeks pada tabel 'Mobil', jalankan skrip berikut:
USE TEST GO sp_help Cars
Pada output, Anda akan melihat detail tabel 'Mobil' termasuk indeks seperti yang ditunjukkan pada gambar di bawah ini:
Dari gambar di atas, Anda dapat melihat bahwa kolom 'NumberPlate' memiliki indeks unik yang tidak berkerumun sedangkan kolom ID memiliki indeks unik yang mengelompok.
Kesimpulan
Meskipun memiliki beberapa kesamaan dasar, kunci utama dan kunci unik memiliki perbedaan yang signifikan. Anda hanya dapat memiliki satu kunci utama per tabel, tetapi beberapa kunci unik. Demikian pula, kolom kunci utama tidak menerima nilai nol, sedangkan kolom kunci unik masing-masing dapat berisi satu nilai nol. Dan terakhir, kolom kunci utama memiliki indeks berkerumun yang unik sedangkan kolom kunci yang unik memiliki indeks yang tidak berkerumun yang unik.