Contoh ini diambil dari w3schools .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Pemahaman saya adalah bahwa kedua kolom bersama ( P_Id
dan LastName
) mewakili kunci utama untuk tabel Persons
. Apakah ini benar?
- Mengapa seseorang ingin menggunakan beberapa kolom sebagai kunci utama daripada satu kolom?
- Berapa banyak kolom yang dapat digunakan bersama sebagai kunci utama dalam tabel tertentu?
Jawaban:
Pemahaman Anda benar.
Anda akan melakukan ini dalam banyak kasus. Salah satu contohnya adalah dalam hubungan seperti
OrderHeader
danOrderDetail
. PK diOrderHeader
mungkinOrderNumber
. PK diOrderDetail
mungkinOrderNumber
DANLineNumber
. Jika itu salah satu dari keduanya, itu tidak akan unik, tetapi kombinasi keduanya dijamin unik.Alternatifnya adalah dengan menggunakan kunci primer yang dihasilkan (non-cerdas), misalnya dalam kasus ini
OrderDetailId
. Tapi kemudian Anda tidak akan selalu melihat hubungan itu dengan mudah. Beberapa orang lebih suka satu cara; beberapa lebih memilih cara lain.sumber
Contoh lain dari kunci utama majemuk adalah penggunaan tabel Asosiasi. Misalkan Anda memiliki tabel orang yang berisi sekumpulan orang dan tabel grup yang berisi sekumpulan grup. Sekarang Anda ingin membuat hubungan banyak ke banyak pada orang dan grup. Artinya setiap orang bisa tergabung dalam banyak kelompok. Berikut adalah tampilan struktur tabel menggunakan kunci utama majemuk.
sumber
Contoh W3Schools tidak mengatakan kapan Anda harus menggunakan kunci utama majemuk, dan hanya memberikan contoh sintaks menggunakan tabel contoh yang sama seperti untuk kunci lainnya.
Pilihan contoh mereka mungkin menyesatkan Anda dengan menggabungkan kunci yang tidak berarti (P_Id) dan kunci alami (LastName). Pilihan kunci primer yang aneh ini mengatakan bahwa baris berikut valid sesuai dengan skema dan diperlukan untuk mengidentifikasi siswa secara unik. Secara intuitif ini tidak masuk akal.
Bacaan Lebih Lanjut: Debat kunci utama yang hebat atau hanya Google
meaningless primary keys
atau bahkan membaca pertanyaan SO iniFWIW - 2 sen saya adalah untuk menghindari kunci utama multi-kolom dan menggunakan satu bidang id yang dihasilkan (kunci pengganti) sebagai kunci utama dan menambahkan batasan (unik) tambahan jika diperlukan.
sumber
Anda menggunakan kunci majemuk (kunci dengan lebih dari satu atribut) setiap kali Anda ingin memastikan keunikan kombinasi beberapa atribut. Kunci atribut tunggal tidak akan mencapai hal yang sama.
sumber
Ya, keduanya membentuk kunci utama. Terutama dalam tabel di mana Anda tidak memiliki kunci pengganti , mungkin perlu untuk menentukan beberapa atribut sebagai pengenal unik untuk setiap catatan (contoh buruk: tabel dengan nama depan dan nama belakang mungkin memerlukan kombinasi keduanya untuk dijadikan unik).
sumber
Beberapa kolom dalam sebuah kunci akan, secara umum, berkinerja lebih buruk daripada kunci pengganti. Saya lebih suka memiliki kunci pengganti dan kemudian indeks unik pada kunci multikolom. Dengan begitu Anda bisa memiliki performa yang lebih baik dan keunikan yang dibutuhkan tetap terjaga. Dan lebih baik lagi, ketika salah satu nilai dalam kunci tersebut berubah, Anda tidak perlu memperbarui satu juta entri turunan dalam 215 tabel anak.
sumber
Pertanyaan kedua Anda
adalah implementasi spesifik: itu didefinisikan dalam DBMS aktual yang sedang digunakan. [1], [2], [3] Anda harus memeriksa spesifikasi teknis dari sistem database yang Anda gunakan. Beberapa sangat rinci, beberapa tidak. Menelusuri web tentang batasan semacam itu bisa jadi sulit karena terminologinya bervariasi. Istilah kunci primer komposit harus wajib;)
Jika Anda tidak dapat menemukan informasi eksplisit, coba buat database pengujian untuk memastikan Anda dapat mengharapkan penanganan yang stabil (dan spesifik) dari pelanggaran batas (yang diharapkan). Berhati-hatilah untuk mendapatkan informasi yang benar tentang ini: terkadang batas terakumulasi, dan Anda akan melihat hasil yang berbeda dengan tata letak database yang berbeda.
sumber
Menggunakan kunci utama di beberapa tabel sangat berguna saat Anda menggunakan tabel perantara dalam database relasional.
Saya akan menggunakan database yang pernah saya buat sebagai contoh dan khususnya tiga tabel di dalam tabel itu. Saya membuat database untuk webcomic beberapa tahun yang lalu. Satu tabel disebut "komik" —daftar semua komik, judulnya, nama file gambarnya, dll. Kunci utamanya adalah "comicnum".
Tabel kedua adalah "karakter" —nama mereka dan deskripsi singkat. Kunci utama ada di "charname".
Karena setiap komik — dengan beberapa pengecualian — memiliki banyak karakter dan setiap karakter muncul dalam beberapa komik, tidak praktis untuk meletakkan kolom di "karakter" atau "komik" untuk mencerminkannya. Sebaliknya, saya membuat tabel ketiga yang disebut "comicchars", dan itu adalah daftar karakter mana yang muncul di komik. Karena tabel ini pada dasarnya bergabung dengan dua tabel, maka diperlukan dua kolom: charname dan comicnum, dan kunci utama ada di keduanya.
sumber
Kami membuat kunci primer komposit untuk menjamin nilai kolom keunikan yang menyusun satu rekaman. Ini adalah kendala yang membantu mencegah penyisipan data yang tidak boleh digandakan.
yaitu: Jika semua ID siswa dan nomor akta kelahiran ditetapkan secara unik untuk satu orang. Maka, sebaiknya jadikan kunci utama untuk seseorang sebagai komposisi nomor pelajar dan akta kelahiran karena akan mencegah Anda memasukkan dua orang yang memiliki ID pelajar dan akta kelahiran yang berbeda secara tidak sengaja.
sumber