PEMODELAN BASIS DATA LAINYA
5.1 MODEL JARINGAN
Jika dalam model relasional data & relasi diantara data direpresentasikan dengan kumpulan tabel, maka dalam model jaringan (network model) ini data direpresentasikan dengan kumpulan record dan relasi diantaranya direpresentasikan dengan links.
5.1.1 Konsep Dasar
Suatu basis data jaringan terdiri dari kumpulan record yang terhubung satu dengan yang lain melalui link-link yang ada. Suatu record dibanyak hal sama dengan entity di model E-R. Setiap record adalah kumpulan dari atribut-atribut dimana setiap atribut berisi satu nilai data. Link adalah asosiasi antara dua record, yang dapat digambarkan relasi biner dalam model E-R.
Sebagai ilustrasi, ada suatu basis data yang merepresentasikan relasi customer- account di sistem perbankan. Ada dua tipe record : customer & account. Dengan menggunakan bahasa Pascal, kita dapat mendefinisikan suatu type record customer
sebagai :
type customer = record
customer_name : string;
customer_street : string;
customer_city : string;
end
Hayes Main Harrison A-102 400
Johnson Alma Palo Alto A-101 500
A-201 900
Turner Putnam Stamford A-305 350
Gambar 5.1 Contoh Basis Data
Sedangkan untuk tipe record account dapat didefinisikan sebagai berikut :
type account = record
account_number : string;
balance : integer;
end
pada contoh basis data di atas terlihat bahwa Hayes memiliki account A-102, Johnson memiliki account A-101 dan A-201 sedangkan Turner memiliki account A-305.
5.1.2 Diagram Struktur Data
Suatu diagram struktur data adalah suatu skema yang merepresentasikan desain basis data jaringan. Diagram memiliki dua komponen :
- kotak : yang melambangkan tipe record
- garis : yang melambangkan link
Diagram Struktur Data menspesifikasikan semua struktur lojik dari suatu basis data. Diagram E-R dapat ditranslasikan dalam diagram struktur data yang bersesuaian.
Ilustrasi dapat dilihat pada gambar diagram E-R dibawah, dimana terdiri dari dua entity set : customer & account, yang terhubung dengan relasi biner, many-to-many
depositor dengan tidak ada atribut penjelas.
customer_street
customer_name
customer_city
account_number
balance
customer
depositor account
(a) Diagram E-R
(b) Diagram Struktur data
Gambar 5.2 Diagram E-R dan Diagram Struktur Data yang bersesuaian
Pada diagram E-R-nya terlihat customer bisa memiliki beberapa account, dan satu account dapat dimiliki oleh beberapa customer. Sedangkan kesesuaiannya dengan diagram struktur data terlihat bahwa tipe record customer sesuai dengan entity set customer yang berisi : customer_name, customer_street dan customer_city. Demikian pula untuk tipe record account bersesuaian dengan entity set account yang terdiri dari
account_number & balance. Sedangkan relasi depositor diganti dengan link depositor. Jika relasi depositor merupakan relasi one-to-one maka link depositor akan memiliki dua tanda panah, satu menunjuk ke tipe record account dan satu lagi menunjuk ke tipe record
customer.
branch_name
branch_city
assets
customer_street
branch
account_number
customer_name
customer_city
balance
customer
CAB
customer
(a) Diagram E-R
customer_name customer_street customer_city
customer
branch_name branch_city assets
branch
CustRlnk
account_number balance
account
AcctRlnk
BrnchRlnk
Rlink
(b) Diagram Struktur data
Gambar 5.3 Diagram E-R dan Diagram Struktur Data yang bersesuaian
Sedangkan untuk contoh pada gambar 5.3, E-R terdiri dari 3 entity sets : account, customer & branch, yang terhubung melalui relasi CAB dengan tanpa atribut. Diagram ini menerangkan bahwa suatu customer boleh memiliki sejumlah account, dimana setiap account ditempatkan pada suatu cabang bank tertentu dan suatu account bisa dimiliki oleh sejumlah customer yang berbeda.
Karena satu link menghubungkan tepat dua tipe record yang berbeda, maka kita harus menghubungkan tiga tipe record tersebut melalui satu record baru yang menghubungkan ketiganya secara langsung.
Untuk mentransformasikan diagram E-R ke diagram Struktur Data Jaringan, kita harus membentuk satu record baru dengan type Rlink yang bisa tidak memiliki field atau hanya memiliki satu field dengan identifier yang unik. Identifier disediakan oleh sistem
dan tidak digunakan secara langsung oleh program aplikasi. Kita juga harus membentuk tiga link many-to-one : CustRlnk, AcctRlnk dan BrncRlnk seperti terlihat pada gambar
5.3 (b). Jika relasi CAB memiliki atribut, maka akan menjadi field di record Rlink.
5.2 MODEL HIRARKI
Memegang prinsip yang sama dengan model jaringan, yaitu merepresentasikan data dalam kumpulan record dengan link sebagai relasinya. Perbedaan terletak pada penggambaran record-nya, yaitu kumpulan record akan digambarkan sebagai kumpulan tree.
5.2.1 Konsep Dasar
Suatu basis data hierarki terdiri dari kumpulan record yang terhubung satu dengan yang lain melalui link. Suatu record sama dengan suatu record di model jaringan. Setiap record adalah kumpulan atribut, dimana masing-masing atribut hanya berisi satu nilai. Satu link menunjukkan hubungan antara dua record.
Misalkan terdapat suatu basis data yang merepresentasikan relasi customer- account di sistem perbankan. Terdapat dua tipe record : customer & account. Customer memiliki 3 field seperti yang telah dijelaskan sebelumnya. Demikian pula account yang
memiliki 2 field.
Johnson Alma Palo Alto
A-101 500 A-201 900
Gambar 5.4 Contoh Basis Data
Pada contoh di atas terlihat customer Hayes memiliki account A-305, customer Johnson memiliki account A-101 dan A-201 sedangkan customer Turner memiliki account A-
305.
Semua kumpulan record customer dan account diorganisasikan dalam bentuk root dari suatu tree, dimana root dari suatu tree merupakan node dummy. Basis data hierarki adalah kumpulan root tree yang kemudian membantuk forest.
5.2.2 Diagram Struktur Tree
Diagram struktur tree adalah skema dari basis data hierarki. Suatu diagram ini terdiri dari dua komponen dasar : box yang melambangkan tipe record dan garis yang
melambangkan link. Seperti pemodelan yang lain diagram struktur tree juga menggambarkan struktur lojik dari suatu basis data.
Ilustrasi E-R diagram untuk gambar 5.5.a. terdiri dari dua entity sets yaitu customer & account yang terhubung oleh relasi biner, relasi one-to-many depositor tanpa atribut. Diagram ini menerangkan satu customer dapat memiliki beberapa account, tetapi satu account hanya dapat dimiliki oleh satu customer. Kesesuaian diagram Struktur Tree dapat dilihat pada gambar 5.5.b. tipe record customer bersesuaian dengan entity set customer memiliki beberapa field yang dapat dilihat di gambar. Demikian juga account adalah tipe record yang bersesuaian dengan entity set account. Akhirnya relasi depositor
diganti dengan link depositor dengan anak panah menunjuk ke tipe record customer.
customer_street
customer_name
customer_city
account_number
balance
customer
depositor account
(a) Diagram E-R
customer_name customer_street customer_city
customer
account
(b) Diagram Struktur Tree
Gambar 5.5 Diagram E-R dan Diagram Struktur Tree yang bersesuaian
customer_street customer_name
customer_city
account_number
balance
customer
depositor account
(a) Diagram E-R
customer_name customer_street customer_city
cust
account_number balance
account
(b) Diagram Struktur Tree
customer
Gambar 5.6 Diagram E-R dan Diagram Struktur Tree yang bersesuaian
Suatu instance dari suatu basis data bersesuaian dengan skema berisi sejumlah record customer yang terhubung ke sejumlah record account.
Untuk lebih jelasnya, silahkan download di : model basis data
Read More..
SQL
STRUCTURED QUERY LANGUAGE (SQL)
Sistem basis data komersial menghendaki adanya sebuah bahasa query yang lebih user-friendly. Oleh karena itu dikenal SQL sebagai bahasa query yang marketable. SQL menggunakan kombinasi aljabar relasional & kalkulus relasional. Meskipun SQL adalah bahasa query, namun SQL mempunyai banyak kemampuan lain disamping melakukan query terhadap basis data. SQL mempunyai kemampuan untuk mendefinisikan struktur data, modifikasi data dalam basis data dan menentukan konstrain sekuriti.
4.1 LATAR BELAKANG
SQL merupakan bahasa basis data relasional standard. Terdapat macam-macam versi SQL. Versi aslinya pertama kali dikembangkan oleh IBM San Jose Research Laboratory.
Bahasa SQL mempunyai bebrap bagian yaitu :
- Data Definition Language (DDL)
DDL memberikan perintah untuk mendefinisikan skema relasi, penghapusan relasi, membuat indeks dan modifikasi skema relasi.
- Interactive Data-Manipulation Language (DML)
DML merupakan bahasa query yang berdasarkan pada aljabar relasi dan kalkulus relasi tuple. Termasuk didalamnya adalah perintah untuk penyisipan, penghapusan dan modifikasi.
- Embedded DML
Bentuk embedded SQL biasanya terdapat dalam bahasa pemrograman multi guna seperti PL/I, Cobol , Pascal dan Fortran.
- View Definition
DDL SQL memasukkan perintah untuk mendefinisikan view.
- Authorization
DDL SQL memasukkan perintah untuk menentukan hak-hak akses ke relasi dan
view.
- Integrity
DDL SQL memasukkan perintah untuk menentukan konstrain integritas yang harus dipenuhi oleh data yang tersimpan dalam basis data.
- Transaction control
SQL memasukkan perintah-perintah untuk menentukan awal dan akhir transaksi. Beberapa implementasi juga memungkinkan locking data untuk concurrency control.
4.2 STRUKTUR DASAR
Struktur dasar dari ekspresi SQL terdiri dari tiga klausa yaitu : select, from dan
where.
- Klausa Select berhubungan dengan operasi proyeksi dari aljabar relasional.
Operasi ini digunakan untuk mendaftar semua atribut yang diinginkan sebagai hasil suatu query.
- Klausa From berhubungan dengan operasi Cartesian-product dari aljabar relasional. Operasi ini mencatat semua relasi yang di”scan” dalam evaluasi suatu query.
- Klausa Where berhubungan dengan operasi predikat seleksi dari aljabar relasional. Operasi ini terdiri dari sebuah predikat yang menyangkut atribut- atribut dari relasi yang muncul dalam klausa from.
Sebuah query SQL biasanya mempunyai bentuk :
Select A1,A2,…..An From r1,r2,….rn Where P
4.2.1 Klausa Select
Contoh : “ Tentukan nama-nama dari semua cabang bank dalam relasi loan “
Query-nya :
select branch-name from loan
Hasil dari query tersebut adalah sebuah relasi yang berisi sebuah atribut tunggal dengan nama branch-name.
Bahasa query formal bersifat matematis dimana relasi adalah sebuah himpunan sehingga tuple-tuple yang telah muncul tidak akan muncul lagi (tidak akan terjadi duplikasi tuple). Tapi dalam prakteknya untuk menghilangkan duplikasi tuple sangat memakan waktu. Oleh karenanya SQL memungkinkan terjadinya duplikasi tersebut. Dari contoh di atas, maka query-nya akan mencatat setiap branch-name setiap kali branch-name tersebut ditemukan dalam relasi loan.
Untuk kasus di atas jika diinginkan untuk menghilangkan duplikasi maka dapat disisipkan distinct setelah select. Query di atas ditulis ulang sebagai berikut :
Select distinct branch-name from loan
Jika tuple yang terduplikasi diinginkan hilang.
Klausa selest dapat juga mengandung operasi aritmatika yaitu operator : +, -, *, / dan operasi terhadap konstanta atau atribut dari tuple. Contoh query berikut :
Select branch-name, loan-number, amount * 100
From loan
Akan menghasilkan sebuah relasi yang sama dengan relasi loan, kecuali bahwa atribut amount dikalikan dengan 100. SQL-92 juga menyediakan tipe data spesial seperti tipe date, dan memungkinkan beberapa fungsi aritmatika untuk beroperasi pada tipe-tipe ini.
4.2.2 Klausa Where
Contoh query : “Temukan semua loan number untuk pinjaman-pinjaman yang dibuat pada cabang Perryridge dengan jumlah lebih besar dari $1200”.
Query-nya ditulis sebagai berikut :
Select loan-number
From loan
Where branch-name = “Perryridge” and amount >1200
SQL menggunakan konektivitas lojik and, or dan not dalam klausa where. SQL juga memasukkan perintah between untuk menentukan apakah suatu nilai lebih kecil daripada atau sama dengan suatu nilai lain dan lebih besar daripada atau sama dengan suatu nilai lain.
Contoh : jika diinginkan menemukan loan-number yang jumlah pinjamannya antara
$90000 dan $100000, ditulis sebagai berikut :
Select loan-number
From loan
Where amount between 90000 and 100000
4.2.3 Klausa From
Contoh query : “Untuk semua customer yang mempunyai sebuah pinjaman dari bank, temukan nama dan loan number mereka”.
Dalam SQL ditulis :
Select distinct customer-name, borrower.loan-number
From borrower, loan
Where borrower.loan-number = loan.loan.number
4.2.4 Operasi Rename
SQL menyediakan mekanisme operasi rename untuk relasi dan atribut. Operasi
rename dalam SQL menggunakan klausa as dengan bentuk :
Nama-lama as nama-baru
Contoh : Jika atribut dengan nama loan-number akan diganti dengan nama loan-id, dapat ditulis sebagai berikut :
Select distinct customer-name, borrower.loan-number as loan-id
From borrower,loan
Where borrower.loan-number = loan.loan-number and
branch-name = “Perryridge”
4.3 OPERASI HIMPUNAN
Operasi operasi himpunan pada SQL-92 meliputi : union, intersect, dan except.
Union identik dengan , intersect identik dengan dan except identik dengan – pada aljabar relasional.
4.3.1 Operasi Union
Contoh : Untuk mendapatkan semua customer yang mempunyai pinjaman, rekening atau keduannya pada bank ditulis :
(select customer-name from depositor)
union
(select customer-name from borrower)
Operasi union secara otomatis akan menghilangkan duplikasi, tidak seperti klausa select. Sehingga pada query di atas, jika Jones (seorang customer) mempunyai beberapa rekening atau pinjaman (atau keduannya) pada bank, maka Jones hanya akan muncul sekali. Jika duplikasi diinginkan ada maka harus ditulis union all.
4.3.2 Operasi Intersect
Contoh : untuk mendapatkan semua customer yang memiliki pinjaman dan rekening pada bank, query-nya ditulis :
(select distinct customer-name from depositor)
intersect
(select distinct customer-name from borrower)
Operasi intersect secara otomatis menghilangkan duplikasi. Jika diinginkan duplikasi tetap ada ditulis intersect all.
4.3.3 Operasi Except
Contoh : untuk mendapatkan semua customer yang mempunyai sebuah rekening tetapi tidak memiliki pinjaman pada bank, ditulis :
(select distinct customer-name from depositor)
except
(select customer-name from borrower)
Operasi except secara otomatis menghilangkan duplikasi. Jika diinginkan ada maka ditulis : except all.
4.4 FUNGSI-FUNGSI AGREGASI
Yang termasuk fungsi-fungsi agregasi adalah :
- Average : avg
- Minimum : min
- Maximum : max
- Total : sum
- Count : count
Fungsi-fungsi di atas telah tersedia. Input untuk avg dan sum haruslah bertipe numerik. Untuk operator lainnya dapat non-numerik.
Contoh : untuk mendapatkan rata-rata saldo rekening pada cabang Perryridge
Query-nya dapat ditulis :
Select avg(balance) From account
where branch-name = “Perryridge”
Jika fungsi agregasi iningn diterapkan pada kelompok himpunan tuple, maka digunakan klausa group by. Nama atribut/kel. Atribut dalam klausa group by digunakan untuk membentuk grup/kelompok. Artinya tuple-tuple yang mempunyai nilai yang sama pada semua atribut dalam klausa group-by dimasukkan dalam satu grup/kelompok.
Contoh :
Select branch-name, avg(balance) From account
Group by branch-name
Jika suatu fungsi diterapkan pada grup/kelompok yang dibentuk oleh group by maka digunakan klausa having setelah group by.
Contoh : ingin ditampilkan nama cabang yang mempunyai rata-rata saldo lebih dari
1200.
Query-nya :
Select branch-name, avg(balance) From account
Group by branch-name having avg (balance)>1200
Fungsi agregrasi count sering digunakan untuk menghitung jumlah tuple dalam suatu relasi. Notasi fungsi ini dalam SQL adalah count (*). Jadi untuk menentukan jumlah tuple dalam relasi customer, ditulis :
Select count(*) from customer
4.5 SUBQUERI TERSARANG (NESTED SUBQUERYS)
Biasanya digunakan untuk melalukuan test keanggotaan himpunan, perbandingan himpunan dan kardinalitas himpunan.
4.5.1 Keanggotaan Himpunan
Digunakan in dan not in untuk melakukan test keanggotaan himpunan.
Contoh : untuk mendapatkan semua customer yang mempunyai pinjaman dan rekening pada bank.
Pertama : menemukan semua pemegang reeking dengan query :
(select customer-name from depositor)
Kedua : mencari semua customer yang merupakan peminjam dan yang muncul dalam daftar pemegang rekening. Maka dilakukan dengan “menyarangkan” subquery di atas dalam sebuah select luar (outer select), menjadi :
Select distinct customer-name
from borrower
Where customer-name
in (select customer-name from depositor)
4.5.2 Perbandingan Himpunan
Perhatikan query berikut : “Temukan semua nama cabang bank yang mempunyai asset lebih besar dari bank-bank yang mempunyai minimal satu
cabang berlokasi di Brooklyn”.
Query-nya ditulis :
Select branch-name from branch where assets > all
(select assets from branch where branch-city = “Brooklyn”)
4.6 MODIFIKASI BASIS DATA
Meliputi menambah, menghapus dan mengubah informasi menggunakan SQL.
4.6.1 Penghapusan (Deletion)
Yang dapat dihapus (delete) hanyalah tuple bukan nilai pada suatu atribut tertentu. Dalam SQL, deletion diekspresikan dengan
Delete from r where p
Dimana p menunjukkan predikat dan r adalah relasi. Contoh :
- Hapus semua rekening Smith, ditulis :
Delete from depositor where costomer-name = “Smith”
- Hapus semua pinjaman dengan jumlah pinjaman antara $1300 dan $1500
Delete from loan where amount between 1300 and 1500
- Hapus semua rekening pada setiap cabang yang berlokasi di Perryridge
Delete from account where branch-name in
(select branch-name
from branch where branch-city = “Perryridge”)
4.6.2 Penyisipan (Insertion)
Untuk menambahkan satu tuple dalam relasi digunakan statement insert. Contoh :
Insert into account values (“Perryridge”,”A-9732”,1200)
Query ini identik dengan
Insert into account (branch-name, account-number,balance) Values (“Perryridge”,”A-9732”,1200)
Insert juga dapat dilakukan untuk suatu hasil dari query yang lain. Contoh :
Insert into account select branch-name, loan-number, 200
From loan where branch-name = “Perryridge”
4.6.3 Update
Dalam situasi tertentu, diinginkan untuk mengganti nilai dalam sebuah tuple tanpa harus mengganti semua nilai dalam tuple tersebut. Untuk tujuan ini dapat digunakan statement update.
Contoh :
- untuk menaikkan saldo para nasabah sebesar 5% ditulis query sebagai berikut :
Update account set balance = balance * 1.05
- untuk menaikkan saldo nasabah sebesar 6% bagi nasabah yang saldonya lebih dari $10000, ditulis query sebagai berikut :
Update account set balance = balance *1.06
Where balance >10000
4.7 BAHASA DEFINISI DATA ( DATA – DEFINITION LANGUAGE)
DDL SQL memungkinkan dilakukannya spesifikasi tidak hanya pada himpunan relasi tetapi juga informasi untuk setiap relasi, yang meliputi :
- Skema setiap relasi
- Domain nilai setiap atribut relasi
- Konstrain integritas
- Himpunan indeks untuk setiap relasi
- Sekuriti dan autorisasi setiap relasi
- Struktur penyimpanan secara fisik untuk setiap relasi dalam disk.
4.7.1 Tipe-tipe Domain dalam SQL
SQL-92 standar mendukung bermacam-macam tipe domain yang built-in sebagai berikut :
- char(n) : tipe karakter dengan panjang yang tetap (n) (fixed-length character)
- varchar(n) : tipe karakter dengan panjang bervariasi. Maksimum panjang n.
- int : integer
- smallint : small integer
- numeric (p,d) : p menunjukkan jumlah digit bilangan dan d menunjukkan julah digit dibelakang titik desimal.
- real, double precision : floating-point dan double-precision floating point
- float (n) : floating-point number
- date : tipe kalender
- time : tipe hari dalam jam,menit dan detik
SQL-92 menggunakan klausa create domain untuk mendefinisikan domain.
Contoh :
create domain person-name char(20)
4.7.2 Definisi Skema dalam SQL
Untuk mendefinisikan sebuah relasi dengan perintah create table :
Create table r(A1D1,A2D2,….AnDn,
,
……………,
)
Dimana r adalah nama relasi, setiap AI adalah nama atribut dalam skema relasi, dan DI adalah tipe domain dari nilai dalam domain atribut Ai. Integrity constraint yang diperbolehkan antara lain : primary key (Aj1, Aj2,….Ajn) dan check (P)
Contoh :
Create table customer
(customer-name char(20) not null,
customer-street char(30), customer-city char(30), primary key (customer-name))
create table branch
(branch-name char(15) not null,
branch-city char(30),
assets integer,
primary key (branch-name), check(assets >=0))
create table account
(account-number char(10) not null,
branch-name char(15),
balance integer, primary key (account-number), check (balance >=0))
create table depositor
(customer-name char(20) not null,
account-number char(10) not null, primary key (customer-name, account-number))
Untuk lebih jelasnya, silahkan di download di : SQL
Read More..
Sistem basis data komersial menghendaki adanya sebuah bahasa query yang lebih user-friendly. Oleh karena itu dikenal SQL sebagai bahasa query yang marketable. SQL menggunakan kombinasi aljabar relasional & kalkulus relasional. Meskipun SQL adalah bahasa query, namun SQL mempunyai banyak kemampuan lain disamping melakukan query terhadap basis data. SQL mempunyai kemampuan untuk mendefinisikan struktur data, modifikasi data dalam basis data dan menentukan konstrain sekuriti.
4.1 LATAR BELAKANG
SQL merupakan bahasa basis data relasional standard. Terdapat macam-macam versi SQL. Versi aslinya pertama kali dikembangkan oleh IBM San Jose Research Laboratory.
Bahasa SQL mempunyai bebrap bagian yaitu :
- Data Definition Language (DDL)
DDL memberikan perintah untuk mendefinisikan skema relasi, penghapusan relasi, membuat indeks dan modifikasi skema relasi.
- Interactive Data-Manipulation Language (DML)
DML merupakan bahasa query yang berdasarkan pada aljabar relasi dan kalkulus relasi tuple. Termasuk didalamnya adalah perintah untuk penyisipan, penghapusan dan modifikasi.
- Embedded DML
Bentuk embedded SQL biasanya terdapat dalam bahasa pemrograman multi guna seperti PL/I, Cobol , Pascal dan Fortran.
- View Definition
DDL SQL memasukkan perintah untuk mendefinisikan view.
- Authorization
DDL SQL memasukkan perintah untuk menentukan hak-hak akses ke relasi dan
view.
- Integrity
DDL SQL memasukkan perintah untuk menentukan konstrain integritas yang harus dipenuhi oleh data yang tersimpan dalam basis data.
- Transaction control
SQL memasukkan perintah-perintah untuk menentukan awal dan akhir transaksi. Beberapa implementasi juga memungkinkan locking data untuk concurrency control.
4.2 STRUKTUR DASAR
Struktur dasar dari ekspresi SQL terdiri dari tiga klausa yaitu : select, from dan
where.
- Klausa Select berhubungan dengan operasi proyeksi dari aljabar relasional.
Operasi ini digunakan untuk mendaftar semua atribut yang diinginkan sebagai hasil suatu query.
- Klausa From berhubungan dengan operasi Cartesian-product dari aljabar relasional. Operasi ini mencatat semua relasi yang di”scan” dalam evaluasi suatu query.
- Klausa Where berhubungan dengan operasi predikat seleksi dari aljabar relasional. Operasi ini terdiri dari sebuah predikat yang menyangkut atribut- atribut dari relasi yang muncul dalam klausa from.
Sebuah query SQL biasanya mempunyai bentuk :
Select A1,A2,…..An From r1,r2,….rn Where P
4.2.1 Klausa Select
Contoh : “ Tentukan nama-nama dari semua cabang bank dalam relasi loan “
Query-nya :
select branch-name from loan
Hasil dari query tersebut adalah sebuah relasi yang berisi sebuah atribut tunggal dengan nama branch-name.
Bahasa query formal bersifat matematis dimana relasi adalah sebuah himpunan sehingga tuple-tuple yang telah muncul tidak akan muncul lagi (tidak akan terjadi duplikasi tuple). Tapi dalam prakteknya untuk menghilangkan duplikasi tuple sangat memakan waktu. Oleh karenanya SQL memungkinkan terjadinya duplikasi tersebut. Dari contoh di atas, maka query-nya akan mencatat setiap branch-name setiap kali branch-name tersebut ditemukan dalam relasi loan.
Untuk kasus di atas jika diinginkan untuk menghilangkan duplikasi maka dapat disisipkan distinct setelah select. Query di atas ditulis ulang sebagai berikut :
Select distinct branch-name from loan
Jika tuple yang terduplikasi diinginkan hilang.
Klausa selest dapat juga mengandung operasi aritmatika yaitu operator : +, -, *, / dan operasi terhadap konstanta atau atribut dari tuple. Contoh query berikut :
Select branch-name, loan-number, amount * 100
From loan
Akan menghasilkan sebuah relasi yang sama dengan relasi loan, kecuali bahwa atribut amount dikalikan dengan 100. SQL-92 juga menyediakan tipe data spesial seperti tipe date, dan memungkinkan beberapa fungsi aritmatika untuk beroperasi pada tipe-tipe ini.
4.2.2 Klausa Where
Contoh query : “Temukan semua loan number untuk pinjaman-pinjaman yang dibuat pada cabang Perryridge dengan jumlah lebih besar dari $1200”.
Query-nya ditulis sebagai berikut :
Select loan-number
From loan
Where branch-name = “Perryridge” and amount >1200
SQL menggunakan konektivitas lojik and, or dan not dalam klausa where. SQL juga memasukkan perintah between untuk menentukan apakah suatu nilai lebih kecil daripada atau sama dengan suatu nilai lain dan lebih besar daripada atau sama dengan suatu nilai lain.
Contoh : jika diinginkan menemukan loan-number yang jumlah pinjamannya antara
$90000 dan $100000, ditulis sebagai berikut :
Select loan-number
From loan
Where amount between 90000 and 100000
4.2.3 Klausa From
Contoh query : “Untuk semua customer yang mempunyai sebuah pinjaman dari bank, temukan nama dan loan number mereka”.
Dalam SQL ditulis :
Select distinct customer-name, borrower.loan-number
From borrower, loan
Where borrower.loan-number = loan.loan.number
4.2.4 Operasi Rename
SQL menyediakan mekanisme operasi rename untuk relasi dan atribut. Operasi
rename dalam SQL menggunakan klausa as dengan bentuk :
Nama-lama as nama-baru
Contoh : Jika atribut dengan nama loan-number akan diganti dengan nama loan-id, dapat ditulis sebagai berikut :
Select distinct customer-name, borrower.loan-number as loan-id
From borrower,loan
Where borrower.loan-number = loan.loan-number and
branch-name = “Perryridge”
4.3 OPERASI HIMPUNAN
Operasi operasi himpunan pada SQL-92 meliputi : union, intersect, dan except.
Union identik dengan , intersect identik dengan dan except identik dengan – pada aljabar relasional.
4.3.1 Operasi Union
Contoh : Untuk mendapatkan semua customer yang mempunyai pinjaman, rekening atau keduannya pada bank ditulis :
(select customer-name from depositor)
union
(select customer-name from borrower)
Operasi union secara otomatis akan menghilangkan duplikasi, tidak seperti klausa select. Sehingga pada query di atas, jika Jones (seorang customer) mempunyai beberapa rekening atau pinjaman (atau keduannya) pada bank, maka Jones hanya akan muncul sekali. Jika duplikasi diinginkan ada maka harus ditulis union all.
4.3.2 Operasi Intersect
Contoh : untuk mendapatkan semua customer yang memiliki pinjaman dan rekening pada bank, query-nya ditulis :
(select distinct customer-name from depositor)
intersect
(select distinct customer-name from borrower)
Operasi intersect secara otomatis menghilangkan duplikasi. Jika diinginkan duplikasi tetap ada ditulis intersect all.
4.3.3 Operasi Except
Contoh : untuk mendapatkan semua customer yang mempunyai sebuah rekening tetapi tidak memiliki pinjaman pada bank, ditulis :
(select distinct customer-name from depositor)
except
(select customer-name from borrower)
Operasi except secara otomatis menghilangkan duplikasi. Jika diinginkan ada maka ditulis : except all.
4.4 FUNGSI-FUNGSI AGREGASI
Yang termasuk fungsi-fungsi agregasi adalah :
- Average : avg
- Minimum : min
- Maximum : max
- Total : sum
- Count : count
Fungsi-fungsi di atas telah tersedia. Input untuk avg dan sum haruslah bertipe numerik. Untuk operator lainnya dapat non-numerik.
Contoh : untuk mendapatkan rata-rata saldo rekening pada cabang Perryridge
Query-nya dapat ditulis :
Select avg(balance) From account
where branch-name = “Perryridge”
Jika fungsi agregasi iningn diterapkan pada kelompok himpunan tuple, maka digunakan klausa group by. Nama atribut/kel. Atribut dalam klausa group by digunakan untuk membentuk grup/kelompok. Artinya tuple-tuple yang mempunyai nilai yang sama pada semua atribut dalam klausa group-by dimasukkan dalam satu grup/kelompok.
Contoh :
Select branch-name, avg(balance) From account
Group by branch-name
Jika suatu fungsi diterapkan pada grup/kelompok yang dibentuk oleh group by maka digunakan klausa having setelah group by.
Contoh : ingin ditampilkan nama cabang yang mempunyai rata-rata saldo lebih dari
1200.
Query-nya :
Select branch-name, avg(balance) From account
Group by branch-name having avg (balance)>1200
Fungsi agregrasi count sering digunakan untuk menghitung jumlah tuple dalam suatu relasi. Notasi fungsi ini dalam SQL adalah count (*). Jadi untuk menentukan jumlah tuple dalam relasi customer, ditulis :
Select count(*) from customer
4.5 SUBQUERI TERSARANG (NESTED SUBQUERYS)
Biasanya digunakan untuk melalukuan test keanggotaan himpunan, perbandingan himpunan dan kardinalitas himpunan.
4.5.1 Keanggotaan Himpunan
Digunakan in dan not in untuk melakukan test keanggotaan himpunan.
Contoh : untuk mendapatkan semua customer yang mempunyai pinjaman dan rekening pada bank.
Pertama : menemukan semua pemegang reeking dengan query :
(select customer-name from depositor)
Kedua : mencari semua customer yang merupakan peminjam dan yang muncul dalam daftar pemegang rekening. Maka dilakukan dengan “menyarangkan” subquery di atas dalam sebuah select luar (outer select), menjadi :
Select distinct customer-name
from borrower
Where customer-name
in (select customer-name from depositor)
4.5.2 Perbandingan Himpunan
Perhatikan query berikut : “Temukan semua nama cabang bank yang mempunyai asset lebih besar dari bank-bank yang mempunyai minimal satu
cabang berlokasi di Brooklyn”.
Query-nya ditulis :
Select branch-name from branch where assets > all
(select assets from branch where branch-city = “Brooklyn”)
4.6 MODIFIKASI BASIS DATA
Meliputi menambah, menghapus dan mengubah informasi menggunakan SQL.
4.6.1 Penghapusan (Deletion)
Yang dapat dihapus (delete) hanyalah tuple bukan nilai pada suatu atribut tertentu. Dalam SQL, deletion diekspresikan dengan
Delete from r where p
Dimana p menunjukkan predikat dan r adalah relasi. Contoh :
- Hapus semua rekening Smith, ditulis :
Delete from depositor where costomer-name = “Smith”
- Hapus semua pinjaman dengan jumlah pinjaman antara $1300 dan $1500
Delete from loan where amount between 1300 and 1500
- Hapus semua rekening pada setiap cabang yang berlokasi di Perryridge
Delete from account where branch-name in
(select branch-name
from branch where branch-city = “Perryridge”)
4.6.2 Penyisipan (Insertion)
Untuk menambahkan satu tuple dalam relasi digunakan statement insert. Contoh :
Insert into account values (“Perryridge”,”A-9732”,1200)
Query ini identik dengan
Insert into account (branch-name, account-number,balance) Values (“Perryridge”,”A-9732”,1200)
Insert juga dapat dilakukan untuk suatu hasil dari query yang lain. Contoh :
Insert into account select branch-name, loan-number, 200
From loan where branch-name = “Perryridge”
4.6.3 Update
Dalam situasi tertentu, diinginkan untuk mengganti nilai dalam sebuah tuple tanpa harus mengganti semua nilai dalam tuple tersebut. Untuk tujuan ini dapat digunakan statement update.
Contoh :
- untuk menaikkan saldo para nasabah sebesar 5% ditulis query sebagai berikut :
Update account set balance = balance * 1.05
- untuk menaikkan saldo nasabah sebesar 6% bagi nasabah yang saldonya lebih dari $10000, ditulis query sebagai berikut :
Update account set balance = balance *1.06
Where balance >10000
4.7 BAHASA DEFINISI DATA ( DATA – DEFINITION LANGUAGE)
DDL SQL memungkinkan dilakukannya spesifikasi tidak hanya pada himpunan relasi tetapi juga informasi untuk setiap relasi, yang meliputi :
- Skema setiap relasi
- Domain nilai setiap atribut relasi
- Konstrain integritas
- Himpunan indeks untuk setiap relasi
- Sekuriti dan autorisasi setiap relasi
- Struktur penyimpanan secara fisik untuk setiap relasi dalam disk.
4.7.1 Tipe-tipe Domain dalam SQL
SQL-92 standar mendukung bermacam-macam tipe domain yang built-in sebagai berikut :
- char(n) : tipe karakter dengan panjang yang tetap (n) (fixed-length character)
- varchar(n) : tipe karakter dengan panjang bervariasi. Maksimum panjang n.
- int : integer
- smallint : small integer
- numeric (p,d) : p menunjukkan jumlah digit bilangan dan d menunjukkan julah digit dibelakang titik desimal.
- real, double precision : floating-point dan double-precision floating point
- float (n) : floating-point number
- date : tipe kalender
- time : tipe hari dalam jam,menit dan detik
SQL-92 menggunakan klausa create domain untuk mendefinisikan domain.
Contoh :
create domain person-name char(20)
4.7.2 Definisi Skema dalam SQL
Untuk mendefinisikan sebuah relasi dengan perintah create table :
Create table r(A1D1,A2D2,….AnDn,
……………,
Dimana r adalah nama relasi, setiap AI adalah nama atribut dalam skema relasi, dan DI adalah tipe domain dari nilai dalam domain atribut Ai. Integrity constraint yang diperbolehkan antara lain : primary key (Aj1, Aj2,….Ajn) dan check (P)
Contoh :
Create table customer
(customer-name char(20) not null,
customer-street char(30), customer-city char(30), primary key (customer-name))
create table branch
(branch-name char(15) not null,
branch-city char(30),
assets integer,
primary key (branch-name), check(assets >=0))
create table account
(account-number char(10) not null,
branch-name char(15),
balance integer, primary key (account-number), check (balance >=0))
create table depositor
(customer-name char(20) not null,
account-number char(10) not null, primary key (customer-name, account-number))
Untuk lebih jelasnya, silahkan di download di : SQL
Perancangan Basis Data
PERANCANGAN BASIS DATA RELASIONAL
1.1 KETERGANTUNGAN FUNGSIONAL & MULTI NILAI
1.1.1 Ketergantungan Fungsional (Functional Dependency (FD))
Adalah ketergantungan nilai-nilai dari satu atau beberapa atribut terhadap satu atribut atau himpunan atribut lainnya.
Notasi : Y ➔ X
Biasa digunakan untuk menunjukkan bahwa X tergantung secara fungsional terhadap
Y. Atribut Y dikenal sebagai determinant dari FD Y ➔ X
Contoh : Person_ID, Project ➔ Time_Spent_By, Person_On_Project
Notasi X ↔ Y berarti X ➔ Y dan Y ➔ X
Contoh diagram functional dependency :
Project Project Budget
Person-ID
Project
Time_spent_By_
person_on_project
1.1.2 Functional Dependency Penuh
Atau Full Functional Dependency, biasa digunakan untuk mengindikasikan himpunan atribut minimum dalam sebuah determinant dari satu FD.
Himpunan atribut x akan bergantung secara fungsional penuh (fully functionally dependent) pada himpunan atribut y jika :
1. x bergantung secara fungsional pada y
2. x tidak bergantung secara fungsional pada suatu sub-himpunan dari y. contoh :
- Person_ID, Project, Project_budget ➔Time_spent_By_Person_on_Project
➔ Bukan suatu FD penuh
- Person_ID, Project ➔ Time_spent_by_Person_on_Project
➔ suatu FD penuh karena :
Person_ID ➔ Time_spent_By_Person_on_Project maupun
Project ➔ Time_spent_By_Person_on_Project, Tidak memenuhi syarat sebagai FD penuh.
Contoh diagram FD yang lebih kompleks :
Manager_Name
Warehouse_address warehouse_name
part_no
supplier_name delivery_number
QTY_in_store_on_date
inventory_date
QTY_delivered
Sifat-sifat FD :
1. Redundan FD
Sebuah FD dalam himpunan FD dikatakan redundan jika FD tersebut dapat diturunkan dari FD lainnya dalam himpunan FD.
Cara untuk mendeteksi sebuah FD redundan dengan langkah-langkah sebagai berikut :
1. tentukan S sebagai himpunan dari FD.
2. hapus satu FD misal f dan susun himpunan FD S’ = S – f
3. test apakah f dapat diturunkan dari DS-FD dalam S’ dengan menggunakan himpunan rule
4. jika f dapat diturunkan, berarti f redundan, ➔ S = S’. Jika tidak, masukkan f ke dalam himpunan S’ sedemikian sehingga S = S’ + f.
5. ulangi langkah ke-2 sampai 4 semua FD dalam S.
himpunan rule-relu digunakan untuk menghindari looping pada langkah ke-3.
Himpunan rule-rule (set of rule) (Amstrong,1974 & Beeri at.al 1978) terdiri dari :
- jika Y X, maka X → Y (refleksi)
- jika Z W, dan X → Y, maka XW → YZ ( augmentasi)
- jika X → Y dan Y → Z, maka X → Z (transitive)
Dalam prakteknya, terdapat aturan-aturan tambahan yaitu :
- jika X → Y dan YW → Z, maka XW → Z (pseudotransitive)
- jika X → Z dan X → YZ (union)
- jika X → YZ, maka X → Y dan Y → Z ( dekomposisi)
contoh :
Himpunan FD : { Z → A, B → X, AX →Y, ZB → Y} Akan ditunjukkan bahwa ZB → Y adalah redundan.
1. Z →A dengan augmentasi menghasilkan ZB →AB
2. B → X dan AX →Y dengan pseudotransitive menghasilkan AB → Y
3. ZB → AB dengan transitive menghasilkan ZB → Y
1.1.3 Algoritma Keanggotaan
Digunakan untuk menentukan apakah suatu FD, f(A → B), dapat diturunkan dari satu himpunan FD, sbb :
1. T = A, T adalah variable yang mengandung satu himpunan atribut-atribut A
adalah determinant dari f.
2. lihat FD yang lain untuk melihat apakah sebuah FD X →Y ditemukan, tambahkan atribut-atribut dalam pada himpuanan atribut-atribut dalam T ( aturan union & transitive)
3. Ulangi langkah-langkah setiap kali T dirubah hingga tidak ada lagi atribut-atribut yang dapat ditambahkan pada T.
4. Jika pada akhir algoritma B berada dalam T, maka A → B dapat diturunkan dari
FD lain dalam S ( aturan dekomposisi).
Contoh :
Himpunan FD : { Z → A, B → X, AX →Y, ZB → Y}
1. T = ZB
2. T = ZB + A = ZBA, karena Z → A berada dalam sisa himpunan FD dan ZT.
T = ZBA + X = ZBAX, karena B → X berada dalam sisa himpunan FD dan
BT.
T = ZBAX + Y = ZBAXY karena AX → Y berada dalam sisa himpuanan FD
dan AX T.
4.1.4 Closure
Sebuah closure mendefinisikan semua fungsional dependency yang dapat diturunkan dari satu himpunan FD yang diberikan.
Notasi F+ digunakan untuk menunjukkan closure dari himpuanan dependensi.
Contoh : F = { X → Y, Y → Z, YZ → W, WX → Y}
Dari himpunan FD di atas diturunkan FD yang lain, seperti : X → Z dengan transitive dari X → Y dan Y → Z
Atau
XZ → W dengan pseudotransitive dari X → W dan YZ → W
Untuk memastikan /menentukan apakah semua FD yang mungkin diturunkan dari satu himpunan FD dapat digunakan algoritma sebagai berikut :
T = A
While (changes to T) do
For each functional dependency
X → Y in F do
Begin
End
If X is in T then
Add Y to T
Contoh :
1. T = x
2. kemudian tambahkan Y ke T karena X → Y berada dalam himpunan FD.
3. tambahkan Z ke T, karena Y →Z berada dalam himpunan FD dan sekarang T = XYZ.
4. tambahkan W ke T, karena YZ → W
jadi F+ untuk X :
X → X, X → Y, X → Z, X → W, X →YZ, X → YW, X → ZW,
X → YWZ
Untuk melihat F+ dan Y, algoritma dapat diulang dengan memulai T =Y demikian seterusnya.
1.2 NORMALISASI (1..3)
Untuk menentukan apakah suatu relasi tertentu sudah dalam bentuk normal, harus diuji FD antara atribut-atribut dalam relasi.
Dalam definisi relasi yang diusulkan oleh C. Beeri dan Cowokers (1978), bahwa relasi terdiri dari dua komponen yaitu : atribut-atribut dan FD antara atribut-atribut tersebut.
Sebuah relasi mempunyai bentuk :
R1 = ({X,Y,Z}, {X → Y, X → Z})
Atribut FD
Contoh :
Relasi ASSIGN
{ Person_ID, PROJECT, PROJECT_BUDGET, Time_Spent_By_Person_On_Project}
→ atribut-atribut
{Person_ID, Project → Time_Spent_By_Person_On_Project, Project → Project_Budget}
→ FD
Functional Dependencies dapat digunakan dalam mendesain suatu basis data relasional untuk menghilangkan property-properti yang tidak diinginkan sehingga didapatkan desain yang baik yang disebut dalam bentuk normal. Terdapat sejumlah bentuk normal dimana yang dikenal (sangat popular) sebanyak 3 macam bentuk normal, yaitu : bentuk normal pertama, kedua dan ketiga.
Bentuk Normal Pertama
Sebuah relasi berada dalam bentuk normal pertama jika semua domaun adalah simple
Contoh :
Relasi : LIVED_IN
Person Residence
Jack
Martha
Gambar Relasi yang tidak normal
Relasi-relasi yang tidak/belum mempunyai domain yang simple (tidak berada dalam bentuk normal pertama) disebut relasi tidak normal (unnormalized relations).
Bentuk normal dari relasi LIVED_IN sebagai berikut : Relasi : LIVED_IN
Person City Date_Moved_In
Jack New York 030381
Jack Boston 070780
Jack Washington 080881
Martha Boston 040583
Martha Philadelphia 070685
Martha Chicago 080887
Bentuk Normal Kedua :
Sebuah relasi R berada dalam bentuk normal kedua jika setiap atribut dari R Functional Depencies (FD) penuh pada setiap kunci (key) relasi.
Dengan kata lain ada atribut yang bergantung pada subset kunci. Contoh relasi
ASSIGN.
Bentuk Normal Ketiga
Suatu relasi berada dalam bentuk normal ketiga jika :
1. relasi tersebut berada dalam bentuk normal kedua.
2. tidak terdapat atribut-atribut bukan kunci yang saling tergantung.
Contoh :
Relasi : PROJECT
Project Project-Budget Department Department Address
P1 32 Construct 20 Main
P2 40 Construct 20 Main
P3 27 Construct 20 Main
P4 17 Build 8 Fifth
FD pada relasi PROJECT :
Project_Budget
Department
Department_Address
Relasi project masih belum berada dalam bentuk normal ketiga karena ada atribut bukan kunci (Department _Address) bergantung pada atribut Department.
Relasi PROJECT dapat menjadi bentuk normal ke-3 dengan memecah relasi
Project dalam dua relasi yaitu :
PROJECT
Projects Project_Budget Department
P1 32 Construct
P2 40 Construct
P3 27 Construct
P4 17 Build
DEPARTMENT
Department Dep. Address
Construct 20 Main
Build 8 Fifth
1.3 METODOLOGI PERANCANGAN DIAGRAM E-R
Definisi basis data relasional adalah kumpulan relasi-relasi yang mengandung semua informasi yang akan disimpan dalam basis data.
Tiap relasi dalam basis data disimpan dalam sebuah file tersendiri. Struktur file yang digunakan untuk menyimpan relasi cukup sederhana, karena tiap record dalam file memiliki format yang sama.
Perancangan basis data merupakan salah satu bagian terpenting dalam proses pengembangan sistem. Perancangan basis data mempunyai beberapa tujuan yaitu :
1. menghilangkan redundansi data
2. meminimumkan jumlah relasi di dalam basis data
3. membuat relasi berada dalam bentuk normal, sehingga dapat meminimumkan permasalahan berkenaan dengan penambahan, pembaharuan dan penghapusan.
Teknik perancangan yang dilakukan dapat dilihat pada gambar berikut :
Untuk lebih jelasnya, silahkan di download di : perancangan basis data
Read More..
1.1 KETERGANTUNGAN FUNGSIONAL & MULTI NILAI
1.1.1 Ketergantungan Fungsional (Functional Dependency (FD))
Adalah ketergantungan nilai-nilai dari satu atau beberapa atribut terhadap satu atribut atau himpunan atribut lainnya.
Notasi : Y ➔ X
Biasa digunakan untuk menunjukkan bahwa X tergantung secara fungsional terhadap
Y. Atribut Y dikenal sebagai determinant dari FD Y ➔ X
Contoh : Person_ID, Project ➔ Time_Spent_By, Person_On_Project
Notasi X ↔ Y berarti X ➔ Y dan Y ➔ X
Contoh diagram functional dependency :
Project Project Budget
Person-ID
Project
Time_spent_By_
person_on_project
1.1.2 Functional Dependency Penuh
Atau Full Functional Dependency, biasa digunakan untuk mengindikasikan himpunan atribut minimum dalam sebuah determinant dari satu FD.
Himpunan atribut x akan bergantung secara fungsional penuh (fully functionally dependent) pada himpunan atribut y jika :
1. x bergantung secara fungsional pada y
2. x tidak bergantung secara fungsional pada suatu sub-himpunan dari y. contoh :
- Person_ID, Project, Project_budget ➔Time_spent_By_Person_on_Project
➔ Bukan suatu FD penuh
- Person_ID, Project ➔ Time_spent_by_Person_on_Project
➔ suatu FD penuh karena :
Person_ID ➔ Time_spent_By_Person_on_Project maupun
Project ➔ Time_spent_By_Person_on_Project, Tidak memenuhi syarat sebagai FD penuh.
Contoh diagram FD yang lebih kompleks :
Manager_Name
Warehouse_address warehouse_name
part_no
supplier_name delivery_number
QTY_in_store_on_date
inventory_date
QTY_delivered
Sifat-sifat FD :
1. Redundan FD
Sebuah FD dalam himpunan FD dikatakan redundan jika FD tersebut dapat diturunkan dari FD lainnya dalam himpunan FD.
Cara untuk mendeteksi sebuah FD redundan dengan langkah-langkah sebagai berikut :
1. tentukan S sebagai himpunan dari FD.
2. hapus satu FD misal f dan susun himpunan FD S’ = S – f
3. test apakah f dapat diturunkan dari DS-FD dalam S’ dengan menggunakan himpunan rule
4. jika f dapat diturunkan, berarti f redundan, ➔ S = S’. Jika tidak, masukkan f ke dalam himpunan S’ sedemikian sehingga S = S’ + f.
5. ulangi langkah ke-2 sampai 4 semua FD dalam S.
himpunan rule-relu digunakan untuk menghindari looping pada langkah ke-3.
Himpunan rule-rule (set of rule) (Amstrong,1974 & Beeri at.al 1978) terdiri dari :
- jika Y X, maka X → Y (refleksi)
- jika Z W, dan X → Y, maka XW → YZ ( augmentasi)
- jika X → Y dan Y → Z, maka X → Z (transitive)
Dalam prakteknya, terdapat aturan-aturan tambahan yaitu :
- jika X → Y dan YW → Z, maka XW → Z (pseudotransitive)
- jika X → Z dan X → YZ (union)
- jika X → YZ, maka X → Y dan Y → Z ( dekomposisi)
contoh :
Himpunan FD : { Z → A, B → X, AX →Y, ZB → Y} Akan ditunjukkan bahwa ZB → Y adalah redundan.
1. Z →A dengan augmentasi menghasilkan ZB →AB
2. B → X dan AX →Y dengan pseudotransitive menghasilkan AB → Y
3. ZB → AB dengan transitive menghasilkan ZB → Y
1.1.3 Algoritma Keanggotaan
Digunakan untuk menentukan apakah suatu FD, f(A → B), dapat diturunkan dari satu himpunan FD, sbb :
1. T = A, T adalah variable yang mengandung satu himpunan atribut-atribut A
adalah determinant dari f.
2. lihat FD yang lain untuk melihat apakah sebuah FD X →Y ditemukan, tambahkan atribut-atribut dalam pada himpuanan atribut-atribut dalam T ( aturan union & transitive)
3. Ulangi langkah-langkah setiap kali T dirubah hingga tidak ada lagi atribut-atribut yang dapat ditambahkan pada T.
4. Jika pada akhir algoritma B berada dalam T, maka A → B dapat diturunkan dari
FD lain dalam S ( aturan dekomposisi).
Contoh :
Himpunan FD : { Z → A, B → X, AX →Y, ZB → Y}
1. T = ZB
2. T = ZB + A = ZBA, karena Z → A berada dalam sisa himpunan FD dan ZT.
T = ZBA + X = ZBAX, karena B → X berada dalam sisa himpunan FD dan
BT.
T = ZBAX + Y = ZBAXY karena AX → Y berada dalam sisa himpuanan FD
dan AX T.
4.1.4 Closure
Sebuah closure mendefinisikan semua fungsional dependency yang dapat diturunkan dari satu himpunan FD yang diberikan.
Notasi F+ digunakan untuk menunjukkan closure dari himpuanan dependensi.
Contoh : F = { X → Y, Y → Z, YZ → W, WX → Y}
Dari himpunan FD di atas diturunkan FD yang lain, seperti : X → Z dengan transitive dari X → Y dan Y → Z
Atau
XZ → W dengan pseudotransitive dari X → W dan YZ → W
Untuk memastikan /menentukan apakah semua FD yang mungkin diturunkan dari satu himpunan FD dapat digunakan algoritma sebagai berikut :
T = A
While (changes to T) do
For each functional dependency
X → Y in F do
Begin
End
If X is in T then
Add Y to T
Contoh :
1. T = x
2. kemudian tambahkan Y ke T karena X → Y berada dalam himpunan FD.
3. tambahkan Z ke T, karena Y →Z berada dalam himpunan FD dan sekarang T = XYZ.
4. tambahkan W ke T, karena YZ → W
jadi F+ untuk X :
X → X, X → Y, X → Z, X → W, X →YZ, X → YW, X → ZW,
X → YWZ
Untuk melihat F+ dan Y, algoritma dapat diulang dengan memulai T =Y demikian seterusnya.
1.2 NORMALISASI (1..3)
Untuk menentukan apakah suatu relasi tertentu sudah dalam bentuk normal, harus diuji FD antara atribut-atribut dalam relasi.
Dalam definisi relasi yang diusulkan oleh C. Beeri dan Cowokers (1978), bahwa relasi terdiri dari dua komponen yaitu : atribut-atribut dan FD antara atribut-atribut tersebut.
Sebuah relasi mempunyai bentuk :
R1 = ({X,Y,Z}, {X → Y, X → Z})
Atribut FD
Contoh :
Relasi ASSIGN
{ Person_ID, PROJECT, PROJECT_BUDGET, Time_Spent_By_Person_On_Project}
→ atribut-atribut
{Person_ID, Project → Time_Spent_By_Person_On_Project, Project → Project_Budget}
→ FD
Functional Dependencies dapat digunakan dalam mendesain suatu basis data relasional untuk menghilangkan property-properti yang tidak diinginkan sehingga didapatkan desain yang baik yang disebut dalam bentuk normal. Terdapat sejumlah bentuk normal dimana yang dikenal (sangat popular) sebanyak 3 macam bentuk normal, yaitu : bentuk normal pertama, kedua dan ketiga.
Bentuk Normal Pertama
Sebuah relasi berada dalam bentuk normal pertama jika semua domaun adalah simple
Contoh :
Relasi : LIVED_IN
Person Residence
Jack
Martha
Gambar Relasi yang tidak normal
Relasi-relasi yang tidak/belum mempunyai domain yang simple (tidak berada dalam bentuk normal pertama) disebut relasi tidak normal (unnormalized relations).
Bentuk normal dari relasi LIVED_IN sebagai berikut : Relasi : LIVED_IN
Person City Date_Moved_In
Jack New York 030381
Jack Boston 070780
Jack Washington 080881
Martha Boston 040583
Martha Philadelphia 070685
Martha Chicago 080887
Bentuk Normal Kedua :
Sebuah relasi R berada dalam bentuk normal kedua jika setiap atribut dari R Functional Depencies (FD) penuh pada setiap kunci (key) relasi.
Dengan kata lain ada atribut yang bergantung pada subset kunci. Contoh relasi
ASSIGN.
Bentuk Normal Ketiga
Suatu relasi berada dalam bentuk normal ketiga jika :
1. relasi tersebut berada dalam bentuk normal kedua.
2. tidak terdapat atribut-atribut bukan kunci yang saling tergantung.
Contoh :
Relasi : PROJECT
Project Project-Budget Department Department Address
P1 32 Construct 20 Main
P2 40 Construct 20 Main
P3 27 Construct 20 Main
P4 17 Build 8 Fifth
FD pada relasi PROJECT :
Project_Budget
Department
Department_Address
Relasi project masih belum berada dalam bentuk normal ketiga karena ada atribut bukan kunci (Department _Address) bergantung pada atribut Department.
Relasi PROJECT dapat menjadi bentuk normal ke-3 dengan memecah relasi
Project dalam dua relasi yaitu :
PROJECT
Projects Project_Budget Department
P1 32 Construct
P2 40 Construct
P3 27 Construct
P4 17 Build
DEPARTMENT
Department Dep. Address
Construct 20 Main
Build 8 Fifth
1.3 METODOLOGI PERANCANGAN DIAGRAM E-R
Definisi basis data relasional adalah kumpulan relasi-relasi yang mengandung semua informasi yang akan disimpan dalam basis data.
Tiap relasi dalam basis data disimpan dalam sebuah file tersendiri. Struktur file yang digunakan untuk menyimpan relasi cukup sederhana, karena tiap record dalam file memiliki format yang sama.
Perancangan basis data merupakan salah satu bagian terpenting dalam proses pengembangan sistem. Perancangan basis data mempunyai beberapa tujuan yaitu :
1. menghilangkan redundansi data
2. meminimumkan jumlah relasi di dalam basis data
3. membuat relasi berada dalam bentuk normal, sehingga dapat meminimumkan permasalahan berkenaan dengan penambahan, pembaharuan dan penghapusan.
Teknik perancangan yang dilakukan dapat dilihat pada gambar berikut :
Untuk lebih jelasnya, silahkan di download di : perancangan basis data
Read More..
Relational
MODEL RELATIONAL
3.1 PENDAHULUAN
Model relasi pertama kali dikenalkan oleh Codd, pada tahun 1971. Sejak itu model relasi memainkan peranan yang sangat penting dalam berbagai perancangan basis data. Ada tiga alas an mengapa model relasi mempunyai peranan penting dalam perancangan basis data yaitu :
• mempunyai piranti komunikasi yang baik antara user & designer
artinya relasi merepresentasikan struktur data yang dapat dimengerti oleh user maupun designer.
• model relasional mendefinisikan salah satu kriteria perancangan basis data yang
penting yaitu relasi bentuk normal.
• Struktur data yang direpresentasikan oleh relasi dapat segera dikonversikan &
diimplementasikan ke RDBMS.
3.2 APA YANG DISEBUT DENGAN RELASI
Relasi pertama kali didefinisikan menggunakan teori himpunan. Cara termudah untuk mendefinisikan sebuah relasi adalah sebagai sebuah tabel dimana data-datanya disimpan dalam baris tabel.
Contoh Table : Tabel Work dibawah ini
Terdiri dari tiga kolom, yaitu Person_Id, Proj_No dan Total_Time. Tabel ini menyimpan waktu yang dihabiskan oleh person pada proyek tersebut. Selain tabel Work terdapat juga relasi Persons. Relasi ini menyimpan secara detail tentang person yang bekerja pada proyek dimaksud.
WORK
Person_Id Proj_No Total_Time
P1 PROJ1 20
P3 PROJ1 16
P2 PROJ2 35
P2 PROJ3 42
P3 PROJ2 17
P3 PROJ1 83
P4 PROJ3 41
PERSON
Person_Id Date_Of_birth Name
P1 JAN 62 JOE
P4 FEB 65 MARY
P3 AUG 33 ANDREW
P2 JUL 48 JOE
3.3 TERMINOLOGI
- Relasi = Tabel
- Atribut relasi = Kolom tabel
- Tuple = Baris
Domain
Part_Id Deskripsi Warna Berat
Dimensi (tipe : alpha) (tipe : string) (tipe : numeric) (tipe : numeric)
PARTS
Part_No Part_Name Warna Berat Max_Dim
P1 Gergaji Hitam 12 25
P2 Palu Coklat 20 19
P3 Bor Abu-abu 88 45
3.4 STRUKTUR LOJIK & FISIK
Relasi adalah sebuah representasi data lojik bukan fisik. Relasi menggambarkan struktur data tanpa memperhatikan bagaimana data disimpan atau diakses. Representasi lojik berarti bahwa sebuah relasi harus :
- tidak terdapat duplikasi baris
- urutan baris tidak diperhatikan
- setiap kolom dalam suatu relasi mempunyai sebuah nama yang unik
struktur fisik diperlukan selama implementasi fisik yaitu pada saat menentukan layout data & indeks yang digunakan untuk mengakses data dalam suatu relasi. Hal penting lainnya yang harus diperhatikan dalam merancang relasi adalah bahwa nama-nama atribut relasi harus menggambarkan sumber data berasal.
3.5 REDUNDANSI & DUPLIKASI
3.5.1 Redundansi
Salah satu dari perancangan lojik basis data adalah meniadakan redundansi. Redundansi terjadi jika fakta yang sama disimpan lebih dari sekali. Contoh redundansi adalah relasi Project_Data berikut : dalam relasi Project_Data, Project_Budget dari sebuah proyek disimpan lebih dari sekali. Yaitu sebanyak orang yang bekerja pada proyek tersebut. Hal ini tidak diinginkan karena menyebabkan banyak kerugian sebagai berikut :
o Jika Project_Budget untuk Proj_No berubah maka harus dilakukan perubahan lebih dari satu baris dalam relasi tersebut.
o Setiap kali penambahan orang baru untuk suatu proyek maka harus dimasukkan pula budget untuk proyek tersebut.
o Sebuah proyek yang tidak ada orangnya, seperti PROJ4, akan hanya mempunyai sebuah nilai Project_Budget tetapi tidak punya nilai untuk atribut lainnya. Ini berarti bahwa operasi-operasi terhadap relasi tersbut harus disesuaikan dengan keadaan struktur basis data saat itu.
PROJECT_DATA
Person_Id Proj_No Project_Budget Total_Time
P1 PROJ1 20 20
P3 PROJ1 20 16
P2 PROJ2 17 35
P2 PROJ3 84 42
P3 PROJ2 17 17
P3 PROJ1 20 83
P4 PROJ3 84 41
- PROJ4 90 -
3.5.2 Duplikasi
Duplikasi berbeda dengan redundansi. Kadang-kadang duplikasi diperlukan dalam basis data sementara redundansi harus dihindari.
Contoh duplikasi adalah relasi USE dibawah ini. Relasi USE memiliki lebih dari satu baris yang mempunyai nilai yang sama untuk atribut Project_Id, yaitu Proj1. Demikian juga untuk Proj2. Nilai-nilai ini harus disimpan lebih dari sekali karena menggambarkan fakta yang berbeda.
USE
Proj_Id Part_No Qty_Used
Proj1 P1 17
Proj2 P2 85
Proj1 P3 73
Proj2 P2 80
ASSIGNMENTS
Person_Id Dept Date_Of_Birth Date_Started Date_Finished
P1 Sales 1 June 53 2 June 80 5 Aug 83
P2 Sales 3 July 51 5 Aug 81 9 Dec 82
P3 Accounting 8 Aug 60 3 Feb 79 17 Jul 82
P1 Production 1 June 53 11 Mar 82 3 Feb 85
Sedangkan dalam relasi Assigment, satu nilai atribut Date_Of_Birth, yaitu 1 June 1953, dapat juga muncul lebih dari sekali. Berbeda dengan Proj1 & Proj2 di atas, 1 June 53 menunjukkan fakta yang sama yaitu menunjukkan orang yang sama. Hal ini menyebabkan terjadinya redundansi dalam relasi Assignment.
3.6 MENGHILANGKAN REDUNDANSI
Salah satu cara untuk menghilangkan redundansi adalah dengan dekomposisi. Sbuah relasi yang menyimpan sebuah fakta lebih dari sekali dapat didekomposisi ke dalam relasi-relasi yang hanya menyimpan sebuh fakta sekali.
Contoh relasi Project_Data di atas dapat didekomposisi menjadi relasi Projects dan Work di bawah ini .
PROJECT
Proj_No Project_Budget
Proj1 20
Proj2 17
Proj3 84
Proj4 90
WORK
Person_Id Proj_No Total_Time_Spent_By_
Person_On_Project
P1 Proj1 20
P3 Proj1 16
P2 Proj2 35
P2 Proj3 42
P3 Proj2 17
P3 Proj1 83
P4 Proj3 41
3.7 QUERY LANGUAGE
Query language adalah suatu bahasa yang menyediakan fasilitas bagi user untuk mengakses informasi dari basis data. Pada umumnya level bahasa ini lebih tinggi dari bahasa pemrograman standar. Bahasa query dapat dikategorikan sebagai prosedural & non-prosedural.
Dalam bahsa prosedural, user menginstruksikan ke sistem agar membentuk serangkaian operasi dalam basis data untuk mengeluarkan hasil yang diinginkan. Dalam bahasa non-prosedural, user mendeskripsikan informasi yang diinginkan tanpa memberikan prosedur detail untuk menghasilkan informasi tersebut.
Sebagian besar system basis data relasional yang beredar dipasaran menawarkan bahasa query dengan pendekatan prosedural & non-prosedural.
Bebrapa bahasa query yang murni adalah : aljabar relasional (relational algebra) merupakan bahasa query prosedural, sedangkan kalkulus relasional tuple (tuple relational calculus) & kalkulus relasional domain(domain relational calculus) adalah non-prosedural. Berikut hanya akan dibahas bahasa query bukan bahasa data- manipulation yang lengkap, yaitu bahasa yang tidak hanya terdiri dari bahas query tetapi juga bahasa untuk memodifikasi basis data, seperti perintah insert dan delete tuple.
3.7.1 Aljabar Relasional ( Relational Algebra)
Aljabar relasional adalah sebuah bahasa query prosedural yang terdiri dari sekumpulan operasi dimana masukkannya adalah satu atau dua relasi dan keluarannya adalah sebuah relasi baru sebagai hasil dari operasi tersebut. Operasi-operasi dasar dalam aljabar relasional adalah : select, project, union, set difference, Cartesian product dan
rename. Disamping operasi-operasi dasar terdapat beberapa operasi lainnya seperti set intersection, natural join, division dan assignment. Operasi-operasi ini akan didefinisikan dalam terminology operasi dasar.
3.7.1.1 Operasi-operasi Dasar
Operasi-operasi select, project dan rename disebut operasi unary, karena operasi- operasi tersebut hanya memerlukan satu relasi. Tiga operasi lainnya memerlukan sepasang relasi, disebut operasi binary.
a. Operasi Select
Operasi select menyeleksi tuple-tuple yang memenuhi predikat yang diberikan. Digunakan symbol sigma () untuk menunjukkan operasi select. Predikat muncul sebagai subcript dari . Argumen relasi diberikan dalam kurung yang mengikuti . Jadi untuk menyeleksi tuple-tuple dari relasi loan dimana branch-name-nya adalah
“Perryridge”, ditulis :
Jika relasi Loan adalah :
branch-name = “Perrydge”(loan)
Brach-name Loan-number Ammount
Downtown L-17 1000
Redwood L-23 2000
Perryridge L-15 1500
Downtown L-14 1500
Mianus L-93 500
Round Hill L-11 900
Perryridge L-16 1300
Maka hasil dari query di atas adalah :
Brach-name Loan-number Ammount
Perryridge L-15 1500
Perryridge L-16 1300
Contoh-contoh query lain dengan operasi select adalah : amount>1200(loan), untuk menemukan tuple dengan nilai amount lebih dari 1200, brach-name = “Perryridge” and amount >1200 (loan), untuk menemukan tuple dengan branch-name = “Perryridge” dimana nilai amountnya lebih dari 1200.
b. Operasi Project
Seandainya diinginkan semua daftar loan-number dan amount, tanpa branch- name. Dengan operasi project dapat dihasilkan relasi ini. Operasi project disimbolkan dengan symbol phi (). Nama-nama atribut yang diinginkan tampil ditulias sebagai subcrip .
Contoh : loan-number,amount(loan), adalah operasi untuk menampilkan seluruh
loan-number & amount tanpa branch-name.
Hasil operasi tersebut adalah :
Loan-number Amount
L-17 1000
L-23 2000
L-15 1500
L-14 1500
L-93 500
L-11 900
L-16 1300
c. Komposisi Operasi-operasi relasional
Berikut contoh query yang lebih kompleks : “ Temukan kastemer-kastemer yang tinggal di Horison “. Maka query-nya ditulis :
customer-name(customer-city=”Horison”(customer))
perhatikan bahwa sebagai argumen dari operasi project adalah sebuah ekspresi untuk suatu relasi. Oleh karenanya, operasi-operasi aljabar relasional dapat digabung dengan suatu ekspresi aljabar relasional.
d. Operasi Union
Operasi union dalam aljabar relasional sama halnya dengan operasi union pada aritmatika. Misal user menginginkan nama-nama semua nasabah bank yang memiliki sebuah account atau sebuah loan atau keduanya. Perhatikan bahwa relasi customer tidak mengandung informasi tersebut. Untuk menjawab query ini diperlukan informasi dari relasi Depositor dan relasi Borrower. Dengan operasi union informasi yang diinginkan dapat diperoleh dengan menulis query sebagai berikut :
customer-name(borrower) customer-name(depositor)
DEPOSITOR
Customer-name Account-number
Johnson A-101
Smith A-215
Hayes A-102
Turner A-305
Johnson A-201
Jones A-217
Lindsay A-222
BORROWER
Customer-name Loan-number
Jones L-17
Smith L-23
Hayes L-15
Jackson L-14
Curry L-93
Smith L-11
Williams L-17
Adams L-16
Hasil query yang union di atas adalah :
Customer-name
Johnson
Smith
Hayes
Turner
Jones
Lindsay
Jackson
Curry
Williams
Adams
Operasi union rs bernilai benar jika kedua relasi memenuhi dua kondisi berikut :
1. Relasi r & s harus mempunyai jumlah atribut yang sama
2. Domain dati atribut ke-I di relasi r dan domain dari atribut ke-I dari s harus sama untuk semua i.
e. Operasi Pengurangan Himpunan ( Set Difference)
Disimbolkan dengan tanda “-“. Operasi ini untuk menemukan tuple-tuple yang berada pada satu relasi tetapi tidak berada pada relasi yang lainnya. Contoh untuk menemukan semua nasabah bank yang mempunyai account tetapi tidak mempunyai loan, ditulis :
customer-name(depositor) - customer-name(borrower)
hasil query di atas :
Customer-name
Johnson
Turner
Lindsay
f. Operasi Cartesian –product
Operasi Cartesian-product disimbolkan dengan “x”. Dengan operasi ini dapat dihasilkan informasi yang merupakan kombinasi dari dua relasi.
Secara garis besar, jika dipunyai relasi r1(R1) dan r2(R2), maka r1 x r2 adalah relasi yang skemanya merupakan gabungan dari R1 ( atribut-atribut relasi r1) dan R2 (atribut-atribut r2). Relasi R mengandung semua tuple t dimana terdapat sebuah tuple t1 dalam r1 dan t2 dalam r2 sedemikian sehingga t[R1] = t1[R1] dan t[R2]=t2[R2].
Contoh : Jika diinginkan nama-nama dari semua nasabah yang mempunyai pinjaman (loan) di bank cabang Perryridge. Maka query-nya ditulis :
branch-name=”Perryridge”(borrower x loan)
Relasi yang dihasilkan :
Customer-name Loan-number Branch-name Loan-number Amount
Jones L-17 Perryridge L-15 1500
Jones L-17 Perryridge L-16 1300
Smith L-23 Perryridge L-15 1500
Smith L-23 Perryridge L-16 1300
Hayes L-15 Perryridge L-15 1500
Hayes L-15 Perryridge L-16 1300
Jackson L-14 Perryridge L-15 1500
Jackson L-14 Perryridge L-16 1300
Curry L-93 Perryridge L-15 1500
Curry L-93 Perryridge L-16 1300
Smith L-11 Perryridge L-15 1500
Smith L-11 Perryridge L-16 1300
Williams L-17 Perryridge L-15 1500
Williams L-17 Perryridge L-16 1300
Adams L-16 Perryridge L-15 1500
Adams L-16 Perryridge L-16 1300
g. Operasi Rename
Dilambangkan dengan symbol rho (). Sintaks penulisan rename : x(E).
Operasi rename mengeluarkan hasil ekspresi E dengan nama x. Contoh :
account.balance(account.balance1200. Andai hanya diinginkan atribut loan-number dari relasi loan. Untuk mengekspresikan permintaan ini, diperlukan notasi “terdapatlah (there exists)” dengan notasi :
t r (Q(t))
dibaca “ terdapatlah sebuah tuple t dalam relasi sedemikian sehingga bahwa predikat Q(t) adalah benar”.
Dengan menggunakan notasi ini maka dapat ditulis query “Tampilkan loan number untuk setiap pinjaman yang lebih dari $1200” sebagai
t s loan (t[loan-number]=s[loan-number]s[amount]>1200
3.7.3 Kalkulus Relasional Domain ( The Domain Relational Calculus)
Bentuk kalkulus relasional ini menggunakan variabel domain yang mengambil sebuah nilai dari domain atribut, bukan dari nilai seluruh tuple.
Contoh query :
- Tampilkan nama cabang, loan number dan jumlah pinjaman yang lebih dari
$1200, dengan kalkulus relasional domain, query-nya ditulis :
loan a>1200
- Tampilkan semua loan-number untuk jumlah pinjaman yang lebih dari $1200, dengan kalkulus relasional domain, query-nya ditulis :
b,a( loan >1200)
- Tampilkan nama-nama semua customer yang mempunyai pinjaman di cabang
Perryridge beserta loan-number-nya.
( borrower b ( loan b = “Perryridge”))
- Tampilkan nama-nama semua customer yang mempunyai pinjaman, rekening, atau keduanya pada cabang Perryridge :
l ( borrower b,a ( loan b = “Perryridge”))
b,n ( account b = “Perryridge”))
- Tampilkan semua nama-nama customer yang mempunyai rekening pada semua cabang-cabang yang berlokasi di Brooklyn :
x,y,z ( branch) y = “Brooklyn”
a,b( account depositor )
3.7.4 Modifikasi Dalam Basis Data
1. Penghapusan (Deletion)
Dalam aljabar relasional, operasi deletion diekspresikan dengan :
r r-E, dimana r adalah relasi dan E adalah sebuah query aljabar
relasional.
Berikut beberapa contoh dari perintah delete dengan aljabar relasional adalah :
- Hapus semua rekening atas nama Smith
account account - cusLomer-name — “SmiLil Iaccount)
- Hapus semua pinjaman dengan jumlah diantara 0 s/d 50
loan loan - amounL > — 0 and amounL <—50 Iloan) - Hapus semua account pada cabang-cabang yang berlokasi di Needham r1 branci –ciLy — “Neediaml (account x branch) r2 branci-name, accounL-number, balance (r1) account account – r2 2. Penyisipan (Insertion) Untuk menyisipkan data ke dalam suatu relasi, dapat dilakukan dengan dua cara yaitu menentukan tuple-tuple yang akan disisipkan. Dalam relasional aljabar, penyisipan diekspresikan dengan : r r E, dimana r adalah relasi dan E adalah sebuah ekspresi relasional aljabar. Contoh : seandainya akan disisipkan fakta bahwa Smith mempunyai $1200 dalam rekening A-973 pada cabang Perryridge. Query-nya ditulis : account account (“Perryridge”, A-973,1200) depositor depositor (“Smith”, A-973) Contoh lain : 3. Updating r1 Ibranci-name — “Perryridgel Iborrower x loan)) r2 branci-name, loan-number Ir1) account account (r2 x (200)) depositor depositor cusLomer-name, loan-number Ir1) Dapat digunakan operator proyeksi secara umum sebagai berikut : r F1,F2,… Fn (r) Contoh : seandainya akan dibuat bunga tabungan sebesar 5% ditulis query : account branci-name,accounL-number,balancebalance*1.05 Iaccount) 4. View View didefinisikan dengan statement create view. Untuk mendefinisikan sebuah view maka view tersebut harus diberi nama dan query untuk menghasilkan view tersebut. Format statement create view sebagai berikut : Create view v as
Dimana ekspresi query adalah sebuah ekspresi query relation-algebra yang sah dan nama view direpresentasikan dengan v.
Contoh : untuk membuat view yang terdiri dari semua cabang bank dan pelanggannya
Create view all-customer as
branci-name, cusLomer-name Idepositor x account)
branci-name, cusLomer-name Iborrower x loan)
Untuk lebih jelasnya, bisa di dowload di : Relational
Read More..
3.1 PENDAHULUAN
Model relasi pertama kali dikenalkan oleh Codd, pada tahun 1971. Sejak itu model relasi memainkan peranan yang sangat penting dalam berbagai perancangan basis data. Ada tiga alas an mengapa model relasi mempunyai peranan penting dalam perancangan basis data yaitu :
• mempunyai piranti komunikasi yang baik antara user & designer
artinya relasi merepresentasikan struktur data yang dapat dimengerti oleh user maupun designer.
• model relasional mendefinisikan salah satu kriteria perancangan basis data yang
penting yaitu relasi bentuk normal.
• Struktur data yang direpresentasikan oleh relasi dapat segera dikonversikan &
diimplementasikan ke RDBMS.
3.2 APA YANG DISEBUT DENGAN RELASI
Relasi pertama kali didefinisikan menggunakan teori himpunan. Cara termudah untuk mendefinisikan sebuah relasi adalah sebagai sebuah tabel dimana data-datanya disimpan dalam baris tabel.
Contoh Table : Tabel Work dibawah ini
Terdiri dari tiga kolom, yaitu Person_Id, Proj_No dan Total_Time. Tabel ini menyimpan waktu yang dihabiskan oleh person pada proyek tersebut. Selain tabel Work terdapat juga relasi Persons. Relasi ini menyimpan secara detail tentang person yang bekerja pada proyek dimaksud.
WORK
Person_Id Proj_No Total_Time
P1 PROJ1 20
P3 PROJ1 16
P2 PROJ2 35
P2 PROJ3 42
P3 PROJ2 17
P3 PROJ1 83
P4 PROJ3 41
PERSON
Person_Id Date_Of_birth Name
P1 JAN 62 JOE
P4 FEB 65 MARY
P3 AUG 33 ANDREW
P2 JUL 48 JOE
3.3 TERMINOLOGI
- Relasi = Tabel
- Atribut relasi = Kolom tabel
- Tuple = Baris
Domain
Part_Id Deskripsi Warna Berat
Dimensi (tipe : alpha) (tipe : string) (tipe : numeric) (tipe : numeric)
PARTS
Part_No Part_Name Warna Berat Max_Dim
P1 Gergaji Hitam 12 25
P2 Palu Coklat 20 19
P3 Bor Abu-abu 88 45
3.4 STRUKTUR LOJIK & FISIK
Relasi adalah sebuah representasi data lojik bukan fisik. Relasi menggambarkan struktur data tanpa memperhatikan bagaimana data disimpan atau diakses. Representasi lojik berarti bahwa sebuah relasi harus :
- tidak terdapat duplikasi baris
- urutan baris tidak diperhatikan
- setiap kolom dalam suatu relasi mempunyai sebuah nama yang unik
struktur fisik diperlukan selama implementasi fisik yaitu pada saat menentukan layout data & indeks yang digunakan untuk mengakses data dalam suatu relasi. Hal penting lainnya yang harus diperhatikan dalam merancang relasi adalah bahwa nama-nama atribut relasi harus menggambarkan sumber data berasal.
3.5 REDUNDANSI & DUPLIKASI
3.5.1 Redundansi
Salah satu dari perancangan lojik basis data adalah meniadakan redundansi. Redundansi terjadi jika fakta yang sama disimpan lebih dari sekali. Contoh redundansi adalah relasi Project_Data berikut : dalam relasi Project_Data, Project_Budget dari sebuah proyek disimpan lebih dari sekali. Yaitu sebanyak orang yang bekerja pada proyek tersebut. Hal ini tidak diinginkan karena menyebabkan banyak kerugian sebagai berikut :
o Jika Project_Budget untuk Proj_No berubah maka harus dilakukan perubahan lebih dari satu baris dalam relasi tersebut.
o Setiap kali penambahan orang baru untuk suatu proyek maka harus dimasukkan pula budget untuk proyek tersebut.
o Sebuah proyek yang tidak ada orangnya, seperti PROJ4, akan hanya mempunyai sebuah nilai Project_Budget tetapi tidak punya nilai untuk atribut lainnya. Ini berarti bahwa operasi-operasi terhadap relasi tersbut harus disesuaikan dengan keadaan struktur basis data saat itu.
PROJECT_DATA
Person_Id Proj_No Project_Budget Total_Time
P1 PROJ1 20 20
P3 PROJ1 20 16
P2 PROJ2 17 35
P2 PROJ3 84 42
P3 PROJ2 17 17
P3 PROJ1 20 83
P4 PROJ3 84 41
- PROJ4 90 -
3.5.2 Duplikasi
Duplikasi berbeda dengan redundansi. Kadang-kadang duplikasi diperlukan dalam basis data sementara redundansi harus dihindari.
Contoh duplikasi adalah relasi USE dibawah ini. Relasi USE memiliki lebih dari satu baris yang mempunyai nilai yang sama untuk atribut Project_Id, yaitu Proj1. Demikian juga untuk Proj2. Nilai-nilai ini harus disimpan lebih dari sekali karena menggambarkan fakta yang berbeda.
USE
Proj_Id Part_No Qty_Used
Proj1 P1 17
Proj2 P2 85
Proj1 P3 73
Proj2 P2 80
ASSIGNMENTS
Person_Id Dept Date_Of_Birth Date_Started Date_Finished
P1 Sales 1 June 53 2 June 80 5 Aug 83
P2 Sales 3 July 51 5 Aug 81 9 Dec 82
P3 Accounting 8 Aug 60 3 Feb 79 17 Jul 82
P1 Production 1 June 53 11 Mar 82 3 Feb 85
Sedangkan dalam relasi Assigment, satu nilai atribut Date_Of_Birth, yaitu 1 June 1953, dapat juga muncul lebih dari sekali. Berbeda dengan Proj1 & Proj2 di atas, 1 June 53 menunjukkan fakta yang sama yaitu menunjukkan orang yang sama. Hal ini menyebabkan terjadinya redundansi dalam relasi Assignment.
3.6 MENGHILANGKAN REDUNDANSI
Salah satu cara untuk menghilangkan redundansi adalah dengan dekomposisi. Sbuah relasi yang menyimpan sebuah fakta lebih dari sekali dapat didekomposisi ke dalam relasi-relasi yang hanya menyimpan sebuh fakta sekali.
Contoh relasi Project_Data di atas dapat didekomposisi menjadi relasi Projects dan Work di bawah ini .
PROJECT
Proj_No Project_Budget
Proj1 20
Proj2 17
Proj3 84
Proj4 90
WORK
Person_Id Proj_No Total_Time_Spent_By_
Person_On_Project
P1 Proj1 20
P3 Proj1 16
P2 Proj2 35
P2 Proj3 42
P3 Proj2 17
P3 Proj1 83
P4 Proj3 41
3.7 QUERY LANGUAGE
Query language adalah suatu bahasa yang menyediakan fasilitas bagi user untuk mengakses informasi dari basis data. Pada umumnya level bahasa ini lebih tinggi dari bahasa pemrograman standar. Bahasa query dapat dikategorikan sebagai prosedural & non-prosedural.
Dalam bahsa prosedural, user menginstruksikan ke sistem agar membentuk serangkaian operasi dalam basis data untuk mengeluarkan hasil yang diinginkan. Dalam bahasa non-prosedural, user mendeskripsikan informasi yang diinginkan tanpa memberikan prosedur detail untuk menghasilkan informasi tersebut.
Sebagian besar system basis data relasional yang beredar dipasaran menawarkan bahasa query dengan pendekatan prosedural & non-prosedural.
Bebrapa bahasa query yang murni adalah : aljabar relasional (relational algebra) merupakan bahasa query prosedural, sedangkan kalkulus relasional tuple (tuple relational calculus) & kalkulus relasional domain(domain relational calculus) adalah non-prosedural. Berikut hanya akan dibahas bahasa query bukan bahasa data- manipulation yang lengkap, yaitu bahasa yang tidak hanya terdiri dari bahas query tetapi juga bahasa untuk memodifikasi basis data, seperti perintah insert dan delete tuple.
3.7.1 Aljabar Relasional ( Relational Algebra)
Aljabar relasional adalah sebuah bahasa query prosedural yang terdiri dari sekumpulan operasi dimana masukkannya adalah satu atau dua relasi dan keluarannya adalah sebuah relasi baru sebagai hasil dari operasi tersebut. Operasi-operasi dasar dalam aljabar relasional adalah : select, project, union, set difference, Cartesian product dan
rename. Disamping operasi-operasi dasar terdapat beberapa operasi lainnya seperti set intersection, natural join, division dan assignment. Operasi-operasi ini akan didefinisikan dalam terminology operasi dasar.
3.7.1.1 Operasi-operasi Dasar
Operasi-operasi select, project dan rename disebut operasi unary, karena operasi- operasi tersebut hanya memerlukan satu relasi. Tiga operasi lainnya memerlukan sepasang relasi, disebut operasi binary.
a. Operasi Select
Operasi select menyeleksi tuple-tuple yang memenuhi predikat yang diberikan. Digunakan symbol sigma () untuk menunjukkan operasi select. Predikat muncul sebagai subcript dari . Argumen relasi diberikan dalam kurung yang mengikuti . Jadi untuk menyeleksi tuple-tuple dari relasi loan dimana branch-name-nya adalah
“Perryridge”, ditulis :
Jika relasi Loan adalah :
branch-name = “Perrydge”(loan)
Brach-name Loan-number Ammount
Downtown L-17 1000
Redwood L-23 2000
Perryridge L-15 1500
Downtown L-14 1500
Mianus L-93 500
Round Hill L-11 900
Perryridge L-16 1300
Maka hasil dari query di atas adalah :
Brach-name Loan-number Ammount
Perryridge L-15 1500
Perryridge L-16 1300
Contoh-contoh query lain dengan operasi select adalah : amount>1200(loan), untuk menemukan tuple dengan nilai amount lebih dari 1200, brach-name = “Perryridge” and amount >1200 (loan), untuk menemukan tuple dengan branch-name = “Perryridge” dimana nilai amountnya lebih dari 1200.
b. Operasi Project
Seandainya diinginkan semua daftar loan-number dan amount, tanpa branch- name. Dengan operasi project dapat dihasilkan relasi ini. Operasi project disimbolkan dengan symbol phi (). Nama-nama atribut yang diinginkan tampil ditulias sebagai subcrip .
Contoh : loan-number,amount(loan), adalah operasi untuk menampilkan seluruh
loan-number & amount tanpa branch-name.
Hasil operasi tersebut adalah :
Loan-number Amount
L-17 1000
L-23 2000
L-15 1500
L-14 1500
L-93 500
L-11 900
L-16 1300
c. Komposisi Operasi-operasi relasional
Berikut contoh query yang lebih kompleks : “ Temukan kastemer-kastemer yang tinggal di Horison “. Maka query-nya ditulis :
customer-name(customer-city=”Horison”(customer))
perhatikan bahwa sebagai argumen dari operasi project adalah sebuah ekspresi untuk suatu relasi. Oleh karenanya, operasi-operasi aljabar relasional dapat digabung dengan suatu ekspresi aljabar relasional.
d. Operasi Union
Operasi union dalam aljabar relasional sama halnya dengan operasi union pada aritmatika. Misal user menginginkan nama-nama semua nasabah bank yang memiliki sebuah account atau sebuah loan atau keduanya. Perhatikan bahwa relasi customer tidak mengandung informasi tersebut. Untuk menjawab query ini diperlukan informasi dari relasi Depositor dan relasi Borrower. Dengan operasi union informasi yang diinginkan dapat diperoleh dengan menulis query sebagai berikut :
customer-name(borrower) customer-name(depositor)
DEPOSITOR
Customer-name Account-number
Johnson A-101
Smith A-215
Hayes A-102
Turner A-305
Johnson A-201
Jones A-217
Lindsay A-222
BORROWER
Customer-name Loan-number
Jones L-17
Smith L-23
Hayes L-15
Jackson L-14
Curry L-93
Smith L-11
Williams L-17
Adams L-16
Hasil query yang union di atas adalah :
Customer-name
Johnson
Smith
Hayes
Turner
Jones
Lindsay
Jackson
Curry
Williams
Adams
Operasi union rs bernilai benar jika kedua relasi memenuhi dua kondisi berikut :
1. Relasi r & s harus mempunyai jumlah atribut yang sama
2. Domain dati atribut ke-I di relasi r dan domain dari atribut ke-I dari s harus sama untuk semua i.
e. Operasi Pengurangan Himpunan ( Set Difference)
Disimbolkan dengan tanda “-“. Operasi ini untuk menemukan tuple-tuple yang berada pada satu relasi tetapi tidak berada pada relasi yang lainnya. Contoh untuk menemukan semua nasabah bank yang mempunyai account tetapi tidak mempunyai loan, ditulis :
customer-name(depositor) - customer-name(borrower)
hasil query di atas :
Customer-name
Johnson
Turner
Lindsay
f. Operasi Cartesian –product
Operasi Cartesian-product disimbolkan dengan “x”. Dengan operasi ini dapat dihasilkan informasi yang merupakan kombinasi dari dua relasi.
Secara garis besar, jika dipunyai relasi r1(R1) dan r2(R2), maka r1 x r2 adalah relasi yang skemanya merupakan gabungan dari R1 ( atribut-atribut relasi r1) dan R2 (atribut-atribut r2). Relasi R mengandung semua tuple t dimana terdapat sebuah tuple t1 dalam r1 dan t2 dalam r2 sedemikian sehingga t[R1] = t1[R1] dan t[R2]=t2[R2].
Contoh : Jika diinginkan nama-nama dari semua nasabah yang mempunyai pinjaman (loan) di bank cabang Perryridge. Maka query-nya ditulis :
branch-name=”Perryridge”(borrower x loan)
Relasi yang dihasilkan :
Customer-name Loan-number Branch-name Loan-number Amount
Jones L-17 Perryridge L-15 1500
Jones L-17 Perryridge L-16 1300
Smith L-23 Perryridge L-15 1500
Smith L-23 Perryridge L-16 1300
Hayes L-15 Perryridge L-15 1500
Hayes L-15 Perryridge L-16 1300
Jackson L-14 Perryridge L-15 1500
Jackson L-14 Perryridge L-16 1300
Curry L-93 Perryridge L-15 1500
Curry L-93 Perryridge L-16 1300
Smith L-11 Perryridge L-15 1500
Smith L-11 Perryridge L-16 1300
Williams L-17 Perryridge L-15 1500
Williams L-17 Perryridge L-16 1300
Adams L-16 Perryridge L-15 1500
Adams L-16 Perryridge L-16 1300
g. Operasi Rename
Dilambangkan dengan symbol rho (). Sintaks penulisan rename : x(E).
Operasi rename mengeluarkan hasil ekspresi E dengan nama x. Contoh :
account.balance(account.balance
t r (Q(t))
dibaca “ terdapatlah sebuah tuple t dalam relasi sedemikian sehingga bahwa predikat Q(t) adalah benar”.
Dengan menggunakan notasi ini maka dapat ditulis query “Tampilkan loan number untuk setiap pinjaman yang lebih dari $1200” sebagai
t s loan (t[loan-number]=s[loan-number]s[amount]>1200
3.7.3 Kalkulus Relasional Domain ( The Domain Relational Calculus)
Bentuk kalkulus relasional ini menggunakan variabel domain yang mengambil sebuah nilai dari domain atribut, bukan dari nilai seluruh tuple.
Contoh query :
- Tampilkan nama cabang, loan number dan jumlah pinjaman yang lebih dari
$1200, dengan kalkulus relasional domain, query-nya ditulis :
loan a>1200
- Tampilkan semua loan-number untuk jumlah pinjaman yang lebih dari $1200, dengan kalkulus relasional domain, query-nya ditulis :
- Tampilkan nama-nama semua customer yang mempunyai pinjaman di cabang
Perryridge beserta loan-number-nya.
- Tampilkan nama-nama semua customer yang mempunyai pinjaman, rekening, atau keduanya pada cabang Perryridge :
b,n ( account b = “Perryridge”))
- Tampilkan semua nama-nama customer yang mempunyai rekening pada semua cabang-cabang yang berlokasi di Brooklyn :
a,b(
3.7.4 Modifikasi Dalam Basis Data
1. Penghapusan (Deletion)
Dalam aljabar relasional, operasi deletion diekspresikan dengan :
r r-E, dimana r adalah relasi dan E adalah sebuah query aljabar
relasional.
Berikut beberapa contoh dari perintah delete dengan aljabar relasional adalah :
- Hapus semua rekening atas nama Smith
account account - cusLomer-name — “SmiLil Iaccount)
- Hapus semua pinjaman dengan jumlah diantara 0 s/d 50
loan loan - amounL > — 0 and amounL <—50 Iloan) - Hapus semua account pada cabang-cabang yang berlokasi di Needham r1 branci –ciLy — “Neediaml (account x branch) r2 branci-name, accounL-number, balance (r1) account account – r2 2. Penyisipan (Insertion) Untuk menyisipkan data ke dalam suatu relasi, dapat dilakukan dengan dua cara yaitu menentukan tuple-tuple yang akan disisipkan. Dalam relasional aljabar, penyisipan diekspresikan dengan : r r E, dimana r adalah relasi dan E adalah sebuah ekspresi relasional aljabar. Contoh : seandainya akan disisipkan fakta bahwa Smith mempunyai $1200 dalam rekening A-973 pada cabang Perryridge. Query-nya ditulis : account account (“Perryridge”, A-973,1200) depositor depositor (“Smith”, A-973) Contoh lain : 3. Updating r1 Ibranci-name — “Perryridgel Iborrower x loan)) r2 branci-name, loan-number Ir1) account account (r2 x (200)) depositor depositor cusLomer-name, loan-number Ir1) Dapat digunakan operator proyeksi secara umum sebagai berikut : r F1,F2,… Fn (r) Contoh : seandainya akan dibuat bunga tabungan sebesar 5% ditulis query : account branci-name,accounL-number,balancebalance*1.05 Iaccount) 4. View View didefinisikan dengan statement create view. Untuk mendefinisikan sebuah view maka view tersebut harus diberi nama dan query untuk menghasilkan view tersebut. Format statement create view sebagai berikut : Create view v as
Dimana ekspresi query adalah sebuah ekspresi query relation-algebra yang sah dan nama view direpresentasikan dengan v.
Contoh : untuk membuat view yang terdiri dari semua cabang bank dan pelanggannya
Create view all-customer as
branci-name, cusLomer-name Idepositor x account)
branci-name, cusLomer-name Iborrower x loan)
Untuk lebih jelasnya, bisa di dowload di : Relational
Langganan:
Komentar (Atom)
