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
Keunikan: Memastikan setiap nilai pada kolom primary key bersifat unik.
Tidak boleh null: Kolom primary key tidak boleh berisi nilai NULL.
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.
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.
CREATETABLE employees (
employee_id SERIALPRIMARYKEY,-- Automatically generates unique integers
name TEXTNOTNULL,-- Basic text field, required
email TEXTUNIQUE-- Unique constraint to prevent duplicate emails);Didukung oleh
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.
ALTERTABLE employees ADDPRIMARYKEY(employee_id);Didukung oleh
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.
ALTERTABLE employees DROPCONSTRAINT employees_pkey;Didukung oleh
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.
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
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:
Tambahkan kolom surrogate key.
Isi kunci untuk record yang sudah ada.
Modifikasi kueri aplikasi.
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:
Pilih sistem operasi Anda (Windows, macOS, atau Linux).
Unduh dan jalankan installer, pastikan Anda memasang pgAdmin (antarmuka grafis) bersama server PostgreSQL.
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).
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.
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_tutorialDidukung oleh
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.
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:
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.
Berikut tampilan yang seharusnya terlihat di antarmuka pgAdmin:
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;Didukung oleh
Berikut contoh outputnya:
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.
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.
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.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai dasar-dasar SQL yang diperlukan untuk bisnis, pelajari cara menulis kueri SQL, dan mulailah menganalisis data Anda menggunakan bahasa yang kuat ini.
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
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:
INTEGERatauSERIAL: 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:
SERIAL,BIGSERIAL, atauUUID. 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.
course_enrollmentsdapat menggunakan kunci kompositstudent_iddancourse_id.Pertimbangan:
Kunci tambahan yang digunakan di basis data
Selain primary key, ada beberapa kunci lain yang dapat digunakan, seperti:
Jika Anda sedang memutuskan field data mana yang akan digunakan sebagai primary key, pertimbangkan faktor-faktor berikut:
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.
Pelajari lebih lanjut perintah SQL di SQL Basics Cheat Sheet kami.
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_idsebagai primary key.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.
Gunakan pernyataan ini untuk menghapus constraint primary key yang ada. Nama constraint
employees_pkeymengikuti 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.
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:
INSERT ... ON CONFLICTuntuk menghindari duplikasi.Strategi auto-increment dan pengenal global
Tipe
SERIAL,BIGSERIAL, danIDENTITYdi 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
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 CASCADEON UPDATE CASCADESET NULLdanSET DEFAULTPengindeksan dan optimasi kueri
Indeks unik pada primary key mempercepat kueri
SELECTdanJOIN. 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 ANALYZEuntuk 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
INT,UUID).Kesalahan implementasi umum
Perbaikannya meliputi:
ALTER TABLE.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:
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:
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:
pgAdmin(antarmuka grafis) bersama server PostgreSQL.systemctldi Linux).pgAdminuntuk mengelola dan mengkueri basis data secara visual.postgresdengan nama pengguna PostgreSQL Anda yang sebenarnya jika berbeda.pgAdmin, klik kanan "Databases" dan pilih "Create > Database".CREATE DATABASE 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:
customersdanorders.Tabel
customersmenggunakan surrogate key demi kesederhanaan, sementara tabelordersmenggunakan 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_iddancustomers.customer_iduntuk menunjukkan integritas relasional.Untuk tabel
customers, primary key-nya adalahcustomer_id.Untuk tabel
orders, primary key-nya adalahorder_id.Penjelasan:
customer_idmenggunakan kata kunciSERIALuntuk menghasilkan ID unik secara otomatis.emailmemiliki constraintUNIQUEuntuk mencegah duplikasi.order_idadalahUUIDyang dibuat otomatis melaluigen_random_uuid().ON DELETE CASCADEmemastikan bahwa menghapus pelanggan juga menghapus pesanan yang terkait.Berikut tampilan yang seharusnya terlihat di antarmuka pgAdmin:
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.
Berikut tampilan yang seharusnya terlihat di antarmuka pgAdmin:
Langkah 4: Mengkueri data
Terakhir, kita menjalankan kueri SQL
JOINuntuk mengambil informasi dari kedua tabel, menunjukkan bagaimana foreign key memungkinkan join relasional yang mulus antara orders dan customers.Berikut kode yang akan kita jalankan:
Berikut contoh outputnya:
Seperti yang terlihat pada gambar di atas, tabel output menampilkan data dari kedua tabel. Misalnya, tabel hasil join mencakup field
order_datedari tabelordersdan fieldnamedari tabelcustomers.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.