Anda di halaman 1dari 10

NORMALISASI

 Tujuan Normalisasi
Dalam merancang suatu basis data relasional, sasaran utama dalam
mengembangkan suatu model data logika adalah untuk membuat suatu data yang akurat
yaitu relasi-relasi dan batasan-batasannya. Untuk mencapai sasaran ini, kita harus
mengidentifikasi bentuk atau rangkaian yang sesuai dari relasi. Teknik yang kita dapat
gunakan untuk membantu mengidentifikasi relasi disebut normalisasi.
Normalisasi adalah suatu teknik untuk memproduksi suatu rangkaian relasi-relasi
dengan properti-properti yang diinginkan untuk memenuhi permintaan-permintaan data
suatu organisasi.
Proses normalisasi pertama kali dikembangkan oleh E.F.Codd (1972). Normalisasi
sering ditampilkan sebagai suatu rangkaian pengujian dalam suatu relasi untuk
menentukan apakah relasi tersebut memenuhi permintaan dari suatu bentuk rangkaian
yang spesifik.
Proses normalisasi merupakan metode formal yang mengidentifikasi relasi-relasi
berdasarkan kunci utama dan ketergantungan fungsional diantara atribut-atribut.
Normalisasi mendukung perancang-perancang basis data dengan menyajikan serangkaian
pengujian yang dapat diaplikasikan pada relasi-relasi individu sehingga skema relasi dapat
dinormalisasikan ke bentuk yang spesifik untuk mencegah anomali-anomali pengupdatean
yang kemungkinan terjadi.

 Redudansi Informasi dan Anomali Pengupdatean


Tujuan utama dari perancangan basis data relasional adalah untuk
mengelompokkan atribut-atribut ke dalam relasi-relasi agar meminimalisasikan redundansi
informasi dan dengan demikian mengurangi ruang penyimpanan file yang dibutuhkan oleh
relasi. Permasalahan yang berkaitan dengan kelebihan informasi diilustrasikan dengan
membandingkan relasi-relasi antara mata kuliah dengan dosen yang terlihat pada gambar 1
dengan relasi-relasi MK_Dosen terlihat dalam gambar 2 Relasi mata kuliah merupakan
suatu format alternatif dari relasi-relasi MK_Dosen. Dimana diasumsikan satu mata kuliah
diajarkan oleh satu dosen sedangkan satu dosen dapat mengajar lebih dari satu mata kuliah.
Relasi-relasi tersebut mempunyai bentuk :

Mata Kuliah (Kode_MK, Nama_MK, Kode_Dosen)


Dosen (Kode_Dosen, Nama_Dosen)
MK_Dosen (Kode_MK, Nama_MK, Kode_Dosen, Nama_Dosen)
Pada relasi MK_Dosen terdapat kelebihan informasi; detail mengenai dosen diulang
setiap mata kuliah yang diajarkan. Sebaliknya, dalam relasi dosen informasi dosen muncul
hanya sekali pada setiap dosen, dan hanya kode dosen (Kode_Dosen) yang diulang dalam
relasi mata kuliah, untuk mewakili setiap mata kuliah yang diajarkan oleh dosen tersebut.

1
RELASI MATA KULIAH

Kode_MK Nama_MK Kode_Dosen

MI350 Sistem Basis Data B104


MI465 Analisis prc.Sistem B317
MI500 Rek.Perangkat B317
AKN201 Lunak D310
MKT300 Akuntansi Keuangan B212
Dasar Pemasaran
RELASI DOSEN

Kode_Dosen Nama_Dosen

B104 Indra
B317 Diandra
D310 Anggia
B212 Nesya

Gambar 1 Relasi Mata Kuliah dan Relasi Dosen

RELASI MK_DOSEN

Kode- Nama_MK Kode_Dosen Nama_Dosen


_MK

MI350 Sistem Basis Data B104 Indra


MI465 Analisis prc.Sistem B317 Diandra
MI500 Rek.Perangkat B317 Diandra
AKN201 Lunak D310 Anggia
MKT300 Akuntansi Keuangan B212 Nesya
Dasar Pemasaran

Gambar 2 Relasi MK_Dosen

Kesulitan lainnya yang cukup serius dalam menggunakan relasi yang mempunyai
kelebihan informasi adalah permasalahan anomali pengupdatean. Anomali pengupdatean
dapat diklasifikasikan menjadi anomali penyisipan, anomali penghapusan atau anomali
modifikasi.

