Tidak.
Saya akan mengatakan pasti ada kasus ketika kunci bidang tunggal lebih rendah daripada kunci majemuk, setidaknya untuk tujuan kunci asing . Itu tidak berarti Anda tidak harus memiliki kunci pengganti bidang tunggal juga jika Anda suka, tapi saya pribadi lebih suka kunci yang paling sering digunakan sebagai target kunci asing untuk disebut kunci utama
Saya akan mencoba mengilustrasikan poin saya dalam contoh-contoh berikut, di mana:
brand
adalah car marque, mis. Ford, Toyota dll
dealer
adalah dealer fisik, terkait dengan merek (mis. dealer Ford yang hanya menjual Ford)
model
adalah jenis mobil misalnya Ford Focus, Ford Fiesta dll
stock
adalah jumlah halaman depan mobil saat ini untuk setiap dealer
Jika kita membuat kunci pengganti bidang tunggal untuk dealer
dan model
sebagai berikut:
create table brand( brand_id integer primary key );
create table dealer( dealer_id integer primary key,
brand_id integer references brand )
create table model( model_id integer primary key,
brand_id integer references brand )
create table stock( model_id integer references model,
dealer_id integer references dealer,
quantity integer,
primary key(model_id, dealer_id) )
maka dimungkinkan untuk memasukkan baris ke dalam stock
tautan yang menghubungkan Ford dealer
ke model "Toyota". Menambahkan brand_id references brand
untuk stock
hanya membuat masalah lebih buruk. Di sisi lain jika kita menyimpan kunci asing sebagai bagian dari kunci utama sebagai berikut:
create table brand( brand_id integer primary key );
create table dealer( brand_id integer references brand,
dealer_id integer,
primary key(brand_id, dealer_id) )
create table model( brand_id integer references brand,
model_id integer,
primary key(brand_id, model_id) )
create table stock( brand_id integer,
model_id integer,
dealer_id integer,
quantity integer,
primary key(brand_id, model_id, dealer_id),
foreign key(brand_id, model_id) references model,
foreign key(brand_id, dealer_id) references dealer )
sekarang aturan bahwa "Ford" dealer hanya dapat menyediakan mobil "Ford" ditegakkan secara alami oleh model.
Perhatikan bahwa dalam contoh 'kunci komposit', dealer_id
mungkin atau mungkin tidak unik, sesuai dengan preferensi. Itu tidak perlu unik (yaitu kunci alternatif), tetapi sangat sedikit yang hilang dengan membuatnya jadi (mungkin ruang penyimpanan kecil) dan itu bisa sangat berguna sehingga cara saya biasanya mengaturnya, misalnya:
create table dealer( brand_id integer references brand,
dealer_id serial unique,
primary key(brand_id, dealer_id) )