Pengertian Primary key Dan Foreign key.
Pengertian Primary Key & Foreign Key
a. “Primary Key” adalah field kunci
/ utama dari suatu tabel yang menunjukkan bahwa field yang menjadi kunci
tersebut tidak bisa diisi dengan data yang sama, / dengan kata lain Primary key
menjadikan tiap record memiliki identitas sendiri-sendiri yang membedakan satu
sama lainnya (unik).
Primary Key berguna pada saat
menampilkan record hasil pencarian (searching), pengurutan (sorting), dan
berbagai operasi query lainnya. Dengan memilih rimary key, proses pencarian,
pengurutan dan proses penampilan data dan lainnya berlangsung lebih cepat.
“Foreign key” adalah satu attribute
yang melengkapi satu relationship yang menunjukan ke induknya.
b. Satu tabel tidak boleh memiliki
lebih dari satu primary key, karena primary key merupakan variable data yang
menjadi identitas utama dari tabel tersebut.
Key dan Peranannya di Database relasional:
Untuk mencapai tujuan ini (mengidentifikasi/menghubungkan),
key harus
unik didalam tabel. Dengan kata lain, nilaidata yang
ditentukan sebagai
key tidak boleh dipakai di order yanglain. Jadi, nomor
pesanan 1071 hanya
boleh ada disatu order. Secara umum, dpat dikatakan, bahwa
suatu nilai
key hanya boleh dipakai disatu baris data (row).
Ada sejumlah sifat-sifat penting yang harus dipahami tentang
key ini,agar
rancangan dan pemakaiannya optimum.
Selanjutnya akan dibahas: Tiga macam key (Primary, Unique,
dan Foreign),
sifat-sifat dan penerapannya di Oracle. Agar mudah disimak
dan praktis,
contoh-contoh akan menyertai pembahasan.
Tiga Macam Key
Seperti sudah disinggung diatas, key,baik Primary maupun
Unique,
haruslah unik. Selain unik, nilai Primary key tidak boleh
null (kosong, tidak
diketahui, tidak dapat ditentukan); Unique key boleh null.
Perlu dipahami,
bahwa suatu nilai null tidak pernah sama dengan nilai null
yang lain,
bahkan tidak pernahsama dengan dirinya sendiri. Jadi,
disuatu tabel
sejumlah data (row) Unique key-nya boleh lebih dari satu
yang, atau
semuanya, memiliki nilai null.
Misalkan kita membuat tabel pesanan dengan SQLstatement
sebagai
contoh Unique key,sebagai berikut:
CREATE TABLE pesanan (
nomor_pesanan VARCHAR2(6)
CONSTRAINT nomor_pesanan_uk UNIQUE
, tanggal_pesan DATE NOT NULL);
Kemudian kita masukkan dua buah data (baris) sebagai
berikut:
INSERT INTO pesanan VALUES (1071, ‘01-JAN-2003’);
INSERT INTO pesanan (tanggal_pesan) VALUES (‘30-JUN-2003’);
Maka kedua data masuk kedalam tabel.
Kemudian kita masukkan dua buah data (baris) sebagai
berikut:
INSERT INTO pesanan VALUES (1071, ‘01-JAN-2003’);
Tetapi andaikan nomor_pesanan adalah Primary
key,maka INSERT yang
kedua akan gagal.Oracle akan mengeluarkanpesan kesalahan
(error
message):
ORA-01400: cannot insert NULL into
("PESANAN"."NOMOR_PESANAN")
Key boleh terdiri lebih dari satu kolom data (didalam
istilah database
relasional, bagian data terkecil disebut kolom (column),
seperti
nomor_pesanandalam contoh kita). Misalkan perusahaan punya
beberapa
cabang dan nomor pesanan disatu kantor tidak ada hubungan
dengan nomor
pesanan kantor lain, dengan kata lainnomor pesanan yang sama
digunakan
disemua kantor, maka untuk membedakan nomor nomor pesanan
diseluruh
cabang ditambahkan identitas cabang (misalnya kode_cabang)
sebagai
bagian darikey.Key yang terdiri lebih dari satu kolom seperti
ini disebut
compositekey (dalam contoh kasus kita compositekey adalah
nomor_pesanan dan kode_cabang). Secara umum dapat dikatakan,
bahwa
untuk composite key,keunikannya ditinjau dari gabungan semua
kolom data
yang membentuknya.
Untuk Unique key,bila salah satu kolom atau lebih didalam
compositekey
bernilai null, nilai kolom lainya yang ada didalam composite
key tidak boleh
sama; tetapi diperbolehkan bila semuakolomnya bernilai null.
Memilih dan menggunakan kolom sebagaikeyperlu memperhatikan
aturan
berikut:
1.Disatu tabel hanya boleh ada satu Primary key.
2.Disatu tabel boleh ada lebih dari satu Unique key.
3.Untuk composite key,kolom yang sudah dipakai oleh Primary
key atau
Unique key boleh digunakan lagi untuk Unique key yang lain,
asal tidak
seluruh kolom.
Didalam hubungan kedua tabel dalam contoh diatas, tabel
pesanansering
disebut sebagai tabel orang-tua (parent), sedang
barang_pesanandisebut
tabel anak (child)
nomor_pesanandi tabel barang_pesanan, yang nilainya
mengikuti nilai dari
tabel pesanan, disebut Foreign key –dapat dikatakan bahwa:
Foreign key
adalah penghubung kedua table. Foreign key boleh berasal dari
Primary
dan/atau Unique key tabel parent, dan boleh composite.
Istilah lain yang
kadang dipakai adalah “migrated key” (maksudnya sama dengan
Foreign
key) Database Oracle tidak membolehkan data di tabel child
dimana foreign
key-nya belum ada di tabel parent. Misalnya, kita tidak
bisamemasukkan
data barang pesanan untuk pesanan bernomor 1073 sebelum
pesanan nomor
1073 ada didalam tabel pesanan.
Kita buat tabel
barang_pesanandenganForeignkey yang
menghubungkannya (me-referensi) dengan nomor_pesanan(key
ditabel
pesanan) sebagai berikut:
CREATE TABLE barang_pesanan (
nomor_pesanan VARCHAR2(6)
CONSTRAINT
nomor_pesanan_fk REFERENCES
pesanan(nomor_pesanan),
nama_barang VARCHAR2(20),
jumlah NUMBER(6));
Foreign key di tabel barang_pesanan ini kita beri nama sama
yaitu
nomor_pesanan. Sedang nama constraint-nya adalah
nomor_pesanan_fk.
Kemudian kita masukkan dua buah data:
INSERT INTO barang_pesanan VALUES (1071, 'Pensil');
INSERT INTO barang_pesanan VALUES (1073, 'Papan tulis');
SQLstatement yang kedua akan gagal.
Karena sifat menghalangi inilah, maka key ditabel parent
(primary dan
unique) diistilahkan penjaga integritas (integrity
constraint) Perlu dicatat
bahwa ada jenis constraint lain didalam database relasional,
selain
penggunaan key yang dibahas disini.
Tetapi, bilakitamenggunakan Unique key dari tabel parent
sebagai Foreign
key di tabel child, Oracle tidak menghalangi adanya nilai
null didalam
Foreign key ini –maka akanada barang_pesananyang tidak
memiliki
pesanannya! Maka kita harus berhati-hati bila menggunakan
Unique key
sebagai Foreign key!
Foreign key,didalam tabel child boleh digunakan
sebagaiPrimary atau
Unique key,misalnya karena Foreign key ini akandigunakan
oleh tabel
yang lain sebagai Foreign key (hubungan ber-rantai)
Efek Samping
Oracle otomatis membuat index untuk semua key, primary
maupun unique.
Index memerlukan tempat (didalam disk).
Selain membutuhkan tempat, indexbisa memperlambat respon
(performance), karena setiap kali ada data baru maka selain
ditabelnya,
di-index-nya juga harus ditambahkan key dari data baru
bersangkutan;
demikian juga bila kita mengubah nilai key yang sudah ada.
(Mengubah
nilai key sangat tidak dianjurkan, salah satu alasan adalah
karena semua
tabel yang terhubung juga harus segera di-update!) Ada
teknik-teknik
untuk menangani masalah respon dan perubahan nilai key ini,
dan Oracle
juga menyediakan fasilitasnya. (Tetapi tidak dibahas di
tulisan ini)
Saran Pemakaian Key
Pilih kolom yang tepat, tentukan macam (primary dan/atau
unique) dan
jumlahnya, sesuai spesifikasi (peraturan pelaksanaan bisnis
dan kebutuhan
datanya), untuk menghubungkan tabel-tabel didalam database.
Terapkan
dengan menggunakan fasilitas bersangkutan yang tersedia
didalam
database yang dipakai. Fasilitas key dan sifat-sifatnya di
Microsoft SQL
Server misalnya tidak sama percis denganOracle.
Comments
Post a Comment