1. Anomali Penyisipan

Terdapat dua tipe utama dari anomali penyisipan, dimana kita akan
mengilustrasikannya dengan menggunakan relasi MK_Dosen yang diperlihatkan pada
gambar 2, yakni :

a. Pada saat menyisipkan secara detail dari mata kuliah–mata kuliah baru kedalam relasi
MK_Dosen, kita harus memasukkan detail dari dosen yang mengajarkan. Contoh,
untuk memasukkan detail dari mata kuliah baru yang diajarkan dosen dengan kode
B317, kita harus memasukkan data yang benar dari dosen dengan kode B317
sehingga detail-detail dosen konsisten dengan nilai-nilai pada dosen B317 dalam
baris relasi MK_Dosen lainnya. Relasi yang terlihat dalam gambar 1 tidak terdapat
kemungkinan terjadinya ketidak konsistenan ini karena kita hanya memasukkan
kode dosen yang sesuai untuk setiap mata kuliah kedalam relasi mata kuliah.
Ditambah lagi detail-detail dari kode dosen B317 direkam hanya sekali dalam basis
data sebagai baris tunggal dalam relasi dosen tersebut.

b. Pada saat memasukkan detail dari dosen baru yang belum mengajar kedalam relasi
MK_Dosen, jika kita berusaha untuk memasukkan detail-detail dosen terdapat nilai
null dalam atribut-atribut mata kuliah, seperti Kode_MK. Karena Kode_MK
merupakan primary key dalam relasi MK_Dosen, memasukkan nilai null pada
Kode_MK melanggar integritas. Karena itu kita tidak dapat memasukkan satu baris
pada dosen baru kedalam relasi MK_Dosen. Rancangan relasi-relasi yang
diperlihatkan gambar 1 menghindari permasalahan ini karena detail-detail dosen
dimasukkan dalam relasi dosen secara terpisah dari detail-detail mata kuliah.

2. Anomali Penghapusan

Jika kita menghapus baris mata kuliah dari relasi MK_Dosen yang mewakili mata
kuliah terakhir yang diajarkan seorang dosen, informasi mengenai dosen itu juga akan
hilang dari basis data. Sebagai contoh, jika kita menghapus baris pada kode mata kuliah
MI350 (Sistem Basis Data) dari relasi MK_Dosen, informasi yang berkaitan dengan kode
dosen B104 hilang dari basis data. Rancangan relasi pada gambar 7.1. akan menghindari
terjadinya permasalahan ini, karena baris-baris dosen ditempatkan terpisah dari baris-baris
mata kuliah dan hanya atribut-atribut Kode_Dosen yang terhubung dengan dua relasi. Jika
kita menghapus suatu baris pada kode mata kuliah MI350 dari relasi mata kuliah, informasi
kode dosen B104 dalam relasi dosen tidak terpengaruh.

3. Anomali Modifikasi

Dalam relasi MK_Dosen, jika kita ingin merubah nilai dari salah satu atribut dosen
tertentu, sebagai contoh, informasi mengenai nama dosen dari kode dosen B317, kita harus
mengupdate baris-baris dari seluruh mata kuliah yang diajarkan dosen tersebut. Jika
modifikasi ini tidak diselesaikan pada seluruh baris-baris yang sesuai dari relasi MK_Dosen,
basis data menjadi tidak konsisten. Sebagai contoh, kode Dosen B317 dapat muncul dengan
nama-nama dosen yang berbeda di baris-baris mata kuliah yang berbeda.
Contoh-contoh di atas menyatakan bahwa relasi mata kuliah dan relasi dosen pada gambar
1. mempunyai properti-properti yang lebih baik daripada relasi MK_Dosen pada gambar 2

 Ketergantungan Fungsional

Salah satu dari konsep-konsep utama yang terkait dengan normalisasi adalah
ketergantungan fungsional. Ketergantungan Fungsional menjelaskan relasi diantara atribut-
atribut. Dalam bagian ini dijelaskan konsep dari ketergantungan fungsional dan dalam
bagian berikutnya menerangkan gabungan dari ketergantungan fungsional dengan proses
normalisasi dari relasi-relasi basis data.

1. Definisi dari Ketergantungan Fungsional


