Key d Pernya di Database Relasional Djoni Darmawikarta djoni_darmawikarta@yahoo.ca Lisensi Dokumen: Seluruh dokumen di IlmuKomputer.Com dapat digunak, dimodifikasi d disebark secara bebas untuk tuju buk komersial (nonprofit), deng syarat tidak menghapus atau merubah atribut penulis d pernyata copyright yg disertak dalam setiap dokumen. Tidak diperbolehk melakuk penulis ulg, kecuali mendapatk ijin terlebih dahulu dari IlmuKomputer.Com. Key didalam database relasional dibutuhk untuk menghubungk satu tabel data deng yg lain. Sebagai contoh (lihat diagram berikut) nomor_pes sebagai key di tabel pes digunak didalam tabel barg_pes untuk mengidentifikasi (menghubungk) pes yg berisi (terdiri dari) barg-barg tersebut. pes nomor_pes tggal_pes 1071 01-JAN-200 1072 0-JUN-200 barg_pes nomor_pesa n nama_bara ng jumla h 1071 Pinsil 100 1071 Penggaris 10 1071 Penghapus 200 1072 Pinsil 500 1072 Pap tulis 50 Untuk mencapai tuju ini (mengidentifikasi/menghubungk), key harus unik didalam tabel. Deng kata lain, nilai data yg ditentuk sebagai key tidak boleh dipakai di order yg lain. Jadi, nomor pes 1071 hya boleh ada disatu order. Secara umum, dpat dikatak, bahwa suatu nilai key hya boleh dipakai disatu baris data (row). Ada sejumlah sifat-sifat penting yg harus dipahami tentg key ini, agar rcg d pemakainya optimum. 1
Seljutnya ak dibahas: Tiga macam key (Primary, Unique, d Foreign), sifat-sifat d penerapnya di Oracle. Agar mudah disimak d praktis, contoh-contoh ak menyertai pembahas. 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 ditentuk); Unique key boleh null. Perlu dipahami, bahwa suatu nilai null tidak pernah sama deng nilai null yg lain, bahk tidak pernah sama deng dirinya sendiri. Jadi, disuatu tabel sejumlah data (row) Unique key-nya boleh lebih dari satu yg, atau semuya, memiliki nilai null. Misalk kita membuat tabel pes deng SQL statement sebagai contoh Unique key, sebagai berikut: CREATE TABLE pes ( nomor_pes VARCHAR2(6) CONSTRAINT nomor_pes_uk UNIQUE, tggal_pes DATE NOT NULL); Kemudi kita masukk dua buah data (baris) sebagai berikut: INSERT INTO pes VALUES (1071, 01-JAN-200 ); INSERT INTO pes (tggal_pes) VALUES ( 0-JUN-200 ); Maka kedua data masuk kedalam tabel. nomor_pes tggal_pesa n 1071 01-JAN-200 0-JUN-200 Tetapi daik nomor_pes adalah Primary key, maka INSERT yg kedua ak gagal. Oracle ak mengeluark pes kesalah (error message): ORA-01400: cnot insert NULL into ("PESANAN"."NOMOR_PESANAN") Key boleh terdiri lebih dari satu kolom data (didalam istilah database relasional, bagi data terkecil disebut kolom (column), seperti nomor_pes dalam contoh kita). Misalk perusaha punya beberapa cabg d nomor pes disatu ktor tidak ada hubung deng nomor 2
pes ktor lain, deng kata lain nomor pes yg sama digunak disemua ktor, maka untuk membedak nomor nomor pes diseluruh cabg ditambahk identitas cabg (misalnya kode_cabg) sebagai bagi dari key. Key yg terdiri lebih dari satu kolom seperti ini disebut composite key (dalam contoh kasus kita composite key adalah nomor_pes d kode_cabg). Secara umum dapat dikatak, bahwa untuk composite key, keuniknya ditinjau dari gabung semua kolom data yg membentuknya. Untuk Unique key, bila salah satu kolom atau lebih didalam composite key bernilai null, nilai kolom lainya yg ada didalam composite key tidak boleh sama; tetapi diperbolehk bila semua kolomnya bernilai null. Memilih d menggunak kolom sebagai key perlu memperhatik atur berikut: Disatu tabel hya boleh ada satu Primary key. Disatu tabel boleh ada lebih dari satu Unique key. Untuk composite key, kolom yg sudah dipakai oleh Primary key atau Unique key boleh digunak lagi untuk Unique key yg lain, asal tidak seluruh kolom. Didalam hubung kedua tabel dalam contoh diatas, tabel pes sering disebut sebagai tabel org-tua (parent), sedg barg_pes disebut tabel ak (child) nomor_pes di tabel barg_pes, yg nilainya mengikuti nilai dari tabel pes, disebut Foreign key dapat dikatak bahwa: Foreign key adalah penghubung kedua table. Foreign key boleh berasal dari Primary d/atau Unique key tabel parent, d boleh composite. Istilah lain yg kadg dipakai adalah migrated key (maksudnya sama deng Foreign key) Database Oracle tidak membolehk data di tabel child dima foreign key-nya belum ada di tabel parent. Misalnya, kita tidak bisa memasukk data barg pes untuk pes bernomor 107 sebelum pes nomor 107 ada didalam tabel pes. Kita buat tabel barg_pes deng Foreign key yg menghubungknya (me-referensi) deng nomor_pes (key di tabel pes) sebagai berikut: CREATE TABLE barg_pes ( nomor_pes VARCHAR2(6) CONSTRAINT nomor_pes_fk REFERENCES pes(nomor_pes), nama_barg VARCHAR2(20), jumlah NUMBER(6));
Foreign key di tabel barg_pes ini kita beri nama sama yaitu nomor_pes. Sedg nama constraint-nya adalah nomor_pes_fk. Kemudi kita masukk dua buah data: INSERT INTO barg_pes VALUES (1071, 'Pensil'); INSERT INTO barg_pes VALUES (107, 'Pap tulis'); SQL statement yg kedua ak gagal. Karena sifat menghalgi inilah, maka key di tabel parent (primary d unique) diistilahk penjaga integritas (integrity constraint) Perlu dicatat bahwa ada jenis constraint lain didalam database relasional, selain pengguna key yg dibahas disini. Tetapi, bila kita menggunak Unique key dari tabel parent sebagai Foreign key di tabel child, Oracle tidak menghalgi adya nilai null didalam Foreign key ini maka ak ada barg_pes yg tidak memiliki pesnya! Maka kita harus berhati-hati bila menggunak Unique key sebagai Foreign key! Foreign key, didalam tabel child boleh digunak sebagai Primary atau Unique key, misalnya karena Foreign key ini ak digunak oleh tabel yg lain sebagai Foreign key (hubung ber-rtai) Efek Samping Oracle otomatis membuat index untuk semua key, primary maupun unique. Index memerluk tempat (didalam disk). Selain membutuhk tempat, index bisa memperlambat respon (performce), karena setiap kali ada data baru maka selain ditabelnya, di-index-nya juga harus ditambahk key dari data baru bersgkut; demiki juga bila kita mengubah nilai key yg sudah ada. (Mengubah nilai key sgat tidak dijurk, salah satu alas adalah karena semua tabel yg terhubung juga harus segera di-update!) Ada teknik-teknik untuk mengi masalah respon d perubah nilai key ini, d Oracle juga menyediak fasilitasnya. (Tetapi tidak dibahas di tulis ini) Sar Pemakai Key Pilih kolom yg tepat, tentuk macam (primary d/atau unique) d jumlahnya, sesuai spesifikasi (peratur pelaksa bisnis d kebutuh datya), untuk menghubungk tabel-tabel didalam database. Terapk deng menggunak fasilitas bersgkut yg tersedia didalam 4
database yg dipakai. Fasilitas key d sifat-sifatnya di Microsoft SQL Server misalnya tidak sama percis deng Oracle. 5