Normalisasi Database


Errors using inadequate data are much less than using no data at all.
- Charles Babbage




Alfa Nugraha Pradana

Prodi Statistika dan Sains Data IPB University

Outline


  • Studi Kasus

  • Normalisasi

    • Dependensi Fungsional
    • 1NF, 2NF, 3NF

Studi Kasus


Data pasien pada Rumah Sakit XYZ:



  • Kasus 1: Tambahkan satu internis di poli Anak. Insertion anomalies
  • Kasus 2: Hapus satu kamar R102. Deletion anomalies
  • Kasus 3: Ubah poli Kandungan menjadi Obgyn. Modification anomalies

Normalisasi

Dependensi (Ketergantungan) Fungsional

Batasan antara dua gugus atribut pada database yang keberadaannya saling bergantung satu sama lain.


Jika diketahui suatu database tunggal dinotasikan dengan skema relasi \(R = \{A_1, A_2, ..., A_n\}\) kemudian hubungan dua gugus atribut \(X\) dan \(Y\) dituliskan \(X \rightarrow Y\) sebagai subset dari \(R\) dengan bentuk relasi \(r(R)\). Batasan yang ditemui pada record/tuple pada \(r\) terjadi dimana \(t_1[X] = t_2[X]\) memiliki suatu relasi yang seharusnya juga ada pada \(t_1[Y] = t_2[Y]\).


Dependensi fungsional pada tabel hospital:

  • sip \(\rightarrow\) {internis, poli}
  • no_pasien \(\rightarrow\) {pasien}
  • {pasien, kamar, poli} \(\rightarrow\) no_pasien

Riwayat


Normalisasi database diperkenalkan oleh Codd (1972) dimana serangkaian pengujian dilakukan pada skema diagram untuk menjamin suatu basis data memenuhi bentuk normalnya (normal form/NF).

Prosesnya sendiri dilakukan dengan cara mengelompokkan atribut data yang membentuk entitas sederhana, tidak berulang, fleksibel, dan mudah beradaptasi sehingga database yang dibuat memiliki kualitas yang baik.


Codd mengajukan tiga bentuk yang dikenal dengan 1NF, 2NF, dan yang paling kuat yaitu 3NF atau dikenal dengan sebutan Boyce-Codd Normal Form (BCNF).

First Normal Form (1NF)

Suatu tabel dikatakan 1NF jika dan hanya jika setiap atribut dari data tersebut hanya memiliki nilai tunggal dalam satu baris



1NF tidak memperkenankan adanya duplikasi data, data dengan nilai yang bervariasi, data yang berkelompok, maupun data yang memiliki relasi di dalam relasi.

Second Normal Form (2NF)

Syarat 2NF adalah tidak diperkenankan adanya dependensi fungsional secara parsial terhadap PK dalam sebuah tabel


Tabel dokter

Tabel pasien


Pada kasus tersebut sip (Surat Izin Praktik) hanya bergantung pada internis dan poli tidak pada atribut lain. Hal sama pada pasien, kamar, kelas yang bergantung pada atribut kunci no_pasien.

Third Normal Form (3NF)

Pada 3NF tidak diperkenankan adanya dependensi fungsional transitif dalam sebuah tabel


Tabel dokter

Tabel pasien

Tabel kamar


Sebelumnya, pada tabel pasien atribut kelas tidak bergantung langsung pada PK no_pasien melainkan pada atribut kamar sehingga pada 3NF, atribut tersebut dipisah menjadi suatu tabel baru yaitu tabel kamar.

Fourth Normal Form (4NF)


Tabel pasien

Tabel tindakan


Tabel dokter

Tabel kamar_untuk_pasien

Tabel kamar

ElephantSQL


DB <- dbConnect(
  driver,
  dbname="", # User & Default database
  host="topsy.db.elephantsql.com", # Server
  # port=5433,
  user="", # User & Default database
  password="" # Password
)


Proses input data dapat dilakukan dengan dua cara, pertama:

tbl_pasien <- dbReadTable(DB, 'pasien')
dbWriteTable(DB, 'pasien', tbl_pasien,
             overwrite=T, row.names=F)


dan kedua:

shinyapps.io


Questions?