Ketergantungan fungsional menerangkan keterhubungan diantara atribut-atribut
dalam suatu relasi. Sebagai contoh, jika A dan B merupakan atribut dari relasi R, B secara
fungsional tergantung pada A (dilambangkan A → B), jika setiap nilai A dalam R
berhubungan tepat dengan satu nilai B dalam R.
Ketergantungan fungsional merupakan properti dari atribut-atribut yang bernilai
dalam suatu relasi yang mengindikasikan bagaimana atribut berhubungan dengan atribut
lain dan menspesifikasikan ketergantungan fungsional diantara atribut-atribut tersebut.
Jika terjadi ketergantungan fungsional, ketergantungan dispesifikasikan sebagai batasan
diantara atribut-atribut tersebut.
Perhatikan relasi atribut-atribut A dan B, dimana atribut B secara fungsional
tergantung pada atribut A. (Catatan bahwa A dan B masing-masing dapat terdiri dari satu
atau lebih atribut). Dengan kata lain, jika kita mengetahui nilai A dan kita menguji
ketergantungan relasi, kita hanya menemukan satu nilai B dalam seluruh baris nilai A yang
sama. Dengan demikian, ketika dua baris mempunyai nilai A yang sama, mereka juga
mempunyai nilai B yang sama. Tetapi nilai B yang sama mungkin mempunyai nilai A yang
berbeda. Ketergantungan antara atribut A dan B dapat diwakilkan secara diagram seperti
pada gambar 3 di bawah ini.

B tergantung secara
A B
fungsional pada A

Gambar 3 Diagram Ketergantungan fungsional

2. Determinan

Determinan dari ketergantungan fungsional menunjukkan atribut atau sekelompok


atribut pada sisi kiri anak panah. Jika terjadi ketergantungan fungsional, atribut atau
kelompok atribut pada sisi kiri panah disebut determinan. Sebagai contoh, A adalah
determinan B seperti terlihat pada gambar 3
Relasi antara nama dosen dan Kode_MK adalah 1 : M terdapat beberapa kode
matakuliah dihubungkan dengan satu dosen. Dalam hal ini, Kode_MK merupakan penentu
dari ketergantungan fungsional ini.

Kode_MK → Nama_MK
Kode_MK → Kode_Dosen
Kode_MK → Nama_Dosen
Kode_Dosen → Nama_Dosen

Format alternatif untuk menggambarkan ketergantungan fungsional diperlihatkan


di bawah ini :

Kode_MK → Nama_MK, Kode_Dosen, Nama_Dosen


Kode_Dosen → Nama_Dosen

Untuk mengidentifikasi kunci kandidat untuk relasi MK_Dosen, kita harus mengenali
atribut (atau kelompok atribut) yang secara unik mengidentifikasi setiap baris dalam relasi
ini. Jika suatu relasi memiliki lebih dari satu kunci kandidat, kita mengidentifikasi kunci
kandidat yang bertindak sebagai kunci utama untuk relasi tersebut. Seluruh atribut yang
bukan merupakan bagian dari kunci utama seharusnya secara fungsional tergantung pada
kunci kandidat tersebut.
Hanya satu kunci kandidat dari relasi MK_Dosen, dengan demikian kunci utama-nya
adalah Kode_MK, seluruh atribut-atribut lain dari relasi yang secara fungsional tergantung
pada Kode_MK.

 Proses Normalisasi

Normalisasi merupakan suatu teknik formal untuk menganalisa relasi-relasi yang


