1 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
MODUL 10 : IMPLEMENTASI ERD DALAM SQL
TUJUAN PRAKTIKUM
1. Mampu memahami dan merancang struktur basis data dengan SQL
2. Mampu membuat struktur tabel-tabel basis data berdasarkan rancangan ERD 3. Mampu mengimplementasikan tabel-tabel tersebut dengan SQL
4. Mampu menampilkan data satu table atau lebih
MATERI PRAKTIKUM
Basis data dapat diimplementasikan berdasarkan E-R diagram yang telah dibuat. Implementasi database bisa:
1. Secara manual (dengan perintah SQL ‘CREATE TABLE’)
2. Secara semi-manual dengan bantuan client berbasis GUI (MySQL Front, PgAdmin, phpMyAdmin, dll.)
A. Entity dan Relationships Macam Relationships :
1. One-to-One : menggunakan notasi 1:1
a. Satu record di entity pertama berhubungan dengan hanya satu record di entity kedua, dan demikian pula sebaliknya.
b. Entity mana saja bisa menjadi tabel utama, sesuai dengan situasi/kebutuhan/analisis.
c. Primary Key (PK) dari tabel utama menjadi Foreign Key (FK) di tabel kedua. 2. One-to-Many (atau Many-to-One) : menggunakan notasi 1:n
a. Jika A terhadap B mempunyai one-to-many relationship (atau B terhadap A mempunyai many-to-one relationship): satu record di A bisa berhubungan dengan banyak record di B, tetapi satu record di B berhubungan dengan hanya satu record di A.
2 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
b. Entity di sisi One dalam hubungan One-to-Many menjadi tabel utama, dan entity di sisi Many menjadi tabel kedua.
c. PK dari tabel utama menjadi FK di tabel kedua.
d. Di contoh sebelumnya, A menjadi tabel utama dan B menjadi tabel kedua. Maka, ada FK di B yang merupakan PK di A.
3. Many-to-Many : menggunakan notasi m:n
a. Jika A terhadap B mempunyai many-to-many relationship: satu record di A bisa berhubungan dengan banyak record di B, dan demikian pula sebaliknya.
b. Dalam implementasi database, harus ada sebuah tabel perantara di antara A dan B. A dan B menjadi tabel utama, dan tabel perantara menjadi tabel kedua. c. PK dari A menjadi FK di tabel perantara (tabel kedua), dan PK dari B juga
menjadi FK di tabel kedua. Gabungan semua FK di tabel kedua menjadi Composite PK untuk tabel kedua.
d. A terhadap tabel perantara mempunyai 1:n relationship. e. B terhadap tabel perantara juga mempunyai 1:n relationship.
B. Tahap Pembuatan Tabel
1. Membuat semua tabel yang paling utama (yang tidak memiliki FK).
2. Membuat semua tabel yang berhubungan langsung (atau memiliki relationship) dengan tabel yang dibuat di tahap sebelumnya. Mulailah secara urut dari tabel dengan jumlah FK yang paling sedikit ke yang paling banyak.
3. Ulangi tahap 2 sampai semua tabel selesai dibuat.
C. Implementasi Manual
Contoh untuk menentukan Primary Key (PK):
CREATE TABLE dosen (nip INTEGER PRIMARY KEY, nama_dosen VARCHAR(45), alamat_dosen VARCHAR(255));
CREATE TABLE ruang (kode_ruang VARCHAR(20) PRIMARY KEY, lokasi_ruang VARCHAR(255), kapasitas_ruang INTEGER);
3 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
Contoh untuk menentukan Foreign Key (FK):
CREATE TABLE mahasiswa(nim INTEGER PRIMARY KEY, nip INTEGER REFERENCES dosen (nip), nama_mhs VARCHAR(45), alamat_mhs VARCHAR(255))
Contoh untuk banyak FK:
CREATE TABLE mata_kuliah(kode_mk INTEGER PRIMARY KEY, nip INTEGER REFERENCES dosen (nip), kode_ruang VARCHAR(20)
REFERENCES ruang (kode_ruang), nama_mk VARCHAR(45),
deskripsi_mk VARCHAR(255));
Contoh untuk menentukan composite PK:
CREATE TABLE mhs_ambil_mk(nim INTEGER REFERENCES mahasiswa (nim), kode_mk INTEGER REFERENCES mata_kuliah(kode_mk), PRIMARY KEY(nim, kode_mk));
D. Referential Integrity
1. Integritas database mengacu pada hubungan antar tabel melalui Foreign Key yang bersangkutan.
2. Pada insert, record harus dimasukkan di tabel utama dahulu, kemudian baru di tabel kedua.
3. Pada delete, record harus dihapus di tabel kedua dahulu, kemudian baru di tabel utama.
4. Secara default, kebanyakan DBMS yang ada akan menolak insert atau delete yang melanggar integritas database.
E. Advance Create Table Option 1. Default
Untuk menentukan nilai default kolom jika tidak ada data yang di-insert untuk kolom itu:
4 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
CREATE TABLE mahasiswa(nim integer PRIMARY KEY, nama_mhs varchar(45), fakultas varchar(5) DEFAULT ‘FKI’);
2. Not Null
• Untuk membatasi agar nilai kolom tidak boleh NULL:
CREATE TABLE ruang(kode_ruang varchar(20) PRIMARY KEY, lokasi_ruang varchar(255) NOT NULL, kapasitas_ruang integer NOT NULL);
• Jika kolom ditentukan NOT NULL, maka insert harus memasukkan nilai untuk kolom tersebut.
• Bisa menggunakan DEFAULT sehingga nilai kolom ditambahkan secara otomatis.
3. Unique
• Untuk memastikan bahwa nilai kolom unik:
CREATE TABLE mata_kuliah(kode_mk integer PRIMARY KEY, nama_mk varchar(45) UNIQUE);
• Untuk multikolom yang unik:
CREATE TABLE dosen(nip integer PRIMARY KEY, nama_dosen
varchar(45), alamat_dosen varchar(255), UNIQUE
(nama_dosen, alamat_dosen)); 4. Check
• Untuk membatasi nilai kolom, misalnya:
CREATE TABLE produk(kode_produk integer PRIMARY KEY, nama_produk varchar(45), harga integer, CHECK (harga <= 100000 AND kode_produk > 100 ));
• Check di atas membatasi bahwa harga harus maksimal Rp 100000, dan kode_produk harus di atas 100.
5. Penentuan Referential Integrity Contoh:
5 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
CREATE TABLE pemasok(kode_pemasok integer PRIMARY KEY, nama_pemasok varchar(45), kode_produk integer REFERENCES produk ON DELETE CASCADE ON UPDATE CASCADE);
Untuk contoh di atas, jika ada update atau delete di tabel utama, maka tabel kedua secara otomatis disesuaikan.
6. Action
• NO ACTION atau RESTRICT: update atau delete tidak dilakukan. Ini merupakan pilihan default.
• CASCADE: nilai kolom di tabel kedua disesuaikan dengan nilai kolom di tabel utama
• SET NULL: nilai kolom di tabel kedua dijadikan NULL
• SET DEFAULT: nilai kolom di tabel kedua dijadikan nilai DEFAULT (nilai DEFAULT harus ditentukan pada waktu pembuatan tabel).
7. Autoincrement
• Untuk fitur autoincrement, gunakan “serial”:
CREATE TABLE nasabah(id_nasabah serial PRIMARY KEY, nama_nasabah varchar(45));
• Untuk contoh di atas, id_nasabah tidak perlu di-insert, karena database secara otomatis akan menambahkannya secara urut.
• “serial” hanya bisa dari 1 sampai 232.
• Jika tidak cukup, gunakan “bigserial” yang bisa dar i 1 sampai 264.
• Jika kolom menggunakan “serial” atau “bigserial”, j angan sekali-kali memasukkan nilai kolom tersebut secara manual! Biarkan database menambahkannya sendiri secara urut!
• Penghapusan record tidak akan mempengaruhi urutan untuk serial dan bigserial. Nilai untuk kolom yang menggunakan serial/bigserial akan selalu bertambah 1, tidak akan pernah kembali mundur.
6 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n PK id_pelanggan char(12) no_ktp nama no_telp char(16) text PK i d_nota total FK i d_pelanggan FK date char(12) PK id_barang stok char(50) integer(8) PK id_pegawai char(10) no_ktp char(16) nama alamat tgl_bayar char(5) da te jumlah char(5) char(5) integer(5) tgl_retur total _retur retur char(5) da te PK i d_trans char(5) da te nama_kategori varchar(25) text
INTRUKSI
Berikut terdapat ER Diagram Toko Sukses Selalu.
Diagram Relasi Antar Tabel Toko Elektronik Sukses Selalu
Jurnal PK|FK no_akun char(5) PK|FK i d_trans char(5) posisi_dr_cr varchar(6) nominal integer char(5) char(5) no_akun nm_akun Total_nota Id_barang alamat pekerjaan Nama_barang Tgl_nota
nama No_ktp Harga
Id_Nota Jumlah Subtotal
Stok Id_pelanggan No telp 1 mendapatkan membayar Id_pegawai No_ktp n Jumlah nama 1 mencatat membayar memiliki Subtotal alamat 1 1 N Noo ttelplp n n Id_kategori posisi mendata n nama_kategori
Sisa _piutang keterangan no_akun
nm_akun
Id_trans n
m 1
dicatat Akun dikelompokkan
Tgl_trans n Posisi _dr_cr nominal jml_trans n 1 n Terdiri dari n n n n IS A
7 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
Data dalam Database Toko Sukses Selalu
Pelanggan
id_pelanggan no_ktp nama alamat no_telp pekerjaa
n
1111111111 Tidak Terdaftar
8924234423 3372026404830000 Jeko Jl.Bojong Soang Bandung 022734412234 swasta
8935353535 3372026404832420 Boy Jl.Sukabirus Bandung 098987654321 mahasiswa
8911223344 3372026404112233 Domino Jl.Moch.Toha Bandung 02254321 wirausaha
Pegawai
id_pegawai no_ktp nama Alamat no_telp posisi
201301001 3372026404830000 Jeko Jl.Bojong Soang Bandung 022734412234 kasir
201301002 3372026404777777 Budi Jl.Sukapura Bandung 08988776655 kasir
201302001 3372026404987654 Wawan Jl.Sukabirus Bandung 089899999 kasir
201302009 3372026404135792 Wati Jl. Telekomunikasi Bandung 14000 supervisor
Kategori_barang
id_kategori nama_kategori Keterangan
ELK Elektronik Elektronik
BZR Bazar Perlengkapan Rumah Tangga
SFL Softline Pakaian Siap Pakai
GPK Grocery Perawatan Kecantikan Perawatan dan kecantikan GMK Grocery Makanan Minuman Makanan dan Minuman
PSG Pasar Segar Sayur, buah dan daging
Barang
id_barang Nama harga stok id_kate
gori UA-22F5000 LED TV Samsung 22 inch 1900000 100 ELK KLV-24EX430 LED TV SONY 24 Inch 1999600 100 ELK
24LN4100 LED TV LG 24 Inch 2036900 100 ELK
32LN5100 LED TV LG 32 Inch 3492000 100 ELK
DH-6330P HOME THEATHER LG 2461700 100 ELK
ES-FL8605-WW WASHING MACHINE SHARP
6KG 2863600 100 ELK
NA-F852 WASHING MACHINE
PANASONIC 8.5KG 2590000 100 ELK
MUG-ZDK MUG ZODIAK 19900 100 BZR
MUG-SHO MUG SHIO 19900 100 BZR
8 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
KNWTPUMP KENMASTER WATER PUMP 27500 100 BZR
KC-105 KOMPOR MINI PORTABLE 124900 100 BZR
STELLA70GR STELLA ALL IN ONE 70 GR 7200 100 BZR
HITLEMON HIT AEROSOL LEMON 600ML 24150 100 BZR
ATTSOFT ATTACK SOFTENER 800GR 14325 100 BZR
ATTCMAX ATTACK CLEAN MAXIMIZER
800GR 14325 100 BZR
INDOMIE INDOMIE ALL VARIAN 1500 100 GMK
UHT125ML ULTRAMILK 125ML 1800 100 GMK
UHT1000ML ULTRAMILK 1000ML 11350 100 GMK
Nota_penjualan
id_nota tgl_nota total id_pelanggan id_pegawai 86856 2013-05-01 45675 1111111111 201301001 86857 2013-05-01 52800 8924234423 201301001 86858 2013-05-01 38500 8924234423 201301002 86859 2013-05-01 3492000 8935353535 201301002 86860 2013-06-01 8817300 8911223344 201301002 86861 2013-07-01 2863600 8924234423 201301002 86862 2013-07-01 297000 8924234423 201302001 Detail_penjualan
id_nota id_barang jumlah subtotal
86856 STELLA70GR 1 7200 86856 HITLEMON 1 24150 86856 ATTSOFT 1 14325 86857 HITLEMON 1 24150 86857 ATTSOFT 2 28650 86858 MUG-ZDK 1 19900 86858 INDOMIE 10 15000 86858 UHT125ML 2 3600 86859 32LN5100 1 3492000 86860 32LN5100 1 3492000 86860 DH-6330P 1 2461700 86860 ES-FL8605-WW 1 2863600 86861 ES-FL8605-WW 1 2863600 86862 INDOMIE 90 135000 86862 UHT125ML 90 162000 Transaksi
id_trans tgl_trans jml_trans
BYR1 2013-05-01 45675
BYR2 2013-05-01 52800
9 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n BYR4 2013-05-01 3000000 BYR5 2013-06-01 492000 BYR6 2013-06-01 4408650 BYR7 2013-07-01 2204325 BYR8 2013-08-01 2000000 BYR9 2013-09-01 204325 BYR10 2013-07-01 363600 BYR11 2013-07-01 47000 RTR1 2013-05-01 10500 RTR2 2013-07-02 43650 Pembayaran
id_bayar sisa_piutang id_nota id_pegawai
BYR1 0 86856 201301001 BYR2 0 86857 201301001 BYR3 0 86858 201301002 BYR4 492000 86859 201301002 BYR5 0 86859 201301001 BYR6 47000 86860 201301002 BYR7 2204325 86860 201301001 BYR8 204325 86860 201301001 BYR9 0 86860 201301001 BYR10 2500000 86861 201301002 BYR11 250000 86862 201302001 retur Id_retur RTR1 RTR2 Detail_retur
id_nota id_barang id_retur jumlah Subtotal
86858 INDOMIE RTR1 7 10500
86862 INDOMIE RTR2 13 19500
86857 HITLEMO
N RTR2 1 24150
Akun
no_akun nm_akun header_akun
1 Aktiva
11 Aktiva Lancar 1
111 Kas 11
112 Piutang Dagang 11
113 Persediaan Barang Dagangan 11
10 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
115 Asuransi Dibayar Dimuka (09/12) 11
116 Perlengkapan 11 2 Hutang 21 Hutang Lancar 2 211 Utang Dagang 21 3 Modal 311 Modal Tn X 3 3112 Prive Tn. X 311 4 Pendapatan 41 Pendapatan Usaha 4 411 Penjualan 41
412 Harga Pokok Penjualan 41
413 Retur Penjualan 41 414 Potongan Penjualan 41 5 Beban 511 Beban Listrik 5 512 Beban Air 5 513 Beban Telepon 5 514 Beban Gaji 5 jurnal
no_akun id_trans posisi_dr_cr nominal
111 BYR1 debet 45675 411 BYR1 kredit 45675 111 BYR2 debet 52800 411 BYR2 kredit 52800 111 BYR3 debet 38500 411 BYR3 kredit 38500 111 BYR4 debet 3000000 112 BYR4 debet 492000 411 BYR4 kredit 3492000 111 BYR5 debet 492000 112 BYR5 kredit 492000 111 BYR6 debet 4408650 112 BYR6 debet 4408650 411 BYR6 kredit 8817300 111 BYR7 debet 2204325 112 BYR7 kredit 2204325 111 BYR8 debet 2000000 112 BYR8 kredit 2000000 111 BYR9 debet 204325 112 BYR9 kredit 204325 111 BYR10 debet 363600 112 BYR10 debet 2500000 411 BYR10 kredit 2863600 111 BYR11 debet 47000
11 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n 112 BYR11 debet 250000 411 BYR11 kredit 297000 413 RTR1 debet 10500 111 RTR1 kredit 10500 413 RTR2 debet 43650 111 RTR2 kredit 43650
Berdasarkan ER Diagram, diagram relasi antar tabel beserta isi data dalam basis data Toko Elektronik Sukses Selalu. Tampilkan informasi berikut:
1. Tampilkan data transaksi pembayaran yang pernah tercatat, yaitu data tanggal bayar, id_bayar, nama pegawai yang mencatat transaksi pembayaran, dan sisa piutang diurutkan berdasarkan tanggal bayar dari yg terlama ke terbaru kemudian diurutkan berdasarkan id_bayar secara ascending. (JOIN 3 tabel)
2. Tampilkan no_nota penjualan, tanggal nota dicatat, nama pelanggan yang bertransaksi, dan nama pegawai yang melakukan pencatatan transaksi penjualan.
3. Tampilkan no_nota penjualan, tanggal nota dicatat, nama pelanggan yang bertransaksi, dan nama pegawai yang melakukan pencatatan transaksi penjualan hanya untuk transaksi yang tgerjadi pada tanggal 1 Mei 2013.
4. Tampilkan tanggal transaksi pembayaran beserta dengan nama pegawai yang melakukan pencatatan pembayaran pada tanggal 1 Mei 2013. (JOIN 3 tabel)#
5. Tampilkan tanggal transaksi retur untuk data retur yang pernah tercatat, nama barang yang diretur, dan jumlah barang yang diretur. (JOIN 3 tabel)
6. Tampilkan tanggal penjualan yang pernah tercatat, nama barang yang terjual, dan nama kategori barang dengan menghilangkan data yang duplikat dan diurutkan berdasarkan tanggal dari yang terlama sampai dengan terbaru. (JOIN 4 tabel)
7. Tampilkan tanggal penjualan yang pernah tercatat nama barang yang terjual, dan nama kategori barang beserta dengan total jumlah barang yang terjual untuk masing- masing barang setiap hari nya.
8. Tampilkan tanggal penjualan yang pernah tercatat nama barang yang terjual, dan nama kategori barang beserta dengan total jumlah barang yang terjual untuk masing- masing barang setiap hari nya dengan syarat data yang ditampilkan adalah barang yang memiliki total jumlah barang terjual perharinya lebih besar dari
12 | P a g e L a b o r a t o y o f E n t e r p r i s e A p p l i c a t i o n
9. Tampilkan nama barang beserta nama pelanggan yang pernah membeli barang tersebut khusus untuk barang dengan merk SHARP atau LG diurutkan berdasarkan nama barang dari ‘A-Z’.(JOIN 4 tabel)
10. tersebut khusus untuk barang dengan merk SHARP atau LG diurutkan berdasarkan nama barang dari ‘A-Z’.(JOIN 4 tabel)
11. Tampilkan tanggal transaksi, id_trans, kode_akun, nama_akun, posisi_dr_cr, dan nominal yang pernah tercatat di tabel jurnal dengan diurutkan berdasarkan tgl transaksi, id_transaksi, posisi_dr_cr, dan id_akun.