BAB IV MODEL RELASIONAL Model E-R yang dibahas pada bab III adalah model konseptual, yang lebih disukai untuk melakukan perancangan basis data. Model E-R lebih menekankan kepada pembentukan entitas yang mewakili
data dan hubungan antar entitas, serta
visualisasinya menggunakan diagram E-R. Model yang akan dibahas adalah model Relasional yang merupakan model lojik, yang lebih dekat hubungannya dengan implementasi fisik (bagaimana data disimpan dalam basis data). Model Relasional dikembangkan oleh E. F. Codd pada 1970. Sampai saat ini model relasional merupakan model yang paling banyak digunakan dalam berbagai aplikasi basis data mulai dari aplikasi di PC sampai mainframe. Walaupun kemunculannya lebih awal dari model E-R, saat ini keduanya saling melengkapi untuk bisa menghasilkan rancangan basis data relasional yang tepat. Dalam pengembangan sistem basis data, setelah tahapan pemodelan data dengan model E-R adalah perancangan basis data secara lojik dengan model Relasional. Yang dilakukan adalah mentransformasi model E-R menjadi model data Relasional. Selain itu kita bisa menguji rancangan basis data dengan menggunakan DML yang tersedia dan mendapatkan rancangan yang lebih baik melalui proses Normalisasi.
4.1. Konsep Model Relasional Pada model E-R, basis data dinyatakan sebagai sekumpulan himpunan entitas yang saling berelasi. Dalam model relasional, basis data direpresentasikan sebagai kumpulan relasi-relasi. Relasi (relation) adalah tabel dua dimensi dengan nama yang unik yang terdiri dari sejumlah baris dan kolom (hati-hati, konsep relation pada model Relasional berbeda dengan relationship pada model E-R). Relasi merupakan sekelompok entitas yang saling berkaitan (dengan kata lain, relasi menyatakan himpunan entitas). Baris menyatakan fakta yang terkait dengan entitas atau relationship tertentu, sedangkan kolom menyatakan atribut dari fakta yang disimpan. Nama tabel dan nama kolom membantu dalam mengartikan nilai yang ada pada setiap baris. Keterhubungan antar satu tabel dengan yang lain dinyatakan dengan penggunaan atribut yang bernilai sama dengan atribut sejenis di tabel lain. Pada beberapa buku teks basis data, relasi lebih dikenal dengan tabel (table). Gambar 4.1 menunjukkan contoh tabel dengan nama MATAKULIAH. Setiap baris dalam tabel MATAKULIAH memberikan informasi tentang entitas mata kuliah tertentu. Nama
kolom
(Kode_MK,
Nama_MK,
SKS,
JS,
Prasyarat)
digunakan
untuk
menginterpretasikan nilai data pada setiap baris, berdasar kolom tempat nilai tersebut Basis Data – Darmawan Satyananda
45
berada. Nilai dalam satu kolom memiliki tipe data dan domain yang sama. Struktur relasi MATAKULIAH bisa dinyatakan dengan MATAKULIAH(Kode_MK, Nama_MK, SKS, JS, Prasyarat). Relasi MATAKULIAH terhubung dengan relasi MATAKULIAH (rekursif) melalui kolom Prasyarat. Nilai kolom itu akan mengacu ke salah satu nilai yang ada di kolom Kode_MK. atribut
MATAKULIAH
tupel
Kode_MK MAU401 MAU402 MAU485 MAU487 MAU423
Nama_MK Kalkulus I Kalkulus II Fisika Dasar Kimia Dasar Metode Numerik
SKS 3 3 3 2 3
JS 4 4 4 4 4
Semester 1 2 1 1 5
Prasyarat Null MAU401 Null null MAU402
Gambar 4.1. Contoh tabel MATAKULIAH
4.1.1. Domain, Tupel, Atribut, dan Relasi Dalam pengertian basis data relasional, baris tabel disebut sebagai tupel (tuple), nama kolom disebut sebagai atribut, dan tabel disebut sebagai relasi (relation). Tabel pada Gambar 4.1 merupakan contoh sebuah relasi dengan 6 buah atribut yaitu Kode_MK, Nama_MK, SKS, JS, Semester, dan Prasyarat. Domain adalah himpunan nilai yang diperbolehkan muncul dalam setiap kolomnya. Setiap domain memiliki deskripsi, tipe data dan format data tertentu. Nilai setiap atribut dalam tabel harus berada dalam domain tertentu. Contoh deskripsi, tipe data, dan format data untuk beberapa domain ada pada Tabel 4.1. Tabel 4.1 Contoh deskripsi domain data Nama domain
Deskripsi
Tipe data
No_Telp_Lokai
Himpunan nomor telepon lokal yang valid pada suatu daerah
11 karakter
Kode_MataKuliah
Himpunan kode matakuliah yang valid pada suatu jurusan perguruan tinggi Himpunan nilai yang mungkin untuk menyatakan SKS
6 karakter
SKS_Matakuliah
1 digit integer
Format data (dddd) dd-dddd [d menyatakan digit angka dan 4 digit pertama menyatakan kode wilayah] CCC ddd [C menyatakan alfabet dan d menyatakan digit angka] [0..4] (nilai yang sah untuk SKS bernilai dari 0 sampai 4)
Skema relasi R, yang dinyatakan oleh R(A1, A2, ...., An), adalah himpunan atribut-atribut R={A1, A2, ..., An}. Skema relasi digunakan untuk menjelaskan struktur suatu relasi. R adalah nama relasi dan A adalah atribut relasi. Skema relasi dari tabel pada Gambar 4.1 bisa dituliskan sebagai:
Basis Data – Darmawan Satyananda
46
MATAKULIAH(Kode_MK, Nama_MK, SKS, JS, Semester, Prasyarat) Skema relasi tersebut bernama MATAKULIAH dengan 6 atribut. Domain dari Ai dilambangkan dengan dom(Ai). Beberapa domain yang sesuai untuk relasi MATAKULIAH antara lain: ·
dom(Kode_MK) = Kode_MataKuliah
·
dom(Prasyarat) = Kode_Matakuliah
·
dom(SKS) = SKS_Matakuliah Derajat relasi adalah banyaknya atribut pada skema relasi. Jadi relasi
MATAKULIAH memiliki derajat relasi 6. Relasi r dari skema relasi R(A1, A2, ...., An) yang dilambangkan r(R), adalah himpunan n-tupel r = {t1, t2, ..., tm}. Setiap n-tupel t adalah daftar berurut (ordered list) dari n nilai t =
, di mana setiap nilai vi, 1
extension. Seperti halnya pada model E-R, skema R relatif jarang berubah, selama tidak dilakukan penambahan atau pengurangan atribut. Instance relasi lebih sering berubah seiring dengan perubahan pada dunia nyata yang direfleksikan oleh instance tersebut.
4.1.2. Karakteristik Relasi Tidak semua tabel adalah relasi. Beberapa karakter relasi yang membedakannya dengan tabel non relasional adalah sebagai berikut: 1. Setiap relasi dalam basis data mempunyai nama yang unik. 2. Setiap tupel dalam relasi adalah unik, sehingga tidak mungkin ada dua tupel yang identik. Hal ini sesuai dengan sifat himpunan yang tidak memperbolehkan lebih dari satu anggota yang bernilai sama. Untuk membedakan satu tupel dengan tupel lain dalam suatu relasi, maka disyaratkan setiap relasi memiliki kunci primer. Kunci primer adalah atribut atau kombinasi atribut yang secara unik membedakan tupeltupel dalam relasi. 3. Urutan tupel dalam relasi tidak dipentingkan. Pengubahan urutan tupel tidak akan mengubah semantik relasi. Hal ini juga sesuai dengan sifat himpunan yang tidak membedakan urutan anggotanya. 4. Setiap atribut dalam relasi selalu mempunyai nama yang unik 5. Setiap nilai atribut adalah atomik dan relasi tidak memperbolehkan atribut komposit dan yang bernilai banyak. Atribut bernilai banyak harus disajikan dalam relasi yang terpisah, dan atribut komposit disajikan dalam bentuk atribut komponen sederhana. 6. Urutan atribut dalam relasi tidaklah penting. Pengubahan urutan atribut tidak akan mengubah semantik relasi. Tupel dapat dilihat sebagai himpunan dari pasangan
Basis Data – Darmawan Satyananda
47
(, ), di mana setiap pasangan memberikan nilai dari pemetaan ari satu atribut Ai ke nilai vi dari dom(Ai). Urutan atribut tidak terlalu penting karena nama atribut ditulis dengan nilainya, sehingga 2 buah tupel akan identik selama banyaknya atribut dan nilainya sama walaupun dengan urutan yang berbeda.
4.1.3. Atribut Kunci pada Relasi Sebuah relasi adalah himpunan tupel-tupel. Sesuai dengan sifat himpunan, maka semua tupel dalam relasi juga tidak ada yang sama. Juga karena tupel adalah himpunan atribut-atribut maka semua atribut dalam tupel juga berbeda. Dengan demikian tidak ada dua atau lebih tupel yang mempunyai kombinasi nilai yang sama untuk setiap atributnya. Secara umum, dalam setiap skema relasi R terdapat subset atribut-atribut dengan sifat bahwa tidak ada dua tupel dalam sembarang instance relasi r di R yang mempunyai kombinasi nilai yang sama untuk atribut-atribut ini. Bila subset tersebut dilambangkan dengan SK, maka untuk sembarang dua tupel t1 dan t2 yang berbeda dari instance relasi r di R dipunyai: t1[SK] ¹ t2[SK]. Kunci super (superkey) skema relasi R adalah himpunan satu atau lebih atribut yang dapat digunakan untuk mengenali secara unik sebuah tupel dalam suatu relasi atau sebagai pembeda antara satu tupel dengan tupel lain. Kunci super memberikan batasan keunikan (unique constraints) bahwa tidak ada dua atau lebih tupel berbeda dengan nilai kunci super yang sama. Setiap relasi paling tidak mempunyai satu kunci super, yaitu himpunan semua atributnya. Pada skema MATAKULIAH, {Kode_MK} adalah kunci super karena tidak ada matakuliah yang mempunyai kode yang sama. Gabungan beberapa atribut yang salah satunya kunci super juga dapat disebut sebagai kunci super suatu relasi, seperti {Kode_MK, SKS, Prasyarat}. Sebuah kunci (key) K dari skema relasi R adalah kunci super di R dengan ketentuan tambahan bahwa penghilangan sembarang atribut A dari K akan menghasilkan suatu himpunan atribut K' yang bukan kunci super di R. Jadi sebuah kunci adalah satu kunci super minimal, yaitu kunci super yang tidak dapat dihilangkan atributnya. {Kode_MK} selain sebagai kunci super juga bertindak sebagai kunci karena atribut tersebut tidak dapat dihilangkan. Atribut Kode_MK dalam {Kode_MK, SKS, Prasyarat} adalah kunci karena bila Kode_MK dihilangkan akan menyisakan {SKS, Prasyarat} yang bukan merupakan kunci super. Himpunan {Kode_MK, SKS, Prasyarat} sendiri bukanlah kunci dari MATAKULIAH karena penghilangan SKS atau Prasyarat, atau keduanya dari himpunan akan masih menyisakan kunci super yaitu Kode_MK. Untuk mudahnya, pengertian kunci bisa disamakan dengan kunci super, yaitu atribut yang bisa secara unik mengidentifikasi tupel dalam suatu relasi. Sebuah skema relasi mungkin mempunyai lebih dari satu kunci, masing-masing
Basis Data – Darmawan Satyananda
48
kunci tersebut disebut sebagai kunci kandidat (candidate key). Contohnya adalah relasi MOBIL yang bisa mempunyai dua kunci yaitu NoPolisi dan NoMesin. Salah satu kunci tersebut dijadikan kunci primer (primary key), yaitu kunci yang digunakan untuk mengidentifikasi tupel dalam relasi. Kunci komposit (composite key) adalah kunci primer yang terdiri dari lebih dari satu atribut. Dalam pemilihan kunci primer dari sejumlah kunci kandidat sebaiknya dipilih kunci yang hanya mempunyai satu atau sesedikit mungkin atribut. Dalam sebuah skema relasi harus ada himpunan atribut yang menjadi kunci untuk mengidentifikasi setiap tupel dalam relasi. Penentuan atribut yang menjadi kunci didasarkan pada makna atribut tersebut dalam skema, nilai atribut yang harus unik dan atribut harus tetap menjadi kunci apabila terdapat penambahan tupel baru (nilai atribut kunci pada tupel baru tidak boleh sama dengan atribut kunci yang lama). Bila pada model E-R keterhubungan antara himpunan entitas dinyatakan dengan
relationship,
maka
dalam
model
Relasional
keterhubungan
dinyatakan
dengan
penggunaan kunci tamu (foreign key). Kunci tamu adalah atribut yang ditambahkan pada suatu relasi, yang nilainya sesuai dengan kunci primer pada relasi lain yang berhubungan. Lebih lanjut tentang bagaimana menambahkan kunci tamu akan dibahas pada sub bab 4.2.2 tentang pengubahan diagram E-R menjadi skema Relasional.
4.2. Basis Data Relasional Basis data relasional terdiri dari banyak relasi, dengan tupel-tupel di dalam relasi terhubung bersama dalam berbagai cara. Dalam bagian ini akan dibahas mengenai Basis data relasional, skema basis data relasional, dan aturan yang ada di dalamnya.
4.2.1. Skema dan Instance Basis Data Relasional Skema basis data relasional S adalah himpunan skema relasi S = {R1, R2, ..., Rm} dan himpunan aturan integritas (Integrity Constraint) IC. Aturan integritas diterapkan untuk menjamin bahwa data yang disimpan akan tetap bernilai benar (aturan integritas akan dijelaskan pada sub bab 4.2.4). Instance atau state basis data relasional DB dari skema S adalah himpunan instance relasi DB = {r1, r2, ..., rm}. Setiap ri adalah sebuah
instance dari Ri dan ri memenuhi aturan integritas yang ditentukan oleh IC.
4.2.2. Pengubahan Skema E-R Menjadi Skema Relasional Seperti yang telah disebutkan di awal bab, model Relasional bisa disusun dari model E-R. Untuk mengubah skema E-R (dalam bentuk diagram E-R) menjadi skema Relasional atau pemetaan Relasional (relational mapping) dapat dilakukan dalam beberapa tahapan sebagai berikut: 1. Untuk setiap himpunan entitas reguler E dalam skema E-R, dibentuk relasi R yang
Basis Data – Darmawan Satyananda
49
memuat semua atribut simpel E. Untuk atribut komposit, masukkan atribut komponen simpelnya saja (misal atribut Alamat terdiri dari Jalan, Kota, dan KodePos, maka yang digunakan sebagai atribut relasi baru adalah ketiga atribut simpel ini, bukan Alamat). Gunakan pengenal (identifier) E sebagai kunci primer R. Bila pengenalnya adalah komposit, maka himpunan atribut simpel secara bersama-sama menjadi kunci primer R. Dari skema E-R basis data PERUSAHAAN pada bab III, buatlah relasi KARYAWAN, DEPARTEMEN, PROYEK sesuai dengan himpunan entitas KARYAWAN, DEPARTEMEN, PROYEK. Pilih atribut NIP dari himpunan entitas KARYAWAN, KodeDepartemen dari DEPARTEMEN, dan KodeProyek dari PROYEK, untuk dijadikan sebagai kunci relasi KARYAWAN, DEPARTEMEN, PROYEK. Atribut yang menjadi kunci tamu belum dimasukkan dulu, akan dilakukan pada tahap berikutnya. 2. Untuk setiap himpunan entitas lemah W dengan himpunan entitas pemilik E dibentuk relasi R yang memuat semua atribut simpel (atau komponen simpel dari atribut komposit) dari W sebagai atribut R. Tambahkan di R atribut baru yang sama dengan kunci primer himpunan entitas pemilik E, sebagai kunci tamu. Kunci primer R adalah kombinasi dari kunci primer himpunan entitas pemilik E dan kunci parsial himpunan entitas lemah W. Kembali ke contoh, buatlah relasi TANGGUNGAN yang sesuai dengan himpunan entitas lemah TANGGUNGAN. Tambahkan di relasi TANGGUNGAN atribut baru berupa kunci primer KARYAWAN (himpunan entitas pemilik). Atribut baru ini digunakan sebagai kunci tamu, misal diberi nama sebagai NIP_Kar (perubahan nama atribut bukan suatu keharusan). Kunci primer relasi TANGGUNGAN adalah kombinasi {NIP_Kar, NamaTanggungan} karena NamaTanggungan adalah kunci parsial dari TANGGUNGAN. 3. Untuk setiap himpunan relasi biner R 1:1 dalam skema E-R tentukan salah satu relasi yang himpunan entitas asalnya berpartisipasi total di R sebagai relasi S, dan relasi pasangannya sebagai relasi T. Tentukan juga kunci primernya. Masukkan kunci primer T sebagai kunci tamu S. Masukkan semua atribut simpel (atau komponen simpel dari atribut komposit) himpunan relasi R sebagai atribut S. Pada skema E-R terdapat himpunan relasi 1:1 MEMIMPIN antara himpunan entitas KARYAWAN dan DEPARTEMEN. Pilih DEPARTEMEN sebagai S karena partisipasinya yang total dalam MEMIMPIN. Masukkan kunci primer relasi KARYAWAN sebagai kunci tamu dalam relasi DEPARTEMEN, beri nama NIP_Manajer. Masukkan juga atribut TglMulaiManajer dari himpunan relasi MEMIMPIN ke dalam relasi DEPARTEMEN. Alternatif pemetaan himpunan relasi 1:1 dapat dilakukan dengan menggabungkan dua himpunan entitas dan relasi ke dalam suatu relasi tunggal. Hal ini berguna
Basis Data – Darmawan Satyananda
50
apabila kedua partisipasinya adalah total dan ada himpunan entitas yang tidak berpartisipasi di himpunan relasi yang lain. 4. Untuk setiap himpunan relasi biner R 1:N, tentukan relasi S sebagai himpunan entitas yang berpartisipasi pada sisi N dan relasi T sebagai yang berpartisipasi pada sisi 1, masing-masing tentukan juga kunci primernya. Kunci tamu relasi S adalah kunci primer relasi T. Hal ini karena setiap entitas di sisi N terhubung ke paling banyak 1 entitas pada himpunan entitas sisi 1. Masukkan sembarang atribut simpel (atau komponen simpel dari atribut komposit) dari himpunan relasi 1:N sebagai atribut S. Sebagai contoh adalah himpinan relasi 1:N MEMPUNYAI dan MENGAWASI. Pada MEMPUNYAI, yang berlaku sebagai S adalah KARYAWAN. Masukkan kunci primer relasi DEPARTEMEN sebagai kunci tamu relasi KARYAWAN, beri nama KodeDep_Kar. Untuk MENGAWASI masukkan kunci primer dari relasi KARYAWAN sebagai kunci tamu relasi KARYAWAN itu sendiri, beri nama NIP_Pengawas. Ubah relasi MENGONTROL dengan cara yang sama. 5. Untuk setiap himpunan relasi biner R M:N, buat sebuah relasi baru S yang menyatakan R. Kunci tamu S adalah kunci primer dari dua relasi yang menyatakan himpunan entitas yang berpartisipasi. Kombinasi kedua kunci ini juga sebagai kunci primer relasi S. Bila ada, masukkan sebarang atribut simpel (atribut penjelas) dari himpunan relasi M:N (atau komponen simpel dari atribut komposit) sebagai atribut S. Seandainya atribut penjelas itu merupakan identifier, maka dalam relasi S juga tetap sebagai kunci. Kembali ke contoh, himpunan relasi M:N BEKERJA_DI diubah menjadi relasi BEKERJA_DI. Masukkan kunci primer relasi KARYAWAN dan PROYEK sebagai kunci tamu di BEKERJA_DI (misal diberi nama NIP_Kar dan NoProyek_Kar). Masukkan juga atribut penjelas JamKerja pada relasi BEKERJA_DI. Kunci primer dari relasi BEKERJA_DI adalah kombinasi dari atribut kunci tamu {NIP_Kar, NoProyek_Kar}. 6. Untuk setiap atribut bernilai banyak A, buat relasi baru R yang terdiri dari atribut yang sesuai dengan A dan atribut kunci primer K dari relasi yang mempunyai atribut A. Kunci primer relasi R adalah kombinasi A dan K. Bila atribut bernilai banyak adalah komposit, masukkan komponen simpelnya. Contoh atribut bernilai banyak adalah atribut LOKASI_DEP pada himpunan entitas DEPARTEMEN. Buat relasi LOKASI_DEP dengan 2 atribut: Lokasi dan KodeDep_Lok. Lokasi
adalah atribut
bernilai banyak dari
relasi
DEPARTEMEN, sementara
KodeDep_Lok (sebagai kunci tamu) adalah kunci primer relasi DEPARTEMEN. Kunci primer relasi LOKASI_DEP adalah kombinasi dari {KodeDep_Lok, Lokasi}. Dengan demikian setiap lokasi yang dipunyai oleh DEPARTEMEN akan dinyatakan sebagai tupel yang terpisah di LOKASI_DEP.
Basis Data – Darmawan Satyananda
51
7. Untuk himpunan relasi n-ary R, n>2, buatlah relasi baru S yang menyatakan R. Sebagai kunci tamu S adalah kunci primer dari relasi yang sesuai dengan himpunan entitas yang berpartisipasi. Masukkan juga semua atribut simpel himpunan relasi (atau komponen simpel dari atribut komposit) sebagai atribut S. Kunci primer S adalah kombinasi semua kunci tamu. Bila aturan partisipasi (min, max) dari salah satu himpunan entitas E yang berpartisipasi di R mempunyai nilai max=1, maka kunci primer S dapat berupa kunci tamu tunggal yang mengacu ke relasi E. Hal ini karena setiap entitas e di E akan berpartisipasi paling banyak dalam 1 instance relasi R sehingga dapat digunakan sebagai pengenal relasi tersebut. Sebagai contoh adalah relasi terner MEMASOK pada Gambar 3.11.a. Dari ketiga himpunan relasi yang ada, bentuklah 3 buah relasi PEMASOK (dengan kunci primer Nama_Pemasok), PROYEK (dengan kunci primer Nama_Proyek), dan BARANG (dengan kunci primer Kode_Barang). Untuk himpunan relasi MEMASOK, bentuk relasi MEMASOK dengan atribut Nama_Pemasok, Nama_Proyek, Kode_Barang, Jumlah. Kunci primernya adalah kombinasi {Nama_Pemasok, Nama_Proyek, Kode_Barang}. Gambar 4.2 menunjukkan skema basis data relasional PERUSAHAAN yang didapat dari diagram E-R pada bab 3, dan Gambar 4.3 menunjukkan instance basis data relasional yang berhubungan dengan skema PERUSAHAAN. KARYAWAN NamaKaryawan
NIP
TglLahir
Alamat JenisKlm
Gaji
NIP_Pengawas KodeDep_Kar
DEPARTEMEN NamaDepartemen KodeDepartemen NIP_Manajer
TglMulai_Manajer
LOKASI_DEP KodeDep_Lok
Lokasi
PROYEK NamaProyek
KodeProyek
LokasiProyek KodeDep_Pryk
BEKERJA_DI NIP_Kar
KodeProyek_Kar
JamKerja
TANGGUNGAN NIP_Kar
NamaTanggungan
JenisKlm
TglLahir
Hubungan
Gambar 4.2. Skema basis data relasional PERUSAHAAN
Basis Data – Darmawan Satyananda
52
KARYAWAN
Nama Karyawan Yasin Burhan Dewi Nur Wahyu N. Gatot Rahmat Nina
DEPARTEMEN
BEKERJA_DI
NIP
TglLahir
1234567 3334455 9998877 6668844 4534534 8886655 9879879
09-01-1965 08-12-1975 19-07-1974 10-01-1970 24-03-1970 20-10-1973 01-11-1974
Jl. Jombang 10 Malang Jl. Gadang 100 Malang Jl. Rampal 444 Malang Jl. Kediri 1 Malang Jl. Mergan 20 Malang Jl. Jetis 26 Surabaya Jl. Ldg.Sari Malang
NamaDepartemen
Kode NIP_Manajer Departemen
Riset Keuangan Teknik SDM Pengawasan
5 4 1 2 3
3334455 4534534 8886655 9879879
KodeProyek_Kar
JamKerja
NIP_Kar 1234567 1234567 6668844 4534534 4534534 3334455 3334455 3334455
1 2 3 1 2 2 1 3
Jenis Klm
Alamat
32 30 40 20 20 10 10 10
L L P P L L P
TglMulai_ Manajer
NIP_ Pengawas
Gaji 400000 500000 350000 375000 250000 400000 400000
3334455 8886655 9879879 3334455 3334455 null null
PROYEK
20-05-1995 10-11-1996 01-01-1998 01-01-1999
TANGGUNGAN
KodeDep _Kar 5 5 4 5 5 1 2
NamaProyek Komputerisasi Produk X Produk Y Diklat
NIP_Kar 1234567 1234567 9998877 9998877 8886655 8886655
LOKASI_DEP
1 1 4 5 5
KodeProyek 1 2 3 10
NamaTanggungan Lia Desi Rudy Hery Rini Wahyu
Gambar 4.3. Contoh instance basis data PERUSAHAAN.
KodeDep_Lok
LokasiProyek Jakarta Surabaya Malang Malang
JenisKlm P P L L P L
TglLahir 10-10-1970 01-02-1990 04-05-1997 06-07-1995 01-10-1975 02-04-1997
Lokasi Surabaya Malang Malang Malang Madiun
KodeDep_Proyek 1 5 5 2
Hubungan Istri Anak Anak Anak Istri Anak
4.2.3. Kunci Tamu (Foreign Key) Pada bagian sebelumnya sudah disinggung konsep kunci tamu (foreign key). Untuk dua skema relasi R1 dan R2, himpunan atribut FK dalam skema R1 adalah kunci tamu R1 bila memenuhi dua aturan berikut: 1. Atribut-atribut di FK mempunyai domain yang sama dengan atribut kunci primer PK dari skema relasi R2. Atribut FK dikatakan mengacu ke relasi R2. 2. Nilai FK dalam tupel t1 pada R1 adalah sebagai nilai PK untuk beberapa tupel t2 di R2 atau FK bisa bernilai null. Dapat dikatakan t1[FK] = t2[PK] dan tupel t1 mengacu ke tupel t2. R1 disebut sebagai relasi yang mengacu dan R2 disebut sebagai relasi yang diacu. Sebagai
contoh
adalah
Gambar
4.2.
Dalam
relasi
KARYAWAN,
atribut
KodeDep_Kar mengacu ke departemen tempat karyawan bekerja. KodeDep_Kar adalah kunci tamu dari KARYAWAN yang mengacu kepada relasi DEPARTEMEN. Hal ini berarti bahwa sebuah nilai KodeDep_Kar dalam sembarang tupel t1 pada relasi KARYAWAN harus sesuai dengan nilai kunci primer DEPARTEMEN (atribut KodeDepartemen) dalam beberapa tupel t2 relasi DEPARTEMEN; atau nilai KodeDep_Kar dapat berupa Null yang menyatakan bahwa karyawan tersebut tidak bekerja untuk departemen manapun. Contohnya karyawan yang bernama Burhan yang bekerja pada departemen 5 (dep. Riset). Sebuah kunci tamu dapat mengacu pada relasi itu sendiri. Contohnya adalah atribut NIP_Pengawas dalam relasi KARYAWAN yang mengacu kepada pengawas karyawan tersebut. Pengawas adalah karyawan yang lain yang dinyatakan oleh tupel dalam relasi KARYAWAN. Jadi NIP_Pengawas adalah kunci tamu yang mengacu kepada relasi KARYAWAN itu sendiri.
4.2.4. Aturan Integritas dalam Skema Basis Data Relasional Aturan integritas adalah sejumlah aturan yang berlaku terhadap relasi, yang menjamin akurasi dan integritas data dalam basis data. Ada empat aturan integritas dalam skema basis data yang harus diikuti oleh setiap instance basis data untuk skema tersebut. Aturan tersebut adalah: 1. Aturan kunci (key constraints) yang menentukan kunci kandidat dari setiap skema relasi; nilai kunci kandidat harus unik untuk setiap tupel dalam sembarang relasi. 2. Aturan domain (domain constraints) yang menyatakan bahwa nilai atribut semua tupel pada kolom yang sama harus dari domain yang sama. 3. Aturan integritas entitas (entity integrity constraints) yang menyatakan bahwa nilai atribut yang menjadi kunci primer tidak boleh null. Hal ini dikarenakan nilai kunci primer digunakan untuk mengenali tupel dalam suatu relasi dan juga digunakan oleh
Basis Data – Darmawan Satyananda
54
kunci tamu untuk melakukan pengacuan. 4. Aturan integritas referensial (referential integrity constraints) adalah aturan yang digunakan untuk menjaga konsistensi di antara tupel-tupel dalam dua relasi yang saling berhubungan. Aturan ini menyatakan bahwa bila nilai kunci tamu pada satu relasi harus sesuai dengan nilai kunci primer pada relasi yang lain yang diacu, atau kunci tamunya bernilai null untuk menunjukkan tidak adanya pengacuan. Aturan integritas referensial dapat digambar dalam bentuk diagram, dengan menggambar sebuah garis yang menghubungkan setiap kunci tamu dengan atribut relasi yang diacu. Diagram untuk skema basis data PERUSAHAAN dapat dilihat pada gambar 4.4. Gambar 4.5 menunjukkan penggambaran aturan integritas referensial pada Microsoft Access. KARYAWAN NamaKaryawan
NIP
TglLahir
Alamat JenisKlm
Gaji
NIP_Pengawas KodeDep_Kar
DEPARTEMEN NamaDepartemen KodeDepartemen NIP_Manajer
LOKASI_DEP KodeDep_Lok
TglMulai_Manajer
PROYEK Lokasi
NamaProyek
KodeProyek
LokasiProyek KodeDep_Pryk
BEKERJA_DI NIP_Kar
KodeProyek_Kar
JamKerja
TANGGUNGAN NIP_Kar
NamaTanggungan
JenisKlm
TglLahir
Hubungan
Gambar 4.4. Aturan integritas referensial untuk skema basis data PERUSAHAAN.
4.3. Operasi Update dalam Relasi Ada tiga operasi update dasar dalam relasi, yaitu penyisipan (insert), penghapusan (delete) dan modifikasi (modify). Operasi penyisipan digunakan untuk menyisipkan tupel baru dalam sebuah relasi, delete untuk menghapus tupel dan modify untuk merubah nilai beberapa atribut. Bila suatu operasi update dijalankan, maka harus diguji apakah aturan integritas yang ada tidak dilanggar.
Basis Data – Darmawan Satyananda
55
Gambar 4.5. Penggambaran integritas referensial pada Microsoft Access.
4.3.1. Operasi Penyisipan Untuk operasi penyisipan yang diuji adalah aturan integritasnya. Contoh operasi penyisipan (bandingkan dengan data pada tabel): 1. Insert <'Ali Topan', '6678989', '05-04-60', 'Jl. Pisang 100 Jakarta', L, 300000, null, 4> Penyisipan ini bisa diterima karena memenuhi semua aturan. 2. Insert <'Ali Topan', '9998877', '05-04-60', 'Jl. Pisang 100 Jakarta', L, 300000, null, 4> Penyisipan melanggar aturan kunci karena sudah ada tupel dalam relasi KARYAWAN dengan nilai atribut NIP yang sama. 3. Insert <'Ali Topan', null, '05-04-60', 'Jl. Pisang 100 Jakarta', L, 300000, null, 4> Penyisipan ini melanggan aturan integritas entitas (mempunyai nilai null untuk kunci primer) sehingga tidak bisa diterima. 4. Insert <'Ali Topan', '6678989', '05-04-60', 'Jl. Pisang 100 Jakarta', L, 300000, null, 7> Penyisipan ini melanggar aturan integritas referensial karena tidak ada departemen dengan KodeDep_Kar = 7. Bila ada pelanggaran, maka DBMS akan menempuh 2 cara: menolak penyisipan (dan menjelaskan alasan penolakan), dan membetulkan kesalahan (DBMS memintas pengguna untuk memasukkan nilai yang betul).
4.3.2. Operasi Penghapusan Contoh operasi penghapusan: 1. Delete tupel BEKERJA_DI dengan NIP_Kar='1234567' dan KodeProyek_Kar=1 Penghapusan ini bisa diterima.
Basis Data – Darmawan Satyananda
56
2. Delete tupel KARYAWAN dengan NIP='4534534' Penghapusan ini tidak bisa diterima karena dua tupel di BEKERJA_DI mengacu pada tupel ini, sehingga bila dihapus akan melanggar aturan integritas referensial. Penghapusan hanya dapat melanggar aturan integritas referensial, karena dimungkinkan untuk menghapus suatu tupel yang sedang diacu oleh tupel lain. Ada 3 pilihan bila operasi ini melanggar aturan: (1) menolak penghapusan, (2) meneruskan penghapusan dengan menghapus tupel yang sedang mengacu pada tupel yang sedang dihapus (cascading), (3) membetulkan nilai atribut yang menyebabkan kesalahan (dirubah menjadi null atau mengacu pada tupel valid yang lain, kecuali untuk kunci primer karena akan melanggar aturan integritas entitas).
4.3.3. Operasi Modifikasi Contoh perubahan: 1. Ubah Gaji dari tupel KARYAWAN dengan NIP='9998877' menjadi ‘400000’ Perubahan diterima 2. Ubah KodeDep_Kar dari tupel KARYAWAN dengan NIP '9998877' menjadi ‘7’ Perubahan ditolak karena melanggar integritas referensial 3. Ubah NIP dari tupel KARYAWAN dengan NIP '9998877' menjadi '9879879' Perubahan ditolak karena melanggar aturan kunci primer dan aturan integritas referensial. Merubah atribut yang bukan sebagai kunci primer atau kunci tamu tidak menjadi masalah, DBMS hanya perlu mengecek apakah nilainya mempunyai tipe data dan domain yang betul. Karena kunci primer digunakan untuk mengenali tupel, maka bila kunci tamu diubah, DBMS harus yakin apakah nilai yang baru mengacu pada sebuah tupel pada relasi yang diacu.
4.4. Aljabar Relasional Seperti yang disebutkan di bab III, kelemahan model E-R adalah tidak adanya DML untuk memanipulasi basis data. Model E-R memiliki DML yang dinamakan dengan Aljabar Relasional. Di dalam model E-R, data dimodelkan dalam bentuk relasi yang merupakan himpunan, sehingga operasi aljabar relasional sebenarnya adalah operasi himpunan. Aljabar relasional adalah bahasa query prosedural yang berbentuk sebagai sekumpulan operasi untuk memanipulasi keseluruhan relasi. Operasi-operasi ini digunakan untuk memilih tupel dalam satu relasi dan mengkombinasikan tupel yang berelasi (berhubungan) dari beberapa relasi untuk keperluan penentuan query tersebut. Hasilnya adalah relasi baru yang dapat dimanipulasi lebih jauh dengan operasi aljabar.
Basis Data – Darmawan Satyananda
57
Aljabar relasional menjadi dasar dari konsep manipulasi data relasional pada bahasa basis data komersial (Hansen, 1992: 212). Aljabar relasional dapat dibagi menjadi dua kelompok: (1) operasi khusus untuk basis data relasional, yaitu Select, Project, Join, dan Division, dan (2) operasi himpunan dari teori himpunan matematika (setiap relasi didefinisikan sebagai tupel) yaitu Union, Intersection, Difference, dan Cartesian Product. Semua operasi yang dilakukan berikut mengacu kepada tabel basis data PERUSAHAAN yang diberikan pada Gambar 4.3.
4.4.1. Operasi Select dan Project Kedua jenis operasi ini sama-sama digunakan untuk mendapatkan sejumlah tupel dari satu atau lebih relasi yang memenuhi kriteria tertentu.
4.4.1.1. Operasi Select Operasi Select digunakan untuk memilih tupel-tupel dalam relasi yang memenuhi kondisi seleksi tertentu (memenuhi predikat tertentu). Operasi ini dinyatakan dengan:
s
seleksi>
()
Simbol s (sigma) melambangkan operator SELECT,
seleksi>
adalah ekspresi Boolean yang dinyatakan dalam atribut relasi. Relasi hasil operasi ini mempunyai atribut yang sama dengan atribut relasi dalam . Ekspresi Boolean bisa tersusun dari sejumlah klausa dengan bentuk: , atau adalah salah satu nama atribut dalam relasi yang disebutkan. bisa berupa {=, <, <, >, >, ¹}, dan adalah sebuah nilai konstanta. Ekspresi Boolean ini juga dapat dihubungkan dengan ekspresi Boolean lain dengan operator logika AND, OR, atau NOT. Sebagai contoh, untuk memilih subhimpunan dari KARYAWAN yang bekerja di departemen 4, operasinya adalah:
s KodeDep_Kar=4 (KARYAWAN) Relasi hasil ditunjukkan pada Gambar 4.6 (beberapa atribut tidak dapat dituliskan karena keterbatasan tempat) NamaKaryawan NIP Dewi Nur 9998877
Tgl Lahir 19-07-1974
Gambar 4.6. Hasil operasi s
Basis Data – Darmawan Satyananda
.... ....
NIP_ Pengawas 9879879
KodeDep_Kar=4
KodeDep_ Kar 4
(KARYAWAN).
58
Untuk memilih tupel semua karyawan yang bekerja di departemen 4 dan gajinya>350000 atau bekerja di departemen 5 dan gajinya>300000 operasinya adalah:
s (KodeDep_Kar=4 AND Gaji>350000) OR (KodeDep_Kar=5 AND Gaji>300000) (KARYAWAN) NamaKaryawan NIP Yasin 1234567 Burhan 3334455 Wahyu N. 6668844 Gambar 4.7. Hasil operasi s Gaji>300000) (KARYAWAN)
.... .... .... ....
Gaji 400000 500000 375000
NIP_ Pengawas 3334455 8886655 3334455
KodeDep_ Kar 5 5 5
(KodeDep_Kar=4 AND Gaji>350000) OR (KodeDep_Kar=5 AND
Operator perbandingan hanya berlaku untuk atribut yang domainnya mempunyai nilai terurut, seperti domain tanggal, numerik, dan huruf. Bila domainnya adalah himpunan dari nilai yang tidak terurut, operatornya hanya {=, ¹}, seperti domain dari himpunan warna yang tidak memiliki urutan yang pasti di antara anggotanya. Operator SELECT adalah uner (unary), hanya bisa diterapkan pada relasi tunggal. Operasi seleksi dikenakan pada setiap tupel secara individual, tidak untuk lebih dari 1 tupel. Derajat relasi yang dihasilkan operasi ini adalah sama dengan relasi asli R yang dikenai operasi, karena jumlah atribut yang sama di antara keduanya. Banyaknya tupel dalam relasi hasil lebih kecil atau sama dengan jumlah tupel dalam relasi asli R. Urutan atribut relasi hasil sama dengan relasi asalnya. Sifat operasi SELECT adalah komutatif, sehingga:
s(s(R)) = s(s(R)) Relasi yang dihasilkan dari operasi tersebut adalah sama. Operasi SELECT yang bertumpuk (cascade) dapat dipecah menjadi beberapa operasi sebagai berikut:
s(s(...(s(R)))) = s AND AND ... AND (R)
4.4.1.2. Operasi Project Bila operasi SELECT memilih beberapa tupel, maka operasi PROJECT akan memilih beberapa atribut (kolom) tertentu. Bentuk umum operasi ini:
p
atribut>(
relasi>)
p (pi) adalah simbol operasi PROJECT, adalah daftar atribut-atribut relasi pada . Relasi hasil hanya mempunyai atribut seperti yang ditentukan pada dengan nama dan urutan yang sama. Derajat relasi hasil sama dengan banyaknya atribut dalam . Sebagai contoh, operasi untuk mencari nama semua karyawan dan gajinya adalah: Basis Data – Darmawan Satyananda
59
p
NamaKaryawan, Gaji (KARYAWAN)
NamaKaryawan Yasin Burhan Dewi Nur Wahyu N. Gatot Rahmat B. Nina Gambar 4.8. Hasil operasi p
Gaji 400000 500000 350000 375000 250000 400000 400000 NamaKaryawan, Gaji
(KARYAWAN)
Bila atribut yang didaftar adalah atribut yang bukan kunci, maka dimungkinkan akan muncul tupel ganda (duplikat) yang identik. Operasi PROJECT akan menghilangkan duplikasi yang ada sehingga hasilnya adalah tupel dan relasi yang valid. Contohnya adalah pada operasi untuk mencari jenis kelamin dan gaji semua karyawan, tupel yang sama akan dihilangkan berikut ini:
p
JenisKlm, Gaji (KARYAWAN)
JenisKlm L L P P P L Gambar 4.9. Hasil operasi p
Gaji 400000 500000 350000 400000 375000 250000 JenisKlm, Gaji
(KARYAWAN)
Banyaknya tupel dalam relasi hasil operasi akan lebih kecil atau sama dengan relasi aslinya, kecuali bila hasil proyeksi menyertakan kunci relasi maka jumlah tupel yang dihasilkan akan sama dengan relasi asli. Perhatikan bahwa:
p(p(R)) = p (R) selama berisi atribut dalam . Bila tidak, maka pernyataan di atas tidak berlaku. Sifat komutatif tidak berlaku dalam operasi ini.
4.4.1.3. Urutan Operasi Bila beberapa operasi aljabar relasional dilakukan secara sekaligus, operasi tersebut dapat dituliskan dalam 2 cara: (1) sebagai ekspresi aljabar relasional tunggal dengan menyusun operasi-operasi tersebut menjadi satu (nesting), dan (2) menjalankan setiap operasi pada satu waktu dan membuat relasi sementara (relasi antara). Pada cara kedua, dibentuk relasi baru untuk menyimpan hasil operasi secara sementara.
Basis Data – Darmawan Satyananda
60
Pembentukan relasi baru dilakukan dengan operasi assignment yang menggunakan operator ¬, dan menyebutkan nama relasi baru di sebelah kiri operator ¬. Misalkan untuk mendapatkan nama dan gaji semua karyawan yang bekerja di departemen 5, operasinya dapat dituliskan dengan cara pertama sebagai:
p
NamaKaryawan, Gaji (s KodeDep_Kar=5
(KARYAWAN))
sedangkan dengan cara kedua dibentuk relasi antara, sehingga operasinya menjadi: T1 ¬ s KodeDep_Kar=5 (KARYAWAN)) HASIL ¬ p NamaKaryawan, Gaji (T1) Relasi antara T1 berisi semua karyawan yang bekerja pada departemen 5, sedangkan HASIL berisi proyeksi atribut NAMA dan GAJI dari T1.
4.4.1.4. Penamaan Atribut Atribut relasi hasil operasi mempunyai nama dan urutan yang sama dengan relasi asli, yang kadangkala kurang informatif, sehingga diperlukan penamaan ulang atribut tersebut. Untuk menamai atribut tersebut dalam relasi, atribut baru dituliskan dalam kurung setelah nama relasinya sebagai berikut: TEMP ¬ s KodeDep_Kar=5 (KARYAWAN)) R(Nama_Karyawan, Gaji_Per_Bulan) ¬ p
TEMP
Nama Karyawan Yasin Burhan Wahyu N. Gatot R
NIP 1234567 3334455 6668844 4534534
TglLahir 09-01-1965 08-12-1975 10-01-1970 24-03-1970
Nama_Karyawan Yasin Burhan Wahyu N. Gatot
NamaKaryawan, Gaji (TEMP)
.... .... .... .... ....
NIP_ Pengawas 3334455 8886655 3334455 3334455
KodeDep_Kar 5 5 5 5
Gaji_Per_Bulan 400000 500000 375000 250000
Gambar 4.10. Relasi hasil penamaan Seperti yang tampak pada gambar, TEMP berisi semua karyawan yang bekerja pada departemen 5. R berisi dua atribut, yang bila tidak dinamai ulang maka namanya sama dengan nama atribut pada relasi asal.
4.4.2. Operasi Himpunan Karena relasi merupakan himpunan tupel-tupel, maka kepada relasi ini dapat dikenakan operasi himpunan. Ada empat operasi himpunan yang bisa dikenakan yaitu UNION, INTERSECTION, DIFFERENCE, dan CARTESIAN PRODUCT. Semuanya merupakan operasi biner yang dikenakan kepada dua himpunan.
Basis Data – Darmawan Satyananda
61
Terdapat syarat yang harus dipenuhi untuk operasi UNION, INTERSECTION, dan DIFFERENCE yaitu dua relasi yang dikenai operasi harus mempunyai tipe tupel yang sama (union compatibility). Dua buah relasi R(A1, A2, ..., An) dan S(B1, B2, ..., Bn) dikatakan union compatible bila mempunyai derajat yang sama dan dom(Ai)=dom(Bi) untuk 1
NIP 1234567 3334455 6668844 4534534
HASIL2
NIP 3334455 8886655
HASIL
NIP 3334455 8886655 1234567 6668844 4534534
Gambar 4.11. Contoh operasi UNION. Gambar 4.12 menunjukkan contoh lengkap operasi himpunan dan hasilnya. Terdapat dua buah relasi, SIMPAN dan PINJAM yang menyatakan nasabah yang menyimpan dan meminjam uang pada suatu cabang bank.
Basis Data – Darmawan Satyananda
62
SIMPAN
Nama_Nasabah Jeffri Suparman Heru Tony Lina Gunadi
PINJAM
Nama_Nasabah Joni Suparman Heru Junaidi Chandra Tony Anton Jeffri Bambang
(a) Nama_Nasabah Jeffri Suparman Heru Tony Lina Gunadi Joni Junaidi Chandra Anton Bambang
Nama_Nasabah Jeffri Suparman Heru Tony
Nama_Nasabah Lina Gunadi (d)
(c)
Nama_Nasabah Joni Junaidi Chandra Anton Bambang (e)
(b) Gambar 4.12. Operasi himpunan UNION, INTERSECTION, DIFFERENCE. (a) Dua Relasi yang union compatible, (b) SIMPAN È PINJAM, (c) SIMPAN Ç PINJAM, (d) SIMPAN – PINJAM, (e) PINJAM – SIMPAN. INTERSECTION dapat dinyatakan dengan UNION dan DIFFERENCE, yaitu: RÇS
º (R È S) – ((R – S) È (S – R)) º R – (R – S)
Beberapa sifat yang berlaku bagi operasi himpunan: 1. UNION dan INTERSECTION mempunyai sifat komutatif. R È S = S È R, dan R Ç S = S Ç R 2. UNION dan INTERSECTION mempunyai sifat asosiatif. R È (S È T) = (R È S) È T, dan (R Ç S) Ç T = R Ç (S Ç T) 3. UNION dan INTERSECTION dapat diterapkan kepada sebarang jumlah relasi. 4. DIFFERENCE mempunyai sifat tidak komutatif. R–S¹S–R Operasi CARTESIAN PRODUCT adalah operasi himpunan biner, tetapi relasi yang dikenai operasi ini tidak harus union compatible. Gunanya adalah untuk menggabungkan tupel-tupel dari dua relasi. Hasil dari relasi R(A1, A2, ..., An) ´ S(B1, B2, ..., Bm) adalah relasi Q dengan n+m
Basis Data – Darmawan Satyananda
63
atribut, dan dengan urutan atribut Q(A1, A2, ..., An, B1, B2, ..., Bm). Relasi hasil Q mempunyai sebuah tupel untuk setiap kombinasi tupel-tupel, masing-masing sebuah dari R dan sebuah dari S. Bila R mempunyai nR tupel dan S mempunyai nS tupel, maka Q mempunyai nR * nS tupel. Query untuk mencari nama tanggungan dari karyawan perempuan adalah: KAR_PEREMP ¬ s JenisKlm=’P’ (KARYAWAN) NAMA_KAR ¬ p NamaKaryawan, NIP (KAR_PEREMP) TANGG_KAR ¬ NAMA_KAR ´ TANGGUNGAN TANGG_SBNRNYA ¬ s NIP=NIP_Kar (TANGG_KAR) HASIL ¬ p NamaKaryawan, NamaTanggungan (TANGG_SBNRNYA) KAR_ PEREMP
NAMA_KAR
HASIL
NIP
TglLahir
9998877 6668844 9879879
19-07-1974 10-01-1970 01-11-1974
NIP_ Pengawas 9879879 3334455 Null
KodeDep_ Kar 4 5 2
NamaKaryawan NIP Dewi Nur 9998877 Wahyu N. 6668844 Nina 9879879
TANGG_KAR
TANGG_ SBNRNYA
Nama Karyawan Dewi Nur Wahyu N. Nina
Nama Karyawan Dewi Nur Dewi Nur Dewi Nur Dewi Nur Dewi Nur Dewi Nur Wahyu N. Wahyu N. Wahyu N. Wahyu N. Wahyu N. Wahyu N. Nina Nina Nina Nina Nina Nina Nama Karyawan Dewi Nur Dewi Nur
NIP 9998877 9998877 9998877 9998877 9998877 9998877 6668844 6668844 6668844 6668844 6668844 6668844 9879879 9879879 9879879 9879879 9879879 9879879
NIP_Kar 1234567 1234567 9998877 9998877 8886655 8886655 1234567 1234567 9998877 9998877 8886655 8886655 1234567 1234567 9998877 9998877 8886655 8886655
NIP
NIP_Kar
999888777 999888777
999888777 999888777
Nama Tanggungan Lia Desi Rudy Hery Rini Wahyu Lia Desi Rudy Hery Rini Wahyu Lia Desi Rudy Hery Rini Wahyu NamaTanggungan Rudy Hery
Hubungan Istri Anak Anak Anak Istri Anak Istri Anak Anak Anak Istri Anak Istri Anak Anak Anak Istri Anak Hubungan Anak Anak
NamaKaryawan NamaTanggungan Dewi Nur Rudy Dewi Nur Hery Gambar 4.13. Contoh relasi hasil CARTESIAN PRODUCT
Basis Data – Darmawan Satyananda
64
Relasi yang terbentuk dapat dilihat pada Gambar 4.13. Pertama kali, dicari semua karyawan perempuan (karyawan yang atribut JenisKlm bernilai “P”), lihat pada KAR_PEREMP. Karena atribut lain tidak diperlukan, maka hanya diambil atribut NamaKaryawan dan NIP pada relasi NAMA_KAR. Selanjutnya dengan operasi Cartesian Product, setiap karyawan perempuan dipasangkan dengan semua tanggungan, hasilnya bisa dilihat pada TANGG_KAR. Berikutnya harus dicari semua tanggungan yang nilai kunci tamu NIP_Kar sama dengan NIP, yang menunjukkan karyawan penanggung sebenarnya (lihat pada TANGG_SBNRNYA). Akhirnya ditampilkan nama karyawan dan nama tanggungannya pada relasi HASIL.
4.4.3. Operasi JOIN Umumnya
operasi
CARTESIAN
PRODUCT
tidak
digunakan
sendiri,
tapi
digabungkan dengan operasi SELECT atau PROJECT. Gabungan operasi SELECT atau PROJECT dan CARTESIAN PRODUCT adalah operasi JOIN. Operasi ini dilambangkan dengan ⋈, yang menggabungkan tupel-tupel dari dua relasi yang saling berhubungan menjadi sebuah tupel tunggal. Operasi ini sangat penting untuk basis data relasional yang mempunyai lebih dari sebuah relasi. Bentuk umum operasi JOIN untuk dua relasi R(A1, A2, ..., An) dan S(B1, B2, ..., Bm) adalah: R
S
Hasil dari operasi ini adalah relasi Q dengan n+m atribut, dan dengan urutan atribut Q(A1, A2, ..., An, B1, B2, ..., Bm). Q mempunyai satu tupel untuk setiap kombinasi tupel-tupel, satu dari R dan satu dari S, apabila memenuhi kondisi join yang disebutkan. Atribut yang dievaluasi disebut sebagai atribut join. Adanya kondisi join inilah yang membedakan dengan operasi CARTESIAN PRODUCT. Dalam JOIN hasil operasi yang ditampilkan adalah hanya tupel yang memenuhi kondisi join yang ditentukan, sedangkan dalam CARTESIAN PRODUCT semua kombinasi tupel dimunculkan sebagai hasil. Apabila tidak ada kombinasi tupel-tupel yang memenuhi kondisi join, maka hasil JOIN adalah relasi kosong (tanpa tupel). Bila R mempunyai nR tupel dan S mempunyai nS tupel maka tupel yang dihasilkan dari operasi JOIN adalah antara nol dan nR*nS tupel. JOIN umumnya dilakukan untuk mendapatkan data dari relasi lain, misalkan mencari nama manajer setiap departemen. Karena data tentang nama manajer ada di relasi KARYAWAN, sedangkan relasi DEPARTEMEN hanya menyimpan NIP karyawan yang menjadi manajer maka keduanya dijoinkan. Perintah untuk masalah tersebut adalah sebagai berikut: DEP_MNJR ¬ DEPARTEMEN NIP_Manajer=NIP KARYAWAN HASIL ¬ p NamaDepartemen, NamaKaryawan (DEP_MNJR) Hasil operasi JOIN dapat dilihat pada Gambar 4.14. Basis Data – Darmawan Satyananda
65
DEP_MNJR
Nama Departemen Riset Keuangan Teknik SDM
Kode Departemen 5 4 1 2
NIP_Manajer
....
3334455 4534534 8886655 9879879
.... .... .... ....
Nama Karyawan Burhan Gatot Rahmat B. Nina
NIP
....
3334455 4534534 8886655 9879879
.... .... .... ....
Gambar 4.14. Contoh hasil operasi JOIN. Mula-mula dicari nama manajer dengan cara JOIN relasi DEPARTEMEN dan KARYAWAN dengan kondisi kunci tamu NIP_MNJR pada DEPARTEMEN harus sama dengan atribut NIP pada KARYAWAN. Karena hanya ada 4 manajer, maka relasi DEP_MNJR hanya mempunyai 4 tupel. Selanjutnya DEP_MNJR dikenai PROJECT untuk menampilkan nama departemen dan nama manajernya. Departemen ”Pengawasan” tidak diikutkan dalam hasil karena NIP pengawasnya tidak ada. Operasi JOIN dapat dinyatakan sebagai CARTESIAN PRODUCT yang diikuti dengan SELECT: R
Sºs
(R ´ S)
Operasi untuk tabel pada Gambar 4.14 di atas dapat ditulis menjadi: DEP_MNJR ¬ s NIP_Manajer=NIP (DEPARTEMEN ´ KARYAWAN) Kondisi join bisa beberapa, dengan dihubungkan operator AND atau OR: AND AND ... AND berupa Ai q Bj, Ai adalah atribut R, Bj adalah atribut S (keduanya mempunyai domain yang sama), dan q adalah operator perbandingan (<, £, >, ³, =,¹). Operasi JOIN dengan yang melibatkan kondisi join disebut juga dengan THETA JOIN. Tupel yang atribut joinnya bernilai null tidak ditampilkan. JOIN yang operator perbandingannya hanya ‘=’ disebut sebagai EQUIJOIN (contoh JOIN pada gambar 4.14 adalah EQUIJOIN). Hasil dari EQUIJOIN selalu mempunyai 1 atau lebih pasangan atribut yang nilainya identik di dalam setiap tupelnya. Untuk menghindari hal tersebut maka dapat digunakan operasi NATURAL JOIN, yang akan menghapus atribut kedua yang sama. Operasi NATURAL JOIN dinyatakan dengan *, dan merupakan EQUIJOIN yang ditambah dengan penghilangan atribut join lain yang sama dengan atribut join pertama (hanya atribut join pertama yang digunakan di relasi hasil). Bentuk umum NATURAL JOIN adalah: Q ¬ R * (
1>), ()
S
adalah daftar atribut-atribut dari R dan adalah daftar atributatribut dari S. NATURAL JOIN dapat ditulis sebagai operasi CARTESIAN PRODUCT yang
Basis Data – Darmawan Satyananda
66
diikuti oleh operasi SELECT dan PROJECT. R * (
1>), ()
Sºp
(s
(R ´ S))
Contoh NATURAL JOIN adalah untuk mencari nama manajer setiap departemen: DEP_MNJR¬ DEPARTEMEN *
NIP_Manajer=NIP
KARYAWAN
Hasil dari operasi ini adalah relasi DEP_MNJR seperti pada Gambar 4.14, hanya saja atribut NIP dihilangkan karena bernilai sama dengan atribut NIP_MNJR. Karena operator dalam NATURAL JOIN selalu =, maka operator dapat dihilangkan sehingga ekspresinya menjadi: DEP_MNJR¬ DEPARTEMEN * (NIP_Manajer), (NIP) KARYAWAN Bila kedua atribut dalam operasi tersebut mempunyai nama yang sama, maka keduanya bisa tidak dituliskan. Contohnya adalah untuk menampilkan tanggungan dari karyawan yang bekerja pada suatu proyek adalah: TANGG_KAR ¬ BEKERJA_DI * TANGGUNGAN Kedua relasi mempunyai atribut yang sama yaitu NIP_Kar.
4.4.4. Operasi DIVISION Operasi DIVISION yang dilambangkan dengan ¸ digunakan untuk query yang mempunyai pernyataan “semua” di dalamnya. Bentuk umum operasi ini: T¬R¸S Bila dipunyai operasi T(Z) ¬ R(X) ¸ S(Y), X dan Y masing-masing adalah atribut relasi R dan S, dan Y Í X. T(Z) mempunyai atribut Z = X – Y, Z adalah himpunan atribut R yang bukan atribut S. Sebuah tupel t ada di dalam T(Z) bila untuk setiap tupel tS di S terdapat tupel tR di R yang memenuhi: tR[Y] = tS[Y] tR[X-Y] = t[X-Y] Artinya bahwa dua buah tupel tR dan tS akan mempunyai sejumlah atribut yang sama dan tupel t akan mempunyai atribut dari R yang tidak ada di S. Sebagai contoh, untuk mencari nama semua karyawan yang bekerja pada semua proyek yang sama dengan tempat Yasin bekerja, maka bila operasinya adalah: YASIN ¬ s NamaKaryawan = ’Yasin’ (KARYAWAN) PRYK_YASIN ¬ p KodeProyek_Kar( BEKERJA_DI NIP_Kar = NIP YASIN) PRYK_LAIN ¬ p NIP_Kar, KodeProyek_Kar (BEKERJA_DI) Operasi pertama adalah untuk mencari tupel dari karyawan yang bernama Yasin, sedangkan operasi kedua adalah untuk mencari tupel proyek tempat Yasin bekerja. Operasi ketiga adalah untuk mencari proyek tempat karyawan lain bekerja. Operasi selanjutnya adalah operasi DIVISION yang mencari karyawan yang mempunyai proyek
Basis Data – Darmawan Satyananda
67
yang sama dengan Yasin: NIP_PRYK(NIP) ¬ PRYK_LAIN ¸ PRYK_YASIN HASIL ¬ p NamaKaryawan (NIP_PRYK * NIP_Kar=NIP KARYAWAN) Hasil operasi ditunjukkan pada Gambar 4.15. Singkatnya, relasi R dibagi dengan relasi S menghasilkan relasi T. Atribut yang ada di relasi T adalah atribut yang ada di relasi R dan tidak ada di relasi S. Nilai tupel t yang terdapat dalam relasi hasil T harus muncul di R, dan bisa dikombinasikan dengan setiap tupel di S. Dengan kata lain, nilai atribut yang berbeda di relasi S harus terhubung dengan setiap nilai di relasi R. Semua atribut selain yang dibandingkan masing-masing harus bernilai sama agar tupelnya bisa terpilih sebagai hasil. Sebagai contoh, penentuan tupel untuk NIP_PRYK dilakukan dengan melihat tupel di PRYK_LAIN yang nilai atributnya sama dengan di PRYK_YASIN (yaitu KodeProyek_Kar dengan nilai ‘1’ dan ‘2’), dan atribut NIP_Kar nilainya harus sama untuk setiap tupel yang sesuai (misalnya NIP_Kar= ’4534534’ terlibat di proyek dengan kode ‘1’ dan ‘2’ sehingga ’4534534’ terpilih menjadi tupel hasil). YASIN
NamaKaryawan NIP Yasin 1234567
PRYK_YASIN
NIP_PRYK
KodeProyek_Kar 1 2
NIP_Kar 1234567 4534534 3334455
...... ......
KodeDep_ Kar 5
PRYK_LAIN
HASIL
NIP_Kar 1234567 1234567 6668844 4534534 4534534 3334455 3334455 3334455
KodeProyek_Kar 1 2 3 1 2 2 1 3
NamaKaryawan Yasin Gatot. Burhan
Gambar 4.15. Contoh operasi DIVISION. Suatu operasi DIVISION dapat disusun dari beberapa operasi lainnya, yaitu: T1 ¬ p Z (R) T2 ¬ p Z ((S ´ T1) – R) T3 ¬ T1 – T2
4.5. Operasi Relasional Tambahan Operasi relasional tambahan disediakan untuk beberapa hal yang tidak ditangani operator biasa, misalnya untuk keperluan pengelompokan (group) dan penghitungan matematis sederhana. Aljabar Relasional menyediakan operator FUNCTION, serta OUTER
Basis Data – Darmawan Satyananda
68
JOIN untuk menampilkan tupel yang tidak memenuhi kondisi join.
4.5.1. Fungsi Agregat Matematis Salah satu operasi yang tidak bisa dilakukan dengan operator standar adalah fungsi matematis terhadap sekumpulan nilai, seperti menghitung rata-rata, nilai maksimum, dan sebagainya. Hal lain yang tidak bisa dilakukan adalah pengelompokan tupel berdasar kriteria tertentu, misalnya berdasar kode departemen karyawan. Aljabar Relasional menyediakan operasi FUNCTION untuk keperluan itu. FUNCTION dilambangkan dengan operator Á , dengan bentuk umum sebagai berikut:
Á
fungsi>
()
adalah daftar atribut yang digunakan sebagai dasar pengelompokan tupel dari relasi yang disebutkan dalam . adalah daftar dari pasangan ( ). terdiri dari SUM (menjumlahkan nilai tupel-tupel), AVERAGE (menghitung rata-rata nilai tupeltupel), MAXIMUM (menghitung nilai maksimum tupel-tupel), MINIMUM (menghitung nilai minimum tupel-tupel), COUNT (menghitung banyaknya tupel). adalah atribut dari . Fungsi-fungsi ini dikenakan terhadap kelompok tupel yang disebutkan dalam . Banyaknya atribut relasi hasil sesuai dengan banyaknya kelompok atribut dan daftar fungsi yang dinyatakan. Banyaknya tupel sesuai dengan banyaknya kelompok yang ada. Hasil dari fungsi agregat adalah relasi, bukan berupa bilangan. Contoh penggunaannya adalah untuk mencari banyaknya karyawan per departemen dan gaji rata-ratanya. Operasinya adalah sebagai berikut: T ¬ KodeDep_Kar Á COUNT NIP, AVERAGE Gaji (KARYAWAN) HASIL(KodeDep_Kar, Jumlah_Karyawan, Gaji_Ratarata) ¬ T Operasi pertama mengelompokkan semua tupel relasi KARYAWAN menurut kode departemen tempat karyawan bekerja. Untuk setiap kelompok dihitung banyaknya karyawan yang ada (berdasar atribut NIP) dan rata-rata gaji karyawan (berdasar atribut GAJI). Dengan demikian relasi hasil mempunyai tiga buah atribut, sebuah dari kelompok atribut dan dua buah dari daftar fungsi. Bila nama atribut relasi hasil tidak ditentukan, maka nama atribut dari relasi hasil adalah nama kelompok atribut serta penggabungan dari nama fungsi dan nama atribut dalam bentuk _. Contoh relasi hasil bisa dilihat pada Gambar 4.16. Fungsi matematika dikenakan terhadap kelompok tupel, bukan tupel tunggal. Bila kelompok atribut tidak dinyatakan dalam FUNCTION, maka fungsi dikenakan terhadap semua tupel dalam relasi, sehingga relasi hasil hanya mempunyai satu buah tupel
Basis Data – Darmawan Satyananda
69
(semua tupel dalam relasi dianggap sebagai satu kelompok). Contohnya untuk menghitung gaji rata-rata semua karyawan:
Á
COUNT NIP, AVERAGE Gaji
T
HASIL
(KARYAWAN)
KodeDep_Kar 5 4 1 2 KodeDep_Kar 5 4 1 2
COUNT_NIP 4 2 1 1
AVERAGE_Gaji 381250 375000 400000 400000
Jum_Karyawan 4 2 1 1
Gaji_Ratarata 381250 375000 400000 400000
(a) COUNT_NIP 8
AVERAGE_Gaji 384375 (b)
Gambar 4.16. Relasi hasil operasi FUNCTION. (a) Menghitung banyaknya karyawan yang ada di setiap departemen dan gaji rata-ratanya, (b) Menghitung banyaknya semua karyawan dan gaji rata-ratanya.
4.5.2. Operasi OUTER JOIN Operasi JOIN hanya menggabungkan tupel-tupel yang memenuhi kondisi join dan mengabaikan tupel yang tidak memenuhi kondisi join. Hasil operasinya adalah tupel dari dua relasi yang saling berhubungan, dan tupel yang tidak berhubungan akan dihilangkan. JOIN semacam ini disebut juga dengan INNER JOIN. Untuk tetap menampilkan tupel yang tidak berhubungan bisa digunakan operasi OUTER JOIN. Hasil operasi ini adalah relasi yang berisi semua tupel di R atau S atau keduanya dan mengabaikan apakah suatu tupel berhubungan dengan tupel di relasi lainnya atau tidak. Operasi OUTER JOIN terdiri dari dua langkah: (1) mengeksekusi natural join, (2) bila sembarang tupel di satu relasi tidak berhubungan dengan tupel di relasi lainnya, maka tupel yang tidak berhubungan itu ditambahkan ke dalam relasi join dan atributnya diisi dengan nilai null. Ada tiga macam operasi OUTER JOIN yaitu LEFT OUTER JOIN, RIGHT OUTER JOIN, dan FULL OUTER JOIN. Operasi LEFT OUTER JOIN dilambangkan dengan tupel pada relasi sebelah kiri dari R
, akan menampilkan setiap
S (dalam hal ini adalah relasi R). Bila tidak ada
tupel S yang sesuai dengan tupel di R, maka atribut S diisi dengan nilai null. Contohnya adalah untuk menampilkan semua nama karyawan dan departemen yang dipimpinnya bila karyawan tersebut adalah seorang manajer:
Basis Data – Darmawan Satyananda
70
KARDEP ¬ KARYAWAN NIP = NIP_Manajer DEPARTEMEN HASIL ¬ p NamaKaryawan, NamaDepartemen (KARDEP) Relasi hasil operasi dapat dilihat pada Gambar 4.17. Pada gambar dapat dilihat relasi yang tidak sesuai (hasil operasi LEFT OUTER JOIN antara KARYAWAN dan DEPARTEMEN) akan berisi nilai null. HASIL
NamaKaryawan Yasin Burhan Dewi Nur Wahyu N. Gatot Rahmat B. Nina
NamaDepartemen Null Riset Null Null Keuangan Teknik SDM
Gambar 4.17 Relasi hasil operasi LEFT OUTER JOIN. Operasi lain yang serupa adalah RIGHT OUTER JOIN yang dilambangkan dengan . Operasi ini akan menampilkan setiap tupel pada relasi sebelah kanan R
S (relasi S).
Tupel di sebelah kiri (relasi R) yang tidak berhubungan dengan tupel relasi S akan diisi dengan nilai null. Operasi FULL OUTER JOIN, yang dilambangkan dengan
, akan menampilkan
semua tupel dari kedua relasi. Bila kedua tupel tidak ada yang berhubungan maka atributnya akan diisi dengan nilai null.
4.6. Rangkuman Bab ini membahas mengenai model relasional. Model relaisional didasarkan pada sekumpulan tabel-tabel dan relasi yang ada di antaranya. Dalam model ini digunakan istilah tupel (untuk menyatakan record atau entitas dalam E-R), atribut (untuk menyatakan field), dan relasi (untuk menyatakan tabel atau himpunan relasi). Relasi adalah himpunan tupel-tupel, sehingga kepada relasi bisa dikenakan operasi himpunan. Skema relasi adalah sekumpulan atribut yang menjelaskan struktur suatu basis data. Atribut kunci suatu relasi adalah atribut yang digunakan untuk mengenali tupeltupel dalam relasi secara unik. Ada beberapa jenis atribut kunci yaitu kunci super, kunci kandidat, dan kunci primer. Penentuan atribut yang menjadi kunci didasarkan pada makna atribut tersebut dalam relasi. Juga dijelaskan mengenai basis data relasional dan skema basis data relasional, serta tahapan yang harus dilakukan bila mengubah skema E-R menjadi skema basis data Relasional. Ada 3 aturan dalam skema relasional: ·
aturan kunci: nilai kunci kandidat harus unik
·
aturan integritas entitas: nilai kunci primer tidak boleh null
·
aturan integritas referensial: suatu tupel yang mengacu ke relasi lain harus mengacu
Basis Data – Darmawan Satyananda
71
kepada tupel yang benar-benar ada. Selain kunci yang telah disebutkan di atas juga ada kunci tamu yang digunakan untuk mengubungkan 2 buah relasi. Tiga macam operasi update dalam model relasional: insert, delete, modify. Bila suatu operasi update dijalankan, harus diuji apakah operasi tersebut tidak melanggar aturan yang ada. Aljabar relasional, salah satu bahasa query prosedural, adalah sekumpulan operasi yang digunakan untuk memanipulasi relasi. Aljabar relasional dapat dibagi menjadi 2 macam: ·
operasi himpunan: Union, Intersection, Difference, Cartesian Product
·
operasi khusus basis data relasional: Select, Project, Join, Division
Selain itu terdapat operasi relasional tambahan, berupa fungsi-fungsi matematis, yaitu SUM, AVERAGE, MAXIMUM, MINIMUM, COUNT. Operasi tambahan lain adalah OUTER JOIN, yang terdiri dari LEFT OUTER JOIN, RIGHT OUTER JOIN, dan FULL OUTER JOIN.
4.7. Soal Latihan 1. Jelaskan mengenai aturan integritas. 2. Mengapa tupel yang duplikat tidak diperbolehkan dalam relasi? 3. Apa beda kunci dan kunci super? 4. Ubahlah skema E-R pada soal latihan bab III nomor 4 dan 5 menjadi skema relasional. 5. Buktikan dengan contoh bahwa operasi DIVISION bisa digantikan dengan operasi yang lain seperti pada halaman 69! 6. Bila diketahui skema sebagai berikut: KARYAWAN(NamaKaryawan, AlamatKaryawan, KotaKaryawan) BEKERJA(NamaKaryawan, NamaPerusahaan, Gaji) LOKASI(NamaPerusahaan, KotaPerusahaan) MEMIMPIN(NamaKaryawan, NamaManajer) Susunlah ekspresi aljabar relasional untuk query berikut: a. Cari nama dan kota semua karyawan yang bekerja di ‘PT. ABC’. b. Cari nama, alamat, dan kota semua karyawan yang mempunyai gaji di atas Rp. 500.000. c.
Siapa saja karyawan yang tinggal di kota yang sama dengan tempat kerjanya?
d. Cari semua karyawan yang tinggal di kota yang sama dengan manajernya. e. Cari semua karyawan yang tidak bekerja di ‘PT. ABC’. f.
Cari semua perusahaan yang ada di kota yang sama dengan kota ‘Bank XYZ’ berada.
Basis Data – Darmawan Satyananda
72
g. Cari perusahaan yang memberikan gaji terkecil. h. Untuk setiap perusahaan, tampilkan rata-rata gaji karyawannya. i.
Perusahaan mana yang mempunyai karyawan terbanyak?
7. Diketahui skema relasional untuk permasalahan tentang perkuliahan pada Jurusan Matematika sebagai berikut: MATAKULIAH (KodeMK, NamaMK, SKS, JS, Prasyarat) MAHASISWA (NIM, NamaMahasiswa, Alamat) DOSEN (KodeDosen, NamaDosen, NIP) RUANGAN (NoRuang, Kapasitas, Jenis) OFFERING (KodeMK, KodeOff, Hari, Jam, Ruangan, KodeDosen) MENGAMBIL (NIM, KodeMK, KodeOff, Semester, Tahun, Nilai) Gunakan skema di atas untuk menuliskan query dalam aljabar relasional untuk permasalahan berikut: a. Tampilkan kode dan nama matakuliah yang diajar oleh Pak Imam b. Tampilkan kode dosen dan nama dosen yang mengajar Kalkulus Lanjut c.
Tampilkan nama dan nilai mahasiswa yang mengambil matakuliah MAU 432 pada offering AA.
d. Tampilkan nama dan nilai mahasiswa yang tidak mengambil matakuliah MAU 432. e. Tampilkan nama dosen yang mengajar matakuliah Kalkulus I tetapi tidak mengajar Kalkulus II. f.
Berapakah mahasiswa yang mengambil matakuliah dengan kode MAP 444 offering AA pada semester I-2004/2005?
g. Siapakah mahasiswa yang tidak mengambil kuliah pada semester II-2004/2005? h. Tuliskan nama matakuliah dan kode offering yang menggunakan ruangan M-101 pada hari Senin. i.
Untuk setiap ruangan, tuliskan banyaknya offering yang menggunakan ruangan tersebut pada hari Jumat.
j.
Untuk setiap hari (Senin sampai Jumat) dan pada setiap ruangan, tuliskan banyaknya offering yang menggunakan ruangan itu.
k. Siapa saja yang mengambil matakuliah MAU401, MAU434 dan MAU439 bersamaan?
Basis Data – Darmawan Satyananda
73