berdasarkan pada kunci utama dan ketergantungan fungsional. Teknik tersebut melibatkan
serangkaian aturan yang dapat digunakan untuk menguji relasi-relasi individu sehingga
suatu basis data dapat dinormalisasikan ke tingkat manapun. Jika suatu kebutuhan tidak
dipenuhi, relasi yang mengganggu kebutuhan tersebut harus diuraikan ke dalam relasi-
relasi yang secara individu memenuhi kebutuhan dari normalisasi tersebut.
Normalisasi sering dilaksanakan dengan beberapa langkah. Setiap langkah
berhubungan dengan bentuk normal yang khusus dimana properti-properti telah diketahui.
Dalam normalisasi, relasi-relasi secara progresif menjadi lebih dibatasi dalam format untuk
mengurangi anomali-anomali pengupdatean. Pada relasi model data, penting untuk
mengetahui bahwa hanya bentuk normal pertama ( first normal form /1NF) yang
diwajibkan sedangkan bentuk-bentuk normal berikutnya tidak diwajibkan. Tetapi juga
untuk menghindari anomali-anomali pengupdatean yang telah dibahas sebelumnya
disarankan untuk meneruskan setidaknya sampai 3NF.
Proses normalisasi seperti yang diilustrasikan dalam gambar 7.4, menampilkan
relasi-relasi antar berbagai bentuk normal. Gambar tersebut menampilkan beberapa relasi-
relasi 1NF juga berhubungan dengan 2NF dan relasi-relasi 2NF juga berhubungan dengan
3NF, dan seterusnya. Dalam tulisan ini hanya dibahas sampai dengan bentuk normal ketiga.
Selanjutnya kita menampilkan proses dari normalisasi tersebut dengan pertama-
tama mentransfer data yang disimpan sebagai suatu bentuk dalam format tabel dengan
baris dan kolom. Kemudian kita melanjutkan untuk menormalisasikan tabel data ini.

1NF

2NF

3NF
1NF 1NF
BCNF
2NF 2NF
3NF 4NF 3NF
BCNF BCNF
5NF 4NF
4NF
5NF 5NF
Higher normal
forms

Gambar 4. Ilustrasi diagramatik dari relasi-relasi antar normal form

1. First Normal Form /1NF (Bentuk Normal Pertama)


Sebelum membahas Bentuk Normal Pertama, pertama-tama kita memberikan
definisi dari pernyataan sebelum Bentuk Normal Pertama yakni :

a. Unnormalized form / UNF (Bentuk yang tidak ternormalisasi)


Suatu tabel yang berisi satu atau lebih pengulangan grup-grup.

b. Bentuk Normal Pertama


Suatu relasi dikatakan sudah memenuhi Bentuk Normal Pertama bila setiap data
bersifat atomik yaitu setiap irisan baris dan kolom hanya mempunyai satu nilai
data.

Pada bagian ini, proses normalisasi dimulai dengan mentransfer data dari
sumbernya kedalam format tabel dengan kolom-kolom dan baris-baris. Dalam format ini,
tabel tersebut masih dalam bentuk yang tidak ternormalisasi. Untuk merubah tabel yang
tidak ternormalisasi tersebut ke Bentuk Normal Pertama, kita mendefinisikan dan
menghapus pengulangan grup-grup di dalam tabel tersebut. Pengulangan grup merupakan
suatu atribut atau grup dari atribut di dalam suatu tabel yang terjadi dengan nilai berganda
dari atribut-atribut yang dinominasikan sebagai kunci pada tabel tersebut. Yang perlu
diperhatikan dalam konteks ini, istilah kunci menunjukkan atribut yang secara unik
mengidentifikasi setiap baris dalam tabel yang tidak ternormalisasi.
Untuk merubah bentuk yang tidak ternormalisasi menjadi bentuk pertama kita
harus menghapus pengulangan grup dengan memasukkan data yang sesuai dalam kolom-
kolom kosong dari baris-baris yang berisi pengulangan data tersebut. Dengan kata lain, kita
mengisi kolom yang kosong dengan menduplikasi data. Hasil tabel tersebut, menunjukkan
suatu relasi, berisi nilai-nilai atomik (tunggal) dalam irisan dari setiap baris dan kolom dan
karena itu tabel ini masuk dalam Bentuk Normal Pertama. Dengan pendekatan ini,
redudansi diperkenalkan ke dalam hasil relasi, yang kemudian dihapus selama proses
normalisasi berikutnya.
Untuk menjelaskan tahapan normalisasi kita menggunakan relasi mahasiswa-1
dimana seorang mahasiswa dapat mengambil beberapa mata kuliah, satu mata kuliah dapat
diambil oleh lebih dari satu mahasiswa, satu mata kuliah hanya diajarkan oleh satu dosen,
satu dosen dapat mengajar beberapa mata kuliah dan seorang mahasiswa pada mata kuliah
tertentu hanya mempunyai satu nilai. Untuk melihat hubungan antar atribut dapat kita lihat
diagram ketergantungan fungsional pada gambar 5

No_M Nama_M Jurusa Kode- Nama_MK Kode_Dose Nama_Dos Nilai


hs hs n _MK n en

2683 Dio MI MI350 Sistem Basis Data B104 Indra A


MI465 Analisis B317 Diandra B
MI500 prc.Sistem B317 Diandra A
5432 Kevin Ak. MI350 Rek. Perangkat B104 Indra C
AKN201 Lunak D310 Anggia B
MKT300 Manajmen DB B212 Nesya A
Akuntansi
Keuangan
Dasar Pemasaran

Gambar 5 Relasi Mahasiswa-1 (Bentuk Tidak Normal)


No_M Nama_M Jurusa Kode- Nama_MK Kode_Dosen Nama_D Nilai
hs hs n _MK osen

2683 Dio MI MI350 Sistem Basis Data B104 Indra A


2683 Dio MI MI465 Analisis B317 Diandra B
2683 Dio MI MI500 prc.Sistem B317 Diandra A
5432 Kevin Ak. MI350 Rek. Perangkat B104 Indra C
5432 Kevin Ak. AKN201 Lunak D310 Anggia B
5432 Kevin Ak. MKT300 Manajmen DB B212 Nesya A
Akuntansi
Keuangan
Dasar Pemasaran

Gambar 6. Relasi Mahasiswa-2 (Bentuk Normal Pertama)

2. Second Normal Form/2NF (Bentuk Normal Kedua)

Bentuk Normal Kedua berdasarkan pada konsep dari ketergantungan fungsional


penuh dapat kita jabarkan sebagai berikut :

a. Fully Functional Dependency (Ketergantungan Fungsional Penuh)

Atribut B pada relasi R dikatakan tergantung fungsional penuh pada atribut A pada
relasi R, jika B tidak tergantung pada subset dari A ( bila A adalah kunci gabungan).

Contoh ketergantungan fungsional penuh dapat dilihat pada gambar 7. Pada


gambar 7., No_Mhs dan Kode_MK merupakan kunci komposit pada relasi
mahasiswa-2, dari atribut-atribut yang ada pada relasi mahasiswa-2 hanya atribut
nilai yang tergantung fungsional penuh. Atribut nilai tergantung fungsional penuh
pada No_Mhs dan Kode_MK karena nilai tidak tergantung pada subset dari kunci
komposit. Sedangkan Nama_Mhs dan jurusan tergantung fungsional sebagian,
karena keduanya tergantung pada No_Mhs. Begitu pula atribut Nama_MK,
Kode_Dosen dan Nama_Dosen tergantung juga pada Kode_MK.

b. Definisi dari Bentuk Normal Kedua

Bentuk Normal Kedua berlaku pada relasi-relasi dengan kunci komposit yaitu relasi
dengan kunci utama yang terdiri dari dua atau lebih atribut-atribut. Suatu relasi
dengan atribut kunci utama tunggal secara otomatis berada dalam Bentuk Normal
Kedua.

Suatu relasi dikatakan sudah memenuhi Bentuk Normal Kedua bila relasi tersebut
sudah memenuhi Bentuk Normal Kesatu, dan atribut yang bukan kunci utama sudah
tergantung penuh terhadap kunci utamanya.

Relasi mahasiswa-2 belum memenuhi Bentuk Normal Kedua oleh karena itu tabel
perlu direvisi. Atribut-atribut yang tidak tergantung penuh perlu dipisah dengan
atribut-atribut yang tergantung penuh terhadap kunci utama-nya sehingga tabel
mahasiswa-2 dipisah menjadi dua tabel yaitu relasi kuliah dan relasi mahasiswa-3.
Relasi kuliah dan relasi mahasiswa-3 sudah memenuhi Bentuk Normal Kedua
karena semua atribut yang ada didalamnya sudah tergantung penuh terhadap kunci
utamanya.

4. Third Normal Form /3NF (Bentuk Normal Ketiga)


Meskipun relasi-relasi Bentuk Normal Kedua mengurangi redundansi dari relasi
yang ada dalam Bentuk Normal Pertama, tetapi masih terdapat anomali-anomali. Sebagai
contoh bila kita ingin menghapus satu mata kuliah misalkan sistem basis data. Apabila
hanya 1 orang yang mengajar sistem basis data, informasi dosen yang bernama Indra akan
terhapus juga. Begitu pula bila kita ingin mengupdate nama dosen, harus mengupdate
beberapa kali. Pengupdatean anomali ini disebabkan oleh transitive dependency
(ketergantungan transitif). Kita perlu meneruskan sampai ke Bentuk Normal Ketiga.

Nama_Mhs

No_Mhs
Jurusan

Nilai
Nama_MK

Kode_Dosen
Kode_MK
Nama_Dosen

Gambar 7. Diagram Ketergantungan Fungsional

Kode- Nama_MK Kode_Dosen Nama_Dosen


_MK

MI350 Sistem Basis Data B104 Indra


MI465 Analisis B317 Diandra
MI500 prc.Sistem B317 Diandra
AKN201 Rek. Perangkat D310 Anggia
MKT300 Lunak B212 Nesya
Akuntansi
Keuangan
Dasar Pemasaran

Gambar 8. Relasi Kuliah (2NF)


No_Mhs Nama_Mhs Jurusan

2683 Dio MI
5432 Kevin Ak.

Gambar 9. Relasi mahasiswa-3 (3 NF)

a. Transitive Dependency (Ketergantungan Transitif)

Atribut C pada relasi R dikatakan tergantung transitif pada atribut A, jika atribut B
tergantung pada atribut A pada relasi R dan atribut C tergantung pada atribut B pada relasi
R ( A → B, B → C, maka A → C ).

Ketergantungan transitif merupakan suatu deskripsi suatu tipe dari ketergantungan


fungsional yang terjadi ketika ketergantungan-ketergantungan fungsional yang ada diantara
atribut A, B, dan C dari suatu relasi diuraikan seperti berikut ini :
A → B dan B → C

Kemudian ketergantungan transitif A → C tersebut terjadi via atribut B.

Sebagai contoh, perhatikan ketergantungan fungsional berikut dalam relasi tabel kuliah
berikut ini :
Kode_MK → Kode_Dosen dan Kode_Dosen → Nama_Dosen
Nama_Dosen tergantung fungsional pada Kode_Dosen dan Kode_Dosen tergantung
fungsional pada Kode_MK sehingga dapat dikatakan bahwa Nama_Dosen tergantung
transitif pada Kode_MK.

b. Definisi dari Bentuk Normal Ketiga

Suatu relasi dikatakan sudah memenuhi Bentuk Normal Ketiga bila relasi tersebut
sudah memenuhi bentuk Normal Kedua dan atribut yang bukan kunci utama tidak
tergantung transitif terhadap kunci utamanya.
Normalisasi dari relasi Bentuk Normal Kedua ke Bentuk Normal Ketiga melibatkan
penghapusan ketergantungan transitif. Atribut-atribut yang mempunyai ketergantungan
transitif dihapus dari relasi dan ditempatkan pada relasi baru. Relasi kuliah (gambar 8.)
belum memenuhi Bentuk Normal Ketiga karena ada ketergantungan transitif (Kode_MK →
Kode_Dosen, Kode_Dosen → Nama_Dosen ) sehingga relasi kuliah harus dipecah menjadi
dua relasi yaitu relasi mata kuliah dan relasi dosen. Relasi mata kuliah dan relasi dosen
sudah memenuhi Bentuk Normal Ketiga karena atribut-atribut sudah tidak tergantung
transitif terhadap kunci utama-nya. Relasi mahasiswa-3 dan relasi nilai sudah memenuhi
Bentuk Normal Ketiga juga karena tidak tergantung transitif terhadap kunci utama-nya.

No_Mhs Kode_MK Nilai


2683 MI350 A
2683 MI465 B
2683 MI500 A
5432 MI350 C
5432 AKN201 B
5432 MKT300 A

Gambar 10. Relasi nilai (Bentuk Normal Ketiga)

Kode_MK Nama_MK Kode_Dosen

MI350 Sistem Basis Data B104


MI465 Analisis prc.Sistem B317
MI500 Rek. Perangkat Lunak B317
AKN201 Akuntansi Keuangan D310
MKT300 Dasar Pemasaran B212

Gambar 11. Relasi mata kuliah (Bentuk Normal Ketiga)

Kode_Dosen Nama_Dosen

B104 Indra
B317 Diandra
D310 Anggia
B212 Nesya

Gambar 12. Relasi dosen (Bentuk Normal Ketiga)

Anda mungkin juga menyukai