0Pricing
SQL Academy · Pelajaran

Kunci Utama dan Keunikan

Pahami kunci utama, kunci pengganti vs kunci alami, kunci gabungan, serta alasan setiap baris memerlukan pengenal unik yang dapat dipercaya.

Kunci Utama dan Keunikan adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Mengapa Setiap Baris Membutuhkan ID Unik

Untuk memperbarui atau menghapus baris tertentu dengan aman, Anda harus dapat menunjuknya tanpa ambiguitas.

  • Dua pengguna bernama "Alice Adams" dapat ada
  • Namun, dua pengguna dengan id = 42 harus NOT ada
  • Pengenal unik tersebut disebut kunci utama

Mendeklarasikan Kunci Utama

Anda menandai sebuah kolom sebagai kunci utama saat membuat tabel:

CREATE TABLE products (
  id    BIGSERIAL PRIMARY KEY,
  sku   VARCHAR(50) NOT NULL,
  name  VARCHAR(200) NOT NULL,
  price NUMERIC(10,2) NOT NULL
);

Kunci Utama = NOT NULL + UNIQUE

PRIMARY KEY secara otomatis menegakkan:

  • NOT NULL — nilai kunci utama tidak boleh kosong
  • UNIQUE — tidak ada dua baris yang dapat berbagi nilai kunci utama yang sama

Basis data juga membuat indeks unik pada kunci utama, sehingga pencarian berdasarkan id berlangsung cepat.

Kunci Pengganti vs Kunci Alami

Anda memiliki dua pilihan untuk kunci utama:

  • Pengganti — ID sintetis yang dibuat oleh basis data (BIGSERIAL, UUID). Paling umum digunakan dalam aplikasi modern.
  • Alami — pengenal dari dunia nyata (email, ISBN). Berisiko karena orang dapat mengganti alamat email.

Praktik terbaik: gunakan ID pengganti dan tambahkan batasan UNIQUE pada kunci alami.

BIGSERIAL: Bilangan Bulat yang Bertambah Otomatis

Di PostgreSQL, BIGSERIAL membuat kolom 64-bit yang bertambah otomatis dan didukung oleh sebuah urutan.

CREATE TABLE orders (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL,
  total NUMERIC(10,2) NOT NULL
);

-- You omit id on insert and the DB fills it in:
INSERT INTO orders (user_id, total) VALUES (7, 99.50);

Kunci Utama UUID

Alternatifnya adalah UUID 128-bit, yang berguna ketika ID harus unik di berbagai sistem atau dibuat di sisi klien.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE sessions (
  id    UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  user_id BIGINT NOT NULL,
  ip    INET
);

Kunci Utama Gabungan

Terkadang pengenal alami merupakan gabungan beberapa kolom:

CREATE TABLE order_items (
  order_id  BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  quantity  INT NOT NULL,
  PRIMARY KEY (order_id, product_id)
);

-- The pair (order_id, product_id) must be unique
-- A product can appear at most once per order

Batasan UNIQUE vs Kunci Utama

Anda dapat mendeklarasikan kolom lain sebagai unik tanpa menjadikannya kunci utama:

CREATE TABLE users (
  id    BIGSERIAL PRIMARY KEY,
  email VARCHAR(255) NOT NULL UNIQUE,
  username VARCHAR(50) UNIQUE
);

-- INSERT below fails on the second row:
INSERT INTO users (email, username) VALUES ('a@x.com', 'alice');
INSERT INTO users (email, username) VALUES ('a@x.com', 'bob');  -- ERROR

Yang Terjadi saat Penyisipan Duplikat

Jika Anda mencoba menyisipkan kunci utama duplikat, basis data menolak seluruh pernyataan:

ERROR:  duplicate key value violates unique constraint "users_pkey"
DETAIL:  Key (id)=(42) already exists.

Ini baik karena mencegah kerusakan data yang tidak terdeteksi.

Pencarian Baris berdasarkan Kunci Utama Berlangsung Cepat

Indeks unik pada kunci utama memberikan pencarian O(log n) bahkan pada skala miliaran baris.

-- Index Scan using users_pkey on users (cost=0.43..8.45 rows=1)
SELECT email FROM users WHERE id = 42;

Jangan Gunakan Kembali ID

Bahkan setelah Anda menghapus sebuah baris, jangan gunakan kembali kunci utamanya. Tabel lain atau sistem eksternal mungkin masih merujuknya. Biarkan urutan terus bertambah — ID tidak mahal.

Ringkasan

Kunci utama memberikan setiap baris pegangan yang stabil dan unik.

  • Utamakan kunci pengganti (BIGSERIAL atau UUID)
  • Gunakan UNIQUE untuk kunci alami yang tidak boleh memiliki duplikat
  • Kunci utama gabungan memodelkan "pasangan ini harus unik"

Pemeriksaan Singkat

Apa yang secara implisit ditegakkan oleh PRIMARY KEY?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kunci Utama dan Keunikan” gratis?

Ya — teks lengkap “Kunci Utama dan Keunikan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kunci Utama dan Keunikan”?

Pahami kunci utama, kunci pengganti vs kunci alami, kunci gabungan, serta alasan setiap baris memerlukan pengenal unik yang dapat dipercaya. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Kunci Utama dan Keunikan” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Apa Itu RDBMS dan Mengapa Tabel Penting
  2. Kunci Utama dan Keunikan
  3. NULL: Nilai Kebenaran Ketiga
  4. Ikhtisar Tipe Data: INT VARCHAR DATE BOOLEAN
← Kembali ke SQL Academy