Lewati ke konten utama

Primary Key SQL: Tutorial Teknis Komprehensif

Pahami apa itu primary key SQL dan fungsinya dalam relasi basis data serta kinerja kueri dalam tutorial teknis ini.
· 10 mnt Baca

Jelajahi bersama AI

Dalam basis data relasional, primary key berperan penting untuk memastikan keunikan dan integritas data dalam sebuah tabel. Primary key adalah sebuah constraint yang mengidentifikasi setiap record dalam tabel secara unik, bertindak sebagai elemen dasar untuk pengindeksan, menegakkan integritas entitas, dan membangun relasi antar tabel.

Dalam tutorial ini, saya akan mengajak Anda mengeksplorasi primary key SQL secara mendalam, mencakup prinsip dasar, metode implementasi, dan teknik optimasi. Saya juga akan membahas beberapa kesalahan umum dan praktik terbaik, serta skenario dunia nyata. Jika Anda masih mempelajari SQL, saya sarankan Anda melihat peta jalan SQL kami yang komprehensif dan mengikuti jalur keterampilan SQL Fundamentals kami. 

Apa itu Primary Key SQL?

Primary key SQL adalah sebuah kolom atau sekumpulan kolom yang mengidentifikasi setiap baris dalam tabel secara unik. Ini berarti tidak ada dua baris yang dapat memiliki nilai primary key yang sama. Satu tabel hanya dapat memiliki satu primary key, yang dapat terdiri atas satu atau beberapa kolom.

Primary key sangat penting untuk menegakkan integritas data dan memungkinkan pengkuerian yang efisien. Mari lihat beberapa aspek dasarnya.

Primary key sangat penting untuk normalisasi basis data dan integritas relasional.

Properti kunci dari primary key

  1. Keunikan: Memastikan setiap nilai pada kolom primary key bersifat unik.
  2. Tidak boleh null: Kolom primary key tidak boleh berisi nilai NULL.
  3. Imutabilitas: Idealnya, nilai primary key tidak berubah sepanjang masa pakainya untuk menghindari inkonsistensi pada tabel referensi.

Constraint dan pengindeksan

Ketika sebuah primary key didefinisikan, basis data secara otomatis membuat indeks unik untuk menegakkan constraint tersebut. Indeks ini mempercepat kinerja kueri, terutama untuk operasi pencarian.

Melalui sistem indeks ini, primary key membantu mesin basis data dalam optimalisasi rencana eksekusi. Hasilnya, kueri Anda akan berjalan lebih cepat.

Tipe data umum untuk primary key

Primary key dapat menggunakan beberapa tipe data. Berikut beberapa tipe yang umum digunakan:

  • INTEGER atau SERIAL: Efisien dan paling umum digunakan.
  • BIGINT: Berguna untuk tabel yang diperkirakan menyimpan miliaran baris.
  • UUID: Cocok untuk sistem terdistribusi dan menghindari prediktabilitas berurutan.
  • CHAR/VARCHAR: Digunakan dengan hati-hati, biasanya untuk natural key bila diperlukan.

Tipe dan Arsitektur Primary Key SQL

Primary key dapat diklasifikasikan ke berbagai jenis berdasarkan struktur dan asalnya. Beberapa contohnya:

  • Natural key: Diturunkan dari data yang sudah ada (misalnya, Nomor Jaminan Sosial, email) dan mudah dipahami serta sering bermakna bagi pengguna bisnis. Namun, ini membawa risiko pembaruan, duplikasi, dan potensi masalah privasi.
  • Surrogate key: Kunci buatan, seperti ID yang dihasilkan sistem, yang biasanya diimplementasikan dengan SERIAL, BIGSERIAL, atau UUID. Penggunaan kunci seperti ini menawarkan stabilitas, privasi, dan pemeliharaan yang lebih mudah.

Membandingkan berdasarkan fitur, kita dapat melihat perbedaannya dalam tabel ringkas berikut:

Fitur

Natural Key

Surrogate Key

Makna Bisnis

Ya

Tidak

Stabilitas

Sering tidak stabil

Sangat stabil

Kinerja

Mungkin memerlukan field besar

Umumnya ringkas

Kekhawatiran Privasi

Lebih tinggi

Lebih rendah

Arsitektur composite primary key

Composite primary key adalah cara umum untuk menghasilkan kunci unik di tabel. Kunci ini biasanya diturunkan dari data yang terdapat pada dua atau lebih kolom.

Kunci seperti ini umum pada tabel junction atau asosiatif di mana relasinya sendiri memerlukan keunikan.

  • Contoh: Tabel course_enrollments dapat menggunakan kunci komposit student_id dan course_id.

Pertimbangan:

  • Minimalisme: Hindari kolom yang tidak perlu dalam kunci komposit.
  • Kompleksitas: Join dan referensi foreign key menjadi lebih kompleks.
  • Ukuran Indeks: Indeks dapat menjadi besar dan memengaruhi kinerja.

Kunci tambahan yang digunakan di basis data

Selain primary key, ada beberapa kunci lain yang dapat digunakan, seperti:

  • Candidate key: Sekumpulan atribut yang dapat mengidentifikasi sebuah baris secara unik.
  • Super key: Superset dari candidate key (mencakup kolom tambahan).
  • Alternate key: Candidate key yang tidak dipilih sebagai primary key.

Jika Anda sedang memutuskan field data mana yang akan digunakan sebagai primary key, pertimbangkan faktor-faktor berikut:

  • Frekuensi perubahan data: Seberapa sering data berubah?
  • Tipe dan ukuran data kolom: Apakah tipe data cocok untuk pengindeksan?
  • Pola kueri yang diharapkan: Apakah field ini cocok untuk pengkuerian?

Mendefinisikan dan Memodifikasi Primary Key di SQL

Selanjutnya, mari lihat bagaimana kita dapat mendeklarasikan dan mengelola primary key di PostgreSQL menggunakan perintah SQL. 

Kita akan menelusuri berbagai skenario, termasuk pembuatan tabel, modifikasi tabel yang sudah ada, dan pengelolaan perilaku constraint.

Sintaks deklarasi dan modifikasi

Saat pembuatan tabel

Pada tahap pembuatan tabel, Anda sebaiknya membuat field yang kemungkinan dibutuhkan. Dalam kasus ini, kita akan membuat ID karyawan yang terdiri dari bilangan bulat unik.

CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,  -- Automatically generates unique integers
    name TEXT NOT NULL,              -- Basic text field, required
    email TEXT UNIQUE                -- Unique constraint to prevent duplicate emails
);

Pelajari lebih lanjut perintah SQL di SQL Basics Cheat Sheet kami.

lembar contekan dasar sql

Contoh ini menunjukkan cara mendefinisikan primary key secara inline menggunakan pseudo-type SERIAL. PostgreSQL memperlakukan SERIAL sebagai kolom integer yang bertambah otomatis, ideal untuk surrogate key. Kolom email juga diberi constraint UNIQUE, memungkinkannya berperan sebagai alternate key.

Menggunakan ALTER TABLE

Sekarang, mari tetapkan employee_id sebagai primary key.

ALTER TABLE employees ADD PRIMARY KEY (employee_id);

Perintah ini digunakan ketika sebuah tabel sudah dibuat tanpa primary key dan Anda ingin menambahkannya kemudian. Pastikan kolom yang akan dijadikan primary key tidak berisi NULL atau nilai duplikat, jika tidak perintah akan gagal.

Menghapus primary key

Dengan primary key yang sudah ditetapkan, Anda juga dapat menghapus constraint primary key.

ALTER TABLE employees DROP CONSTRAINT employees_pkey;

Gunakan pernyataan ini untuk menghapus constraint primary key yang ada. Nama constraint employees_pkey mengikuti konvensi penamaan default PostgreSQL (<table>_pkey). Ini berguna saat mendesain ulang skema tabel atau beralih ke kolom primary key yang berbeda.

Di PostgreSQL, nama constraint default untuk primary key adalah table_name_pkey.

Pelajari lebih lanjut tentang PostgreSQL di lembar contekan kami.

lembar contekan postgresql

Penanganan null dan manajemen tabrakan

Nilai NULL tidak diizinkan pada kolom primary key. Nilai duplikat juga akan menyebabkan error pelanggaran constraint.

Beberapa strategi untuk mengelola hal ini meliputi:

  • Menggunakan INSERT ... ON CONFLICT untuk menghindari duplikasi.
  • Menggunakan transaksi untuk memeriksa ketersediaan kunci sebelum insert.

Strategi auto-increment dan pengenal global

Tipe SERIAL, BIGSERIAL, dan IDENTITY di PostgreSQL menyederhanakan pembuatan ID.

Selain itu, UUID menyediakan pengenal global yang aman. Sifatnya yang tidak berurutan dan tidak dapat diprediksi juga meningkatkan keamanan, terutama dalam mencegah serangan enumerasi. 

Berikut implementasi bagaimana UUID dapat dibuat dan digunakan sebagai primary key

CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE TABLE users (
    user_id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    username TEXT NOT NULL
);

Primary Key dalam Relasi dan Peningkatan Kinerja

Primary key sangat penting untuk memastikan konsistensi di seluruh tabel relasional dan meningkatkan kinerja.

Penegakan integritas entitas

Integritas entitas ditegakkan melalui primary key dengan tidak mengizinkan NULL dan duplikasi. Memiliki pengenal unik membantu mencegah anomali data saat operasi insert/update.

Foreign key dan integritas referensial

Foreign key harus cocok dengan nilai primary key yang ada di tabel yang direferensikan. Integritas referensial memastikan semua referensi antar tabel tetap valid dan mencegah "record yatim" di mana record mereferensikan data yang tidak ada.

Aksi cascading menjaga konsistensi ketika primary key yang direferensikan berubah. 

Ini dapat mencakup fungsi cascading umum seperti:

  • ON DELETE CASCADE
  • ON UPDATE CASCADE
  • SET NULL dan SET DEFAULT

Pengindeksan dan optimasi kueri

Indeks unik pada primary key mempercepat kueri SELECT dan JOIN. Namun, desain kunci yang buruk dapat menyebabkan indeks membengkak dan kinerja menurun.

Jika kueri Anda lambat dan Anda curiga penyebabnya adalah pengindeksan yang buruk, gunakan EXPLAIN ANALYZE untuk memeriksa rencana kueri dan menilai penggunaan indeks.

Praktik Terbaik Desain dan Potensi Jebakan

Desain kunci yang baik meningkatkan kemudahan pemeliharaan, kinerja, dan skalabilitas. Mari lihat beberapa praktik terbaik dan kesalahan umum.

Pedoman pemilihan kunci

  • Pilih tipe data yang pendek dan panjang tetap (misalnya, INT, UUID).
  • Hindari kunci yang kemungkinan berubah.
  • Pastikan kunci tidak memiliki makna bisnis yang tertanam untuk menghindari jeratan logika.
  • Gunakan surrogate key untuk kesederhanaan dan normalisasi.

Kesalahan implementasi umum

  • Menggunakan beberapa primary key (hanya satu yang diizinkan per tabel).
  • Salah memberi label constraint unik sebagai primary key.
  • Gagal mendefinisikan primary key, yang menyebabkan record menjadi yatim.

Perbaikannya meliputi:

  • Menambahkan kunci yang hilang melalui ALTER TABLE.
  • Menormalisasi desain skema.
  • Menggunakan konvensi penamaan yang konsisten.

Pertimbangan skalabilitas

Saat membuat solusi basis data yang dapat diskalakan, usahakan menggunakan surrogate key untuk menjaga keseragaman di seluruh kumpulan data besar. Hindari kunci komposit di sistem terdistribusi kecuali diperlukan. Pemantauan rutin ukuran tabel/indeks juga wajib dilakukan.

Skenario Implementasi Lanjutan

Menangani primary key pada sistem yang kompleks, seperti basis data terdistribusi atau sistem legacy, memerlukan strategi lanjutan.

Sistem basis data terdistribusi

Basis data terdistribusi lebih rumit. Anda perlu memastikan pembuatan kunci bebas konflik di seluruh node. Untuk ini, Anda dapat mencoba menggunakan UUID dan layanan manajemen kunci terpusat

Pertimbangan Partisi:

  • Pastikan kunci tidak menimbulkan hotspot.
  • Gunakan kunci di-hash atau diacak saat melakukan sharding.

Migrasi sistem legacy

Saat melakukan migrasi sistem dari basis data legacy, pertama identifikasi pengenal unik yang sudah ada. Selanjutnya, perkenalkan surrogate key secara bertahap berdampingan dengan natural key.

Ambil pendekatan hati-hati dengan menjalankan dukungan kunci ganda sebelum beralih sepenuhnya.

Proses Migrasi:

  1. Tambahkan kolom surrogate key.
  2. Isi kunci untuk record yang sudah ada.
  3. Modifikasi kueri aplikasi.
  4. Hapus natural key lama setelah verifikasi.

Demonstrasi Primary Key Menggunakan PostgreSQL

Sebelum membuat tabel dan menyisipkan data, Anda memerlukan lingkungan PostgreSQL yang berfungsi. Bagian ini dimulai dengan panduan singkat untuk menyiapkan PostgreSQL, diikuti instruksi untuk mendefinisikan dan menggunakan dataset contoh guna mempraktikkan konsep primary key.

Langkah 1: Penyiapan awal untuk PostgreSQL

Jika Anda belum memasang PostgreSQL, ikuti langkah-langkah berikut untuk memulai:

  1. Pasang PostgreSQL
    • Kunjungi situs resmi: https://www.postgresql.org/download/
    • Pilih sistem operasi Anda (Windows, macOS, atau Linux).
    • Unduh dan jalankan installer, pastikan Anda memasang pgAdmin (antarmuka grafis) bersama server PostgreSQL.
  2. Mulai layanan PostgreSQL
    • Setelah pemasangan, layanan PostgreSQL biasanya mulai secara otomatis.
    • Anda juga dapat memulainya secara manual melalui manajer layanan OS Anda (misalnya, Services di Windows atau systemctl di Linux).
  3. Luncurkan pgAdmin atau sambungkan via CLI
    • Gunakan pgAdmin untuk mengelola dan mengkueri basis data secara visual.
    • Atau, buka terminal dan sambungkan menggunakan:psql -U postgres
    • Ganti postgres dengan nama pengguna PostgreSQL Anda yang sebenarnya jika berbeda.
  4. Buat basis data baru
    • Di pgAdmin, klik kanan "Databases" dan pilih "Create > Database".

  • Atau gunakan perintah SQL berikut:```sql

CREATE DATABASE pk_tutorial;

Connect to the new database in psql with:```bash
\c pk_tutorial

Setelah lingkungan Anda siap, Anda dapat melanjutkan dengan penyiapan dataset lainnya sebagaimana telah diuraikan dalam tutorial.

Selanjutnya, mari melihat panduan langkah demi langkah untuk membuat dataset contoh menggunakan PostgreSQL. Dataset ini terdiri dari dua tabel yang berelasi: customers dan orders.

Tabel customers menggunakan surrogate key demi kesederhanaan, sementara tabel orders menggunakan primary key berbasis UUID untuk menggambarkan keunikan global.

Langkah 2: Membuat tabel

Langkah pertama adalah mendefinisikan skema dan menetapkan constraint primary key untuk kedua tabel. Kita juga mendefinisikan relasi foreign key antara orders.customer_id dan customers.customer_id untuk menunjukkan integritas relasional.

Untuk tabel customers, primary key-nya adalah customer_id.

Untuk tabel orders, primary key-nya adalah order_id.

CREATE TABLE customers (
    customer_id SERIAL PRIMARY KEY, -- Auto-incremented surrogate key
    name TEXT NOT NULL,
    email TEXT UNIQUE -- Ensures no duplicate email addresses
);

CREATE TABLE orders (
    order_id UUID DEFAULT gen_random_uuid() PRIMARY KEY, -- Globally unique identifier
    order_date DATE NOT NULL,
    customer_id INT REFERENCES customers(customer_id) ON DELETE CASCADE -- Enforces referential integrity
);

Penjelasan:

  • customer_id menggunakan kata kunci SERIAL untuk menghasilkan ID unik secara otomatis.
  • email memiliki constraint UNIQUE untuk mencegah duplikasi.
  • order_id adalah UUID yang dibuat otomatis melalui gen_random_uuid().
  • Klausul ON DELETE CASCADE memastikan bahwa menghapus pelanggan juga menghapus pesanan yang terkait.

Berikut tampilan yang seharusnya terlihat di antarmuka pgAdmin:

membuat tabel

Langkah 3: Menyisipkan data contoh

Selanjutnya, kita mengisi tabel dengan record contoh untuk mengamati bagaimana primary dan foreign key berperilaku selama operasi insert yang umum. Data ini mensimulasikan skenario e-niaga dasar.

INSERT INTO customers (name, email) VALUES
('Alice Tan', '[email protected]'),
('Ben Koh', '[email protected]'),
('Clara Lim', '[email protected]');

INSERT INTO orders (order_date, customer_id) VALUES
('2025-07-01', 1),
('2025-07-02', 2),
('2025-07-03', 3);

Berikut tampilan yang seharusnya terlihat di antarmuka pgAdmin:

menyisipkan data ke tabel

Langkah 4: Mengkueri data

Terakhir, kita menjalankan kueri SQL JOIN untuk mengambil informasi dari kedua tabel, menunjukkan bagaimana foreign key memungkinkan join relasional yang mulus antara orders dan customers.

Berikut kode yang akan kita jalankan:

SELECT o.order_id, o.order_date, c.name, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;

Berikut contoh outputnya:

membuat kueri dan join

Seperti yang terlihat pada gambar di atas, tabel output menampilkan data dari kedua tabel. Misalnya, tabel hasil join mencakup field order_date dari tabel orders dan field name dari tabel customers.

Kesimpulan

Primary key SQL merupakan fondasi basis data relasional, menegakkan keunikan, memungkinkan kueri yang efisien, dan mendukung integritas data. 

Kita telah membahas prinsip, klasifikasi, sintaks, praktik terbaik, dan strategi lanjutan untuk primary key SQL. Untuk sumber belajar lebih lanjut, lihat kursus Introduction to Relational Databases in SQL atau Joining Data in SQL.

Jika Anda lebih menyukai bacaan tutorial, panduan Integrity Constraints in SQL atau SQL Joins Cheat Sheet juga akan sangat membantu.

FAQ Primary Key SQL

Apa perbedaan antara natural key dan surrogate key?

Natural key diturunkan dari data dunia nyata yang sudah ada (misalnya, email atau nomor identitas nasional), sedangkan surrogate key adalah nilai yang dihasilkan sistem (misalnya, ID yang bertambah otomatis) yang digunakan semata-mata untuk mengidentifikasi baris secara unik.

Bagaimana composite primary key meningkatkan desain basis data?

Composite primary key menggunakan beberapa kolom untuk memastikan keunikan, yang dapat memodelkan relasi di tabel junction dengan lebih baik dan menegakkan keunikan multi-atribut dalam relasi many-to-many.

Apa praktik terbaik untuk memilih primary key?

Primary key yang baik harus unik, stabil (tidak berubah seiring waktu), minimal ukurannya, dan idealnya numerik demi kinerja dan efisiensi pengindeksan.

Bagaimana primary key berkontribusi pada integritas data?

Primary key memastikan setiap baris dalam tabel dapat diidentifikasi secara unik, mencegah record duplikat dan mendukung referensi yang akurat melalui foreign key.

Dapatkah Anda menjelaskan peran primary key dalam membangun relasi antar tabel?

Primary key berfungsi sebagai titik referensi bagi foreign key di tabel lain, memungkinkan integritas relasional dan mendukung relasi one-to-many atau many-to-many dalam skema yang ternormalisasi.

Austin Chia

Penulis

Austin Chia

Saya Austin, seorang blogger dan penulis teknologi dengan pengalaman bertahun-tahun sebagai data scientist dan analis data di bidang kesehatan. Memulai perjalanan teknologi dengan latar belakang biologi, kini saya membantu orang lain melakukan transisi yang sama melalui blog teknologi saya. Ketertarikan saya pada teknologi mendorong kontribusi tulisan saya untuk puluhan perusahaan SaaS, menginspirasi orang lain dan membagikan pengalaman saya.

Topik

Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai