Selasa, 17 September 2019
Kegiatan
Belajar Mengajar (KBM) di Pesantren Siber Bandung seperti biasanya dimulai
sekitar pukul sembilan pagi. Pada pertemuan hari ini KBM diisi oleh Kang Basyir
melanjutkan pembahasan mengenai basis data -artinya materi hari ini berhubungan
erat dengan MySQL dan semisalnya-. Pada pertemuan sebelumnya kami telah
mempelajari basis data mengenai materi DML (Data Manipulation Language) yang
terdiri dari INSERT, UPDATE, DELETE, SELECT. Adapun pada pertemuan kali ini
Kang Basyir melanjutkan pembahasan materi terkait relasi pada database.
Pertama-tama
Kang Basyir membahas mengenai Primary Key dan Foreign Key. Primary key
merupakan kunci unik yang terdapat pada hampir setiap tabel, sedangkan foreign
key adalah kunci unik yang dititipkan suatu table ke table lainnya dan
menjadikannya sebagai penghubung antar table. Istilah primary key dan foreign
key ini tergantung dari sudut mana kita melihatnya karena terkadang suatu kode
unik adalah primary key pada tabel A tetapi kode tersebut juga menjadi foreign
key pada tabel B. Ketika kita ingin mendesign suatu database maka primar key
harus digaris bawahi -salah satu fungsinya untuk membedakannya dengan foreign
key-.Lalu Kang Basyir menjelaskan jenis relasi pada database yang terbagi
menjadi tiga yaitu : One to One, One to Many, dan Many to Many. Pada umumnya,
relasi ‘One to One’ menggunakan primary key ke primary key. Sedangkan relasi
‘One to Many’ menggunakan primary key ke foreign key. Adapun ‘Many to Many’
relasi umumnya menggunakan foreign key ke foreign key.
Selanjutnya
Kang Basyir memberi kami tugas untuk mempelajari terlebih dahulu materi
mengenai normalisasi pada relasi basis data hingga waktu dzuhur tiba. Berikut
adalah hasil apa yang saya pelajari :
- § Normalisasi adalah proses pembentukan relasi basis data kedalam bentuk normal (maksud dari bentuk normal adalah aturan-aturan yang harus dipenuhi oleh relasi-relasi pada basis data) sehingga nantinya proses pengerjaan yang berkaitan basis data bisa berjalan dengan baik & efektif.
- § Pada umumnya ketika kita membuat suatu tabel, tabel tersebut akan berbentuk tabel universal dimana semua informasi dimasukkan kedalam satu tabel. Tabel seperti ini sangat tidak efektif dalam basis data sehingga perlu dipecahkan/ didekomposisi ke bentuk normal (NF/Normal Form). Proses normalisasi ini dimulai dari tahap 1NF hingga maksimal tahap 5NF, tapi biasanya sampai tahap 3NF karena sudah cukup memadai.
- § Sifat & Aturan pada bentuk normal tahap satu (1NF) adalah tabel tidak memiliki atribut bernilai banyak (multivalued attribute) -misalnya hobby karena biasanya seseorang akan mencatumkan lebih dari satu hobby pada data dirinya-, tabel tidak memiliki atribut composite dimana dalam satu atribut memiliki beberapa informasi yang digabung menjadi satu -misalnya : jadwal yang berisi hari & jam-, tabel bernilai atomic / tidak dapat dibagi-bagi lagi. Pada perubahan ke bentuk ini yang harus diperhatikan adalah apakah ada informasi/atribut yang masih bergabung/bernilai banyak.
- § Sifat & Aturan pada bentuk normal tahap dua (2NF) adalah aturan 1NF sudah terpenuhi, tidak ada atribut yang ketergantungannya hanya tergantung pada sebagian dari primary key (functional dependency) -misalnya : ketergantungan antara mata kuliah dengan kode mk, mahasiswa dengan name-, jika ada atribut yang tidak memiliki ketergantungan pada primary key maka dapat dipindah/dihilangkan. Pada perubahan ke bentuk ini yang harus diperhatikan adalah keterkaitan/ketergantungan antar data.
- § Sifat & Aturan pada bentuk normal tahap tiga (3NF) adalah aturan 2NF sudah terpenuhi, tidak ada atribut non primary key yang memiliki ketergantungan pada non primary key lainnya –misalnya : ketergantungan kode pos dengan jalan, kota, provinsi-
Pada KBM setelah istirahat siang,
Kang Basyir menjelaskan tugas yang sudah diberikan kepada kita untuk dipelajari
yaitu mengenai normalisasi pada database -penjelasan versi beliau sedikit
berbeda dengan apa yang saya pelajari sebelumnya-, beliau juga memberikan
contohnya. Singkatnya, pada perubahan dari bentuk tidak normal ke bentuk 1NF
yang perlu kita lakukan adalah menghilangkan perulangan/penggabungan group sehingga
tidak ada data yang tergabung. Berikut ini adalah contoh bentuk awal sebuah
tabel :
Tabel Makanan
|
|||||||||
Kd Makanan
|
Nama Makanan
|
Kd Jenis
|
Jenis Makanan
|
Kota Pembuatan
|
Stok
|
Bahan Makanan
|
Stok bahan
|
||
M-01
|
Nasi
|
J01
|
Berat
|
Bandung
|
30
|
Beras
|
30
|
||
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Daging Sapi
|
15
|
||
Kaldu Sapi
|
21
|
||||||||
Tepung
|
30
|
||||||||
M03
|
Tempe
|
J01
|
Berat
|
Cimahi
|
10
|
Kedelai
|
10
|
||
Jamur
|
20
|
||||||||
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Brokoli
|
5
|
||
Wortel
|
2
|
||||||||
Kangkung
|
15
|
||||||||
Lalu berikut ini contoh perubahan ke bentuk 1NF :
1NF
|
|||||||
Kd Makanan
|
Nama Makanan
|
Kd Jenis
|
Jenis Makanan
|
Kota Pembuatan
|
Stok
|
Bahan Makanan
|
Stok bahan
|
M-01
|
Nasi
|
J01
|
Berat
|
Bandung
|
30
|
Beras
|
30
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Daging Sapi
|
15
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Kaldu Sapi
|
21
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Tepung
|
30
|
M03
|
Tempe
|
J01
|
Berat
|
Cimahi
|
10
|
Kedelai
|
10
|
M03
|
Tempe
|
J01
|
Berat
|
Cimahi
|
10
|
Jamur
|
20
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Brokoli
|
5
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Wortel
|
2
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Kangkung
|
15
|
Pada perubahan dari 1NF ke bentuk 2NF adalah
dengan memisahkan antara data yang saling bergantungan. Berikut adalah
contohnya dimana tabel dipecah menjadi beberapa tabel :
2NF
|
|||||||
Kd Makanan
|
Nama Makanan
|
Kd Jenis
|
Jenis Makanan
|
Kota Pembuatan
|
Stok
|
Bahan Makanan
|
Stok bahan
|
M-01
|
Nasi
|
J01
|
Berat
|
Bandung
|
30
|
Beras
|
30
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Daging Sapi
|
15
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Kaldu Sapi
|
21
|
M-02
|
Bakso
|
J01
|
Berat
|
Bandung
|
50
|
Tepung
|
30
|
M03
|
Tempe
|
J01
|
Berat
|
Cimahi
|
10
|
Kedelai
|
10
|
M03
|
Tempe
|
J01
|
Berat
|
Cimahi
|
10
|
Jamur
|
20
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Brokoli
|
5
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Wortel
|
2
|
M04
|
Jus Sayur
|
J02
|
Minuman
|
Surabaya
|
15
|
Kangkung
|
15
|
Tbl Jenis Makanan
|
Kota Pembuatan
|
Bahan Makanan
|
||||
Kd Jenis
|
Jenis Makanan
|
Kota Pembuatan
|
Bahan Makanan
|
Stok bahan
|
||
J01
|
Berat
|
Bandung
|
Beras
|
30
|
||
J01
|
Berat
|
Bandung
|
Daging Sapi
|
15
|
||
J01
|
Berat
|
Bandung
|
Kaldu Sapi
|
21
|
||
J01
|
Berat
|
Bandung
|
Tepung
|
30
|
||
J01
|
Berat
|
Cimahi
|
Kedelai
|
10
|
||
J01
|
Berat
|
Cimahi
|
Jamur
|
20
|
||
J02
|
Minuman
|
Surabaya
|
Brokoli
|
5
|
||
J02
|
Minuman
|
Surabaya
|
Wortel
|
2
|
||
J02
|
Minuman
|
Surabaya
|
Kangkung
|
15
|
||
Untuk perubahan dari 2NF ke bentuk 3NF adalah
dengan menghilangkan anomali-anomali –dan anomali yang paling jelas adalah
redudansi (perulangan)-. Pada contoh sebelumnya terdapat redudansi pada tabel
jenis makanan & kota pembuatan, redudansi tersebut dihilangkan menjadi
seperti berikut :
Tbl Jenis Makanan
|
Kota Pembuatan
|
||
Kd Jenis
|
Jenis Makanan
|
Kota Pembuatan
|
|
J01
|
Berat
|
Bandung
|
|
J02
|
Minuman
|
Cimahi
|
|
Surabaya
|
|||
Adapun perubahan dari 3NF ke bentuk 4NF adalah
dengan menambahkan id untuk tabel yang tidak memilikinya, lalu membuat relasi
dengan foreign key & tabel relasi -jika dibutuhkan-. Berikut contohnya
dimana ada tambahan tabel relasi sehingga jumlah tabel yang sebelumnya empat
menjadi lima tabel :
4NF
|
|||||||||||
Tabel
Makanan
|
Tbl
Jenis Makanan
|
Kota
Pembuatan
|
|||||||||
Kd Makanan
|
Nama Makanan
|
Kd Jenis
|
kd Kota
|
Stok
|
Kd Jenis
|
Jenis Makanan
|
Id Kota
|
Kota Pembuatan
|
|||
M-01
|
Nasi
|
J01
|
KT01
|
30
|
J01
|
Berat
|
KT01
|
Bandung
|
|||
M-02
|
Bakso
|
J01
|
KT01
|
50
|
J02
|
Minuman
|
KT02
|
Cimahi
|
|||
M03
|
Tempe
|
J01
|
KT02
|
10
|
KT03
|
Surabaya
|
|||||
M04
|
Jus
Sayur
|
J02
|
KT03
|
15
|
|||||||
Tbl Relasi
|
|||||
Tbl Makanan Bahan
|
Bahan Makanan
|
||||
Kd Makanan
|
Kd Bahan
|
Id Bahan
|
Bahan Makanan
|
Stok bahan
|
|
M-01
|
BHN01
|
BHN01
|
Beras
|
30
|
|
M-02
|
BHN02
|
BHN02
|
Daging Sapi
|
15
|
|
M-02
|
BHN03
|
BHN03
|
Kaldu Sapi
|
21
|
|
M-02
|
BHN04
|
BHN04
|
Tepung
|
30
|
|
M03
|
BHN05
|
BHN05
|
Kedelai
|
10
|
|
M03
|
BHN06
|
BHN06
|
Jamur
|
20
|
|
M04
|
BHN07
|
BHN07
|
Brokoli
|
5
|
|
M04
|
BHN08
|
BHN08
|
Wortel
|
2
|
|
M04
|
BHN09
|
BHN09
|
Kangkung
|
15
|
|
Kang
Basyir lalu menyuruh kami untuk mengimplementasikan tabel-tabel tersebut
kedalam MySQL. Beliau juga sedikit mengenalkan tentang alter table, add
constraint, foreign key, references, cascade melalui aplikasi DBeaver. Itulah
beberapa hal yang saya pelajari hari ini, semoga Allah senantiasa menjadikan
kita hambanya yang beriman kapanpun dan dimanapun kita berada...Aamiin
EmoticonEmoticon