MODUL PERTEMUAN 10
DATA QUALITY, INTEGRITY, DAN GOVERNANCE
A. INFORMASI UMUM MATA KULIAH
| Item | Keterangan |
|---|---|
| Mata Kuliah | Data Modelling |
| Kode MK | SSD1019 |
| Bobot | 3 SKS (Praktikum) |
| Semester | 4 (Empat) |
| Program Studi | Sains Data |
| Fakultas | Ekonomi dan Bisnis Islam |
| Universitas | UIN K.H. Abdurrahman Wahid Pekalongan |
| Dosen Pengampu | Mohammad Reza Maulana, M.Kom |
B. INFORMASI PERTEMUAN
B.1 Sub-CPMK Pertemuan 10
Sub-CPMK 6.1: Mahasiswa mampu menerapkan prinsip-prinsip kualitas data, integritas data, dan tata kelola data dalam perancangan dan implementasi model data, termasuk menyusun data dictionary yang komprehensif sebagai dokumentasi resmi sistem database.
B.2 Tujuan Pembelajaran (Learning Objectives)
Setelah mengikuti pertemuan ini, mahasiswa akan mampu:
- Menjelaskan enam dimensi kualitas data (accuracy, completeness, consistency, timeliness, validity, uniqueness) dan mengidentifikasi pelanggaran setiap dimensi dari contoh data nyata (C2 β Memahami)
- Membedakan empat jenis integritas data (entity, referential, domain, user-defined) dan mekanisme penegakannya di level database, aplikasi, dan proses bisnis (C2 β Memahami)
- Menganalisis dataset yang diberikan untuk mengidentifikasi masalah kualitas data beserta akar penyebab dan dampaknya (C4 β Menganalisis)
- Menyusun data dictionary yang lengkap dan profesional untuk skema database yang diberikan (C3 β Mengaplikasikan)
- Menjelaskan konsep dasar data governance β termasuk data ownership, stewardship, kebijakan akses, dan ketentuan hukum yang relevan di Indonesia (C2 β Memahami)
- Mengevaluasi dampak kualitas data terhadap proses analisis dan pemodelan dalam konteks sains data (C5 β Mengevaluasi)
B.3 Kompetensi yang Dikembangkan
| Domain | Kompetensi |
|---|---|
| Kognitif | Memahami dimensi kualitas data (C2), Menganalisis masalah DQ dari dataset nyata (C4), Mengevaluasi dampak ke sains data (C5) |
| Afektif | Mengembangkan kepedulian terhadap kualitas data sebagai tanggung jawab profesional; menghargai dokumentasi sebagai investasi jangka panjang |
| Psikomotorik | Menyusun data dictionary yang komprehensif; mengidentifikasi dan mengklasifikasikan masalah kualitas data dari dataset nyata |
B.4 Indikator Pencapaian
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:
- Menyebutkan dan menjelaskan 6 dimensi kualitas data dengan contoh konkret masing-masing
- Mengidentifikasi minimal 5 masalah kualitas data berbeda dari dataset sampel yang diberikan
- Membedakan antara teknik penegakan integritas di level DB (constraint) vs level aplikasi vs level proses bisnis
- Menyusun data dictionary untuk minimal 3 tabel dalam format standar yang telah ditetapkan
- Menjelaskan peran data governance dalam mencegah masalah kualitas data secara sistemik
B.5 Alokasi Waktu
| No | Kegiatan | Durasi | Keterangan |
|---|---|---|---|
| 1 | Pembukaan & Review Tugas Pertemuan 9 | 10 menit | Pembahasan singkat DDL proyek kelompok |
| 2 | Aktivitas Pemantik: "Database Sudah Jadi β Apakah Aman?" | 10 menit | Analisis dataset bermasalah |
| 3 | Materi 1: Dimensi Kualitas Data | 25 menit | Ceramah + analisis kasus per dimensi |
| 4 | Materi 2: Empat Jenis Integritas Data & Mekanisme Penegakan | 20 menit | Ceramah + latihan identifikasi |
| 5 | Break | 10 menit | β |
| 6 | Materi 3: Metadata dan Data Dictionary | 25 menit | Ceramah + praktikum menyusun DD |
| 7 | Materi 4: Data Governance β Tata Kelola Data | 15 menit | Ceramah + diskusi |
| 8 | Materi 5: Dampak Kualitas Data terhadap Sains Data | 15 menit | Studi kasus + diskusi kelompok |
| 9 | Review, Kuis Penutup & Briefing Tugas | 15 menit | Kuis + penjelasan tugas data dictionary |
| Total | 145 menit | (+ 10 menit buffer) |
C. MATERI PEMBELAJARAN
C.1 Aktivitas Pemantik β "Database Sudah Jadi, Apakah Datanya Aman?"
Instruksi (10 menit): Di pertemuan 9 kita berhasil membuat DDL script dan database sudah berjalan. Tapi apakah itu berarti data di dalamnya sudah terjamin kualitasnya? Perhatikan cuplikan data di bawah ini yang diambil dari database e-commerce yang sudah berjalan selama 6 bulan.
Cuplikan Data Tabel pelanggan (setelah 6 bulan operasional):
βββββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββ
β id_pelangganβ nama β email β no_telp β tgl_lahir β
βββββββββββββββΌβββββββββββββββββββββββΌββββββββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββββ€
β 1 β Budi Santoso β budi@gmail.com β 081234567890 β 1995-03-15 β
β 2 β SITI RAHAYU β sitirahayugmail.com β 0812-3456-78 β 1998-11-20 β β masalah?
β 3 β Ahmad β ahmad@yahoo.com β +62812345678 β 1990-07-08 β β masalah?
β 4 β Dewi Lestari β dewi@gmail.com β NULL β 2025-06-15 β β masalah?
β 5 β test β test@test.com β 08000000000 β NULL β β masalah?
β 6 β Budi Santoso β budi2@gmail.com β 081234567890 β 1995-03-15 β β masalah?
β 7 β Rizki Pratama β rizki@gmail.com β 08987654321 β 1988-04-22 β
β 8 β aaa β aaa@aaa.com β 12345 β NULL β β masalah?
β 9 β Indah Permatasari β indah@gmail.com β 087812345678 β 2010-09-01 β β masalah?
β 10 β Joko Widodo β jokowi@pemerintah.go.id β 081100000001 β 1961-06-21 β
βββββββββββββββ΄βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββPertanyaan Pemantik (diskusi 5 menit):
- Identifikasi sebanyak mungkin masalah data yang kamu temukan dalam tabel ini!
- Apakah constraint DDL yang kita buat di pertemuan 9 cukup mencegah semua masalah ini?
- Masalah mana yang paling berbahaya jika data ini digunakan untuk analisis?
- Siapa yang seharusnya bertanggung jawab atas kualitas data ini β developer, DBA, atau siapa?
Rangkuman Dosen: "Constraint di DDL adalah lapisan pertama pertahanan, tapi bukan satu-satunya. Database yang secara teknis 'valid' bisa tetap berisi data yang secara bisnis 'sampah'. Itulah mengapa kita perlu memahami data quality secara holistik β bukan hanya dari sudut pandang teknis, tapi juga dari sudut pandang bisnis dan tata kelola organisasi."
C.2 Materi 1: Dimensi Kualitas Data
Kualitas data bukan konsep tunggal β ia memiliki enam dimensi yang masing-masing mengukur aspek berbeda dari "kebenaran" sebuah data. Sebuah dataset bisa sempurna dalam satu dimensi namun gagal total di dimensi lain.
C.2.1 Enam Dimensi Kualitas Data
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 6 DIMENSI KUALITAS DATA β
β (Data Quality Framework β DAMA/ISO 8000) β
ββββββββββββββββββββ¬βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ€
β Dimensi β Definisi β Contoh Pelanggaran β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 1. ACCURACY β Data benar-benar β tgl_lahir = 2025-06-15 β
β (Akurasi) β merepresentasikan realitas β (tanggal di masa depan) β
β β β nilai sesuai kenyataan β nama = "Joko Santoso" β
β β β tapi orangnya "Ahmad" β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 2. COMPLETENESS β Semua data yang diperlukan β no_telp = NULL padahal β
β (Kelengkapan) β ada dan tidak ada nilai β wajib diisi untuk notif β
β β yang hilang β Nama hanya "Ahmad" tanpa β
β β β nama belakang β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 3. CONSISTENCY β Data yang sama dinyatakan β Format no_telp campur: β
β (Konsistensi) β dengan cara yang sama di β "081234", "+62812", "812" β
β β seluruh sistem β Nama ada yang Title Case, β
β β β ada yang UPPERCASE β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 4. TIMELINESS β Data tersedia tepat waktu β Data pelanggan diperbarui β
β (Ketepatan β dan mencerminkan kondisi β setahun sekali β alamat β
β Waktu) β terkini yang dibutuhkan β sudah tidak relevan β
β β β Harga produk tidak β
β β β diperbarui saat promo β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 5. VALIDITY β Data sesuai format, tipe, β Email tanpa "@" β
β (Validitas) β dan range yang telah β No KTP hanya 10 digit β
β β ditetapkan β Rating = 7 (seharusnya β
β β β 1β5 saja) β
β β β Nama = "test", "aaa" β
ββββββββββββββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββ€
β 6. UNIQUENESS β Tidak ada data yang β Pelanggan terdaftar dua β
β (Keunikan) β terduplikasi secara tidak β kali dengan email berbeda β
β β semestinya β Transaksi muncul dua kali β
β β β karena double processing β
ββββββββββββββββββββ΄βββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββC.2.2 Dimensi Kualitas Data β Pendalaman dengan Contoh Nyata
1. ACCURACY (Akurasi)
Accuracy adalah dimensi yang paling sulit divalidasi secara teknis karena membutuhkan verifikasi terhadap "dunia nyata" β sesuatu yang tidak bisa dilakukan DBMS secara otomatis.
MASALAH ACCURACY YANG UMUM:
β Data diinput dengan salah (typo, salah baca formulir)
β Data sudah benar saat diinput tapi realitasnya berubah:
- Alamat pelanggan (pindah rumah)
- Status pernikahan (berubah)
- Jabatan karyawan (promosi/mutasi)
β Data yang masuk akal tapi salah:
- Gaji = 50.000 (harusnya 5.000.000)
- Umur = 200 (harusnya 20)
CARA MENDETEKSI:
β Range check: CHECK (tgl_lahir < CURRENT_DATE)
β Cross-validation dengan sumber lain (verifikasi KTP, dll.)
β Statistical outlier detection di level aplikasi atau pipeline ETL
β Audit berkala terhadap sampel data
CARA MENCEGAH:
β Validasi input di level aplikasi (bukan hanya DB)
β Double-entry verification untuk data kritis
β Audit trail: siapa mengubah apa, kapan
β Proses update data berkala (data refresh)2. COMPLETENESS (Kelengkapan)
PERBEDAAN PENTING: NULL yang "Sah" vs NULL yang "Masalah"
NULL yang SAH:
tgl_kembali DATE NULL β NULL berarti "belum dikembalikan" (semantik bisnis)
tgl_menikah DATE NULL β NULL berarti "belum menikah"
no_fax VARCHAR NULL β Tidak semua orang/perusahaan punya fax
NULL yang BERMASALAH:
nama VARCHAR NOT NULL β tapi data lama ada yang "" (string kosong)
email VARCHAR NOT NULL β ada yang "N/A" atau "tidak punya"
β String kosong lolos NOT NULL constraint!
COMPLETENESS BUKAN HANYA SOAL NULL:
β String kosong ("") β NULL β keduanya berbeda, keduanya bisa bermasalah
β Kolom ada isinya tapi isinya tidak bermakna:
nama = "-", "xxx", "tidak diketahui"
β Kolom wajib dalam konteks bisnis tapi tidak di-constraint di DB:
Misal: untuk pengiriman, alamat lengkap wajib ada
CARA MENGUKUR COMPLETENESS:
SELECT
COUNT(*) AS total_baris,
SUM(CASE WHEN nama IS NULL OR nama = '' THEN 1 ELSE 0 END) AS nama_kosong,
SUM(CASE WHEN email IS NULL OR email = '' THEN 1 ELSE 0 END) AS email_kosong,
ROUND(100.0 * SUM(CASE WHEN email IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2)
AS pct_email_null
FROM pelanggan;3. CONSISTENCY (Konsistensi)
DUA JENIS KONSISTENSI:
A. Konsistensi Intra-Tabel (dalam satu tabel):
β Format yang tidak seragam dalam kolom yang sama
CONTOH: Kolom no_telp dengan berbagai format:
+ββββββββββββββββββββββββββββββ
β 081234567890 β
β 0812-3456-7890 β β berbeda format
β +62 812 3456 7890 β β berbeda format
β 62812345678 β β tidak ada leading 0
β (021) 555-1234 β β nomor tetap, bukan HP
βββββββββββββββββββββββββββββββ
Saat mau filter pelanggan dengan prefix "0812":
WHERE no_telp LIKE '0812%'
β Hanya menemukan format pertama dan kedua! Baris 3, 4, 5 terlewat.
B. Konsistensi Inter-Tabel (antar tabel atau antar sistem):
β Data yang sama dinyatakan berbeda di tempat berbeda
CONTOH:
Tabel KARYAWAN: jabatan = "Manajer Keuangan"
Tabel PAYROLL : jabatan = "Finance Manager"
β Apakah ini orang/jabatan yang sama? Tidak bisa dipastikan!
Solusi: Gunakan tabel referensi (master data) untuk jabatan,
simpan jabatan_id FK ke tabel JABATAN β konsisten!
CARA MENEGAKKAN KONSISTENSI FORMAT:
β Gunakan ENUM untuk nilai terbatas (status, jenis, kategori)
β Normalisasi format di level aplikasi sebelum INSERT
(UPPER(), LOWER(), TRIM(), regex replacement)
β Gunakan tabel referensi (master data) untuk data terstandar
β CHECK constraint dengan REGEXP (terbatas)4. TIMELINESS (Ketepatan Waktu)
DATA YANG "BENAR" KEMARIN BISA "SALAH" HARI INI:
Contoh nyata:
Sistem CRM menyimpan alamat pelanggan saat pertama mendaftar.
Tiga tahun kemudian, 40% pelanggan sudah pindah alamat.
Tim marketing mengirim brosur β 40% tidak sampai.
Dimensi timeliness mencakup:
β CURRENCY: Seberapa baru data terakhir diperbarui?
β LATENCY : Berapa lama jeda antara kejadian di dunia nyata
dengan data tersimpan di database?
β FRESHNESS: Apakah data cukup segar untuk use case saat ini?
SOLUSI UMUM:
β Audit columns: created_at, updated_at di setiap tabel
β Proses validasi data berkala (periodic data cleansing)
β Konfirmasi data saat ada interaksi: "Apakah alamat Anda masih sama?"
β SLA untuk refresh data: "Data diperbarui setiap 24 jam"
β Data expiry policy: Tandai data yang sudah terlalu lama tidak diperbarui5. VALIDITY (Validitas)
VALIDITY: DATA HARUS SESUAI ATURAN YANG DITETAPKAN
Level-level validasi:
Level 1 β FORMAT:
Email harus mengandung "@" dan "."
Nomor KTP harus 16 digit
Kode pos Indonesia harus 5 digit angka
Level 2 β RANGE / DOMAIN:
Usia harus antara 0 dan 150
Rating antara 1 dan 5
Persentase antara 0 dan 100
Tanggal lahir harus di masa lalu
Level 3 β REFERENTIAL:
id_kategori di tabel PRODUK harus ada di tabel KATEGORI
(ini yang dijaga FK constraint)
Level 4 β BUSINESS RULE:
Tanggal selesai proyek harus setelah tanggal mulai
Pelanggan di bawah 18 tahun tidak boleh beli produk tertentu
Stok tidak boleh negatif
CARA MENEGAKKAN VALIDITY:
β Level DB : CHECK constraint, FK constraint, ENUM, NOT NULL
β Level App : Validasi di form/API sebelum data masuk ke DB
β Level ETL : Data profiling dan cleaning saat ingestion
β Level Audit: Monitoring otomatis dan alerting6. UNIQUENESS (Keunikan)
MASALAH DUPLIKASI DATA β LEBIH UMUM DARI YANG DIKIRA
Penyebab duplikasi:
β Double-submit form (user klik tombol dua kali)
β Retry mekanisme di sistem yang gagal di tengah jalan
β Multiple entry points: web + mobile + admin panel
β Migrasi data dari sistem lama
β Integrasi data dari beberapa sumber
JENIS DUPLIKASI:
1. Exact duplicate : Semua kolom identik (paling mudah dideteksi)
2. Near-duplicate : Beda tipis: "Budi Santoso" vs "Budi Santoso "
(ada spasi di akhir) β sama tapi tidak exact match
3. Logical duplicate: email berbeda tapi orangnya sama
budi@gmail.com vs budi.santoso@gmail.com
CARA MENDETEKSI DUPLIKASI:
-- Mencari baris dengan kombinasi nilai yang duplikat
SELECT nama, email, tgl_lahir, COUNT(*) AS jumlah
FROM pelanggan
GROUP BY nama, email, tgl_lahir
HAVING COUNT(*) > 1;
CARA MENCEGAH:
β UNIQUE constraint pada kolom atau kombinasi kolom yang harus unik
β Idempotency key di API: setiap request punya ID unik,
request yang sama tidak diproses dua kali
β Deduplication check sebelum INSERT
β Master Data Management (MDM) untuk data shared antar sistemC.2.3 Interaksi Antar Dimensi
Keenam dimensi tidak berdiri sendiri β mereka saling berkaitan dan seringkali masalah di satu dimensi menyebabkan masalah di dimensi lain.
CONTOH RANTAI MASALAH:
Masalah CONSISTENCY (format no_telp berbeda-beda)
β
Menyebabkan masalah UNIQUENESS (tidak bisa deteksi duplikasi)
β
Menyebabkan masalah ACCURACY (laporan jumlah pelanggan unik salah)
β
Menyebabkan keputusan bisnis yang keliru
CONTOH LAIN:
Masalah TIMELINESS (data alamat tidak diperbarui)
β
Menyebabkan masalah ACCURACY (alamat sudah tidak benar)
β
Menyebabkan masalah COMPLETENESS dari sudut pandang bisnis
(data "ada" tapi tidak berguna untuk pengiriman)C.3 Materi 2: Empat Jenis Integritas Data dan Mekanisme Penegakannya
Integritas data adalah properti yang memastikan data akurat, konsisten, dan dapat dipercaya sepanjang siklus hidupnya. Ada empat jenis integritas yang harus dijaga bersama.
C.3.1 Empat Jenis Integritas Data
1. ENTITY INTEGRITY (Integritas Entitas)
βββββββββββββββββββββββββββββββββββββββ
Aturan: Setiap baris dalam tabel harus dapat diidentifikasi secara unik.
Primary Key TIDAK BOLEH NULL dan harus UNIK.
Mekanisme: PRIMARY KEY constraint (otomatis NOT NULL + UNIQUE)
Contoh pelanggaran:
β Dua baris dengan id_produk yang sama
β id_produk = NULL
Penegakan: DBMS secara otomatis menolak INSERT/UPDATE yang melanggar PK.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
2. REFERENTIAL INTEGRITY (Integritas Referensial)
ββββββββββββββββββββββββββββββββββββββββββββββββ
Aturan: Nilai FK harus merujuk ke PK yang benar-benar ADA di tabel induk.
Tidak boleh ada "orphan record" β baris anak yang merujuk
ke induk yang sudah tidak ada.
Mekanisme: FOREIGN KEY constraint dengan ON DELETE / ON UPDATE action
Contoh pelanggaran:
β PESANAN.id_pelanggan = 999, tapi id_pelanggan = 999
tidak ada di tabel PELANGGAN (orphan record)
β Hapus PELANGGAN yang masih punya PESANAN aktif
DAMPAK ORPHAN RECORD:
SELECT pesanan.*, pelanggan.nama
FROM pesanan
LEFT JOIN pelanggan ON pesanan.id_pelanggan = pelanggan.id_pelanggan;
β Baris dengan id_pelanggan = 999 akan menghasilkan NULL
di semua kolom pelanggan β laporan penjualan kacau!
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3. DOMAIN INTEGRITY (Integritas Domain)
ββββββββββββββββββββββββββββββββββββββ
Aturan: Nilai kolom harus berada dalam domain (rentang/himpunan) yang
telah ditentukan β tipe data, format, range, dan daftar nilai valid.
Mekanisme: Data type, CHECK constraint, ENUM, NOT NULL, DEFAULT
Contoh pelanggaran:
β rating = 7 (padahal harus 1-5) β CHECK gagal
β email tanpa "@" β lolos NOT NULL tapi tidak valid bisnis
β harga = -50000 β CHECK (harga >= 0) gagal
LAPISAN DOMAIN INTEGRITY:
Layer 1 - DBMS : Tipe data, CHECK, ENUM, NOT NULL
Layer 2 - Aplikasi : Validasi form, regex, API validation
Layer 3 - ETL : Data profiling, cleansing sebelum load
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
4. USER-DEFINED INTEGRITY (Integritas Business Rule)
βββββββββββββββββββββββββββββββββββββββββββββββββββ
Aturan: Aturan bisnis spesifik yang tidak bisa di-encode sepenuhnya
dengan constraint standar β membutuhkan logika tambahan.
Mekanisme: Trigger, stored procedure, application logic
Contoh business rule yang rumit:
β "Seorang karyawan tidak boleh mengajukan cuti lebih dari 12 hari
dalam satu tahun kalender" β butuh hitung SUM dari tabel CUTI
β "Stok tidak boleh dipesan melebihi stok yang tersedia"
β butuh cek stok real-time saat ORDER dibuat
β "Diskon 15% hanya berlaku untuk member yang bergabung lebih dari 1 tahun"
β butuh hitung selisih tanggal bergabung
IMPLEMENTASI VIA TRIGGER (contoh cek stok):
DELIMITER $$
CREATE TRIGGER before_insert_order_item
BEFORE INSERT ON item_pesanan
FOR EACH ROW
BEGIN
DECLARE stok_tersedia INT;
SELECT stok INTO stok_tersedia
FROM produk WHERE id_produk = NEW.id_produk;
IF NEW.qty > stok_tersedia THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Stok tidak mencukupi!';
END IF;
END$$
DELIMITER ;C.3.2 Di Mana Menegakkan Integritas? Tiga Lapisan Pertahanan
DATABASE LAYER (Lapisan 1 β Paling kuat):
Penegak: MySQL/PostgreSQL engine
Tools : PK, FK, UNIQUE, CHECK, ENUM, NOT NULL, TRIGGER
Kelebihan:
β Tidak bisa di-bypass dari jalur manapun (web, mobile, API, direct SQL)
β Terpusat β satu aturan untuk semua akses
β Otomatis β tidak bergantung pada developer mengingat aturan
Kelemahan:
β Pesan error dari DB seringkali tidak user-friendly
β Beberapa business rule terlalu kompleks untuk di-constraint di DB
β Cross-table validation lebih sulit (butuh trigger)
APPLICATION LAYER (Lapisan 2 β Fleksibel):
Penegak: Backend framework (Laravel, Spring, Django, dll.)
Tools : Form validation, API validation, regex, business logic
Kelebihan:
β Bisa memberikan pesan error yang user-friendly
β Bisa implementasi business rule yang sangat kompleks
β Bisa validasi multi-step (cek ketersediaan, hitung diskon, dll.)
Kelemahan:
β Bisa di-bypass jika ada jalur akses langsung ke DB
β Harus diimplementasikan di setiap aplikasi yang mengakses DB
β Rentan terhadap bug developer
PROCESS LAYER (Lapisan 3 β Kompensasi):
Penegak: Manusia, SOP, audit berkala, ETL pipeline
Tools : Review proses, periodic data audit, anomaly detection
Kelebihan:
β Bisa menangkap masalah yang tidak bisa dideteksi otomatis
β Bisa menangani kasus edge yang tidak terprediksi
Kelemahan:
β Lambat dan mahal
β Tidak konsisten (bergantung pada manusia)
β Setelah data masuk DB, memperbaikinya lebih sulit
PRINSIP: Defense in Depth
Idealnya, semua tiga lapisan aktif.
Jangan mengandalkan hanya satu lapisan.
"Constraint di DB adalah jaring pengaman terakhir, bukan satu-satunya."C.3.3 Mekanisme Penegakan Referential Integrity β Revisited
SKENARIO NYATA: SISTEM MANAJEMEN PROYEK
Tabel: PROYEK (id_proyek, nama, anggaran, id_manajer*)
KARYAWAN (id_karyawan, nama, ...)
TUGAS (id_tugas, deskripsi, id_proyek*, id_karyawan*)
SKENARIO 1: Manajer mengundurkan diri
β Apakah boleh hapus data karyawan yang menjadi manajer proyek aktif?
β ON DELETE RESTRICT pada PROYEK.id_manajer:
Tidak bisa hapus sebelum proyek ditutup atau manajer diganti.
SKENARIO 2: Proyek dihapus (dibatalkan)
β Apakah semua tugas dalam proyek harus ikut dihapus?
β ON DELETE CASCADE pada TUGAS.id_proyek:
Semua tugas otomatis terhapus saat proyeknya dihapus.
SKENARIO 3: Karyawan dipindah departemen tapi tetap di kantor
β Tugasnya tetap harus ada, tapi id_karyawan berubah?
β id_karyawan tidak berubah (surrogate key stabil) β tidak masalah
β Tapi jika natural key (nama) yang berubah β ON UPDATE CASCADE memperbarui
semua FK yang merujuk ke karyawan tersebut secara otomatis
PEMAHAMAN MENDALAM: RESTRICT vs NO ACTION
Keduanya menolak DELETE/UPDATE jika masih ada child rows.
Perbedaan: RESTRICT = cek SEBELUM statement dieksekusi
NO ACTION = cek SETELAH semua statement dalam transaksi selesai
Praktis di MySQL: Keduanya berperilaku sama untuk single statement.
Relevan di PostgreSQL: NO ACTION memungkinkan UPDATE dalam transaksi
multi-statement yang lebih kompleks.C.4 Materi 3: Metadata dan Data Dictionary
C.4.1 Tiga Jenis Metadata
Kita pertama kali mengenal metadata di pertemuan 1 sebagai "data tentang data". Kini saatnya memahami jenisnya secara lebih terstruktur.
TIGA JENIS METADATA:
1. TECHNICAL METADATA (Metadata Teknis)
Mendeskripsikan struktur fisik dan teknis dari data.
Isi:
β Nama tabel dan kolom
β Tipe data setiap kolom
β Constraint (PK, FK, UNIQUE, NOT NULL, CHECK)
β Index dan storage engine
β Relasi antar tabel
Contoh: Dokumentasi DDL, schema diagram, INFORMATION_SCHEMA di MySQL
Siapa yang butuh: DBA, developer, data engineer
2. BUSINESS METADATA (Metadata Bisnis)
Mendeskripsikan makna bisnis dan konteks dari data.
Isi:
β Definisi bisnis setiap kolom dalam bahasa non-teknis
β Pemilik data (data owner) dan penanggung jawab (steward)
β Aturan bisnis yang berlaku
β Kriteria kualitas data
β Frekuensi pembaruan
Contoh: Data dictionary, business glossary, data catalog
Siapa yang butuh: Business analyst, data scientist, manajer, auditor
3. OPERATIONAL METADATA (Metadata Operasional)
Mendeskripsikan bagaimana data digunakan dan dikelola.
Isi:
β Data lineage: Data ini berasal dari mana?
β Riwayat perubahan (audit trail, change log)
β Statistik penggunaan: Tabel mana yang paling sering di-query?
β Hasil profiling: Berapa persen NULL? Distribusi nilai?
β Jadwal refresh dan ETL history
Contoh: Audit log, INFORMATION_SCHEMA.TABLE_STATISTICS, ETL logs
Siapa yang butuh: Data engineer, DBA, compliance officerC.4.2 Data Dictionary β Pengertian dan Fungsi
APA ITU DATA DICTIONARY?
Data Dictionary (DD) adalah dokumen terstruktur yang berfungsi sebagai
"kamus resmi" dari seluruh data yang ada dalam sistem database.
Ia menjadi single source of truth untuk:
β "Apa arti kolom status di tabel pesanan?"
β "Siapa yang boleh mengubah data harga produk?"
β "Nilai apa saja yang valid untuk kolom jenis_anggota?"
β "Dari mana data ini berasal (lineage)?"
β "Kapan terakhir tabel ini diperbarui?"
MENGAPA DATA DICTIONARY PENTING?
Tanpa DD:
β Developer baru butuh berminggu-minggu memahami struktur DB
β Nama kolom ambigu: apakah "status" di tabel A sama dengan
"status" di tabel B?
β Data scientist tidak tahu arti kolom β analisis bisa keliru
β Saat ada bug: tidak ada referensi untuk memahami aturan bisnis yang benar
Dengan DD:
β Onboarding anggota tim baru lebih cepat
β Analisis data lebih akurat (konteks jelas)
β Komunikasi antar tim lebih efektif (bahasa yang sama)
β Compliance dan audit lebih mudah (dokumentasi tersedia)
β Evolusi sistem lebih aman (dampak perubahan bisa dianalisis)
SIAPA YANG MEMBUAT DAN MEMELIHARA DD?
β Data modeller / database architect: membuat DD awal
β DBA: memastikan DD sinkron dengan struktur DB
β Business analyst: mengisi definisi bisnis
β Data steward: memelihara dan memperbarui DD secara berkelanjutanC.4.3 Format Standar Data Dictionary
Data dictionary yang komprehensif beroperasi di dua level: level tabel dan level kolom.
Level Tabel:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATA DICTIONARY β LEVEL TABEL β
β βββββββββββββββββββββββββ¦ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Atribut β Nilai β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Nama Tabel β peminjaman β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Skema / Database β perpustakaan β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Deskripsi Bisnis β Menyimpan riwayat lengkap setiap transaksi β
β β peminjaman buku oleh anggota perpustakaan, β
β β termasuk tanggal pinjam, rencana kembali, β
β β tanggal aktual kembali, dan denda keterlambatan. β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Pemilik Data β Divisi Perpustakaan β Bagian Sirkulasi β
β (Data Owner) β β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Penanggung Jawab β Kepala Bagian Sirkulasi β
β (Data Steward) β β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Frekuensi Pembaruan β Real-time (setiap ada transaksi pinjam/kembali) β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Retensi Data β Disimpan selamanya (riwayat permanen); arsip β
β β ke tabel historis setelah 5 tahun β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Sumber Data β Sistem Perpustakaan Online, input petugas β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Estimasi Jumlah Baris β ~50.000 baris/tahun (asumsi 200 peminjaman/hari) β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Business Rules β 1. Satu anggota hanya boleh meminjam 3 buku β
β β secara bersamaan β
β β 2. Masa pinjam standar: 7 hari β
β β 3. Denda keterlambatan: Rp 500/hari/buku β
β β 4. Anggota tidak aktif tidak boleh meminjam β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Tabel Terkait β anggota (FK: id_anggota) β
β β buku (FK: id_buku) β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Dibuat Tanggal β 2025-08-01 β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Terakhir Diperbarui β 2026-02-20 β
β βββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββ£
β Versi β 1.2 β
ββββββββββββββββββββββββββ©ββββββββββββββββββββββββββββββββββββββββββββββββββLevel Kolom:
βββββββββββββββββ¦βββββββββββββββββββ¦βββββββ¦βββββββ¦βββββββββ¦ββββββββββββββββββββββββββββββββββββββββββββ
β Nama Kolom β Tipe Data β NULL β Key βDefault β Deskripsi Bisnis & Aturan β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β id_pinjam β INT UNSIGNED β NO β PK β AUTO β Nomor identifikasi unik setiap transaksi β
β β AUTO_INCREMENT β β β β peminjaman. Surrogate key yang dibuat β
β β β β β β sistem secara otomatis. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β id_anggota β INT UNSIGNED β NO β FK β β β Referensi ke anggota yang meminjam. β
β β β β β β Wajib diisi (total participation). β
β β β β β β ON DELETE RESTRICT: Anggota tidak bisa β
β β β β β β dihapus jika masih punya riwayat pinjam. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β id_buku β INT UNSIGNED β NO β FK β β β Referensi ke buku yang dipinjam. β
β β β β β β ON DELETE RESTRICT: Buku tidak bisa β
β β β β β β dihapus jika masih punya riwayat pinjam. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β tgl_pinjam β DATE β NO β β βCURRENT β Tanggal buku dipinjam. Default ke β
β β β β β_DATE β tanggal hari ini jika tidak diisi. β
β β β β β β Tidak bisa diubah setelah buku dipinjam. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β tgl_rencana β DATE β NO β β β β β Tanggal yang dijadwalkan untuk β
β _kembali β β β β β pengembalian. Dihitung otomatis: β
β β β β β β tgl_pinjam + masa_pinjam (dari tabel β
β β β β β β JENIS_ANGGOTA). Harus > tgl_pinjam. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β tgl_kembali β DATE β YES β β β NULL β Tanggal aktual buku dikembalikan. β
β _aktual β β β β β NULL berarti buku BELUM dikembalikan. β
β β β β β β Hanya diisi saat buku dikembalikan. β
β β β β β β Nilai valid: >= tgl_pinjam. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β denda β DECIMAL(10,2) β NO β β β 0.00 β Total denda keterlambatan dalam Rupiah. β
β β β β β β Dihitung: (tgl_kembali_aktual β β
β β β β β β tgl_rencana_kembali) Γ Rp500. β
β β β β β β Harus >= 0. Default 0 jika tidak β
β β β β β β terlambat. β
β ββββββββββββββββ¬βββββββββββββββββββ¬βββββββ¬βββββββ¬βββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ£
β status β ENUM β NO β β β'dipinjamβ Status terkini transaksi peminjaman. β
β β ('dipinjam', β β β' β dipinjam : buku sedang di tangan β
β β 'dikembalikan', β β β β anggota β
β β 'terlambat') β β β β dikembalikan: sudah kembali tepat waktu β
β β β β β β terlambat : sudah kembali tapi β
β β β β β β melewati tenggat, atau β
β β β β β β belum kembali & sudah lewat β
βββββββββββββββββ©βββββββββββββββββββ©βββββββ©βββββββ©βββββββββ©ββββββββββββββββββββββββββββββββββββββββββββC.4.4 Cara Mengakses Metadata Teknis di MySQL
MySQL menyimpan metadata teknis secara otomatis di database internal bernama INFORMATION_SCHEMA. Kita bisa query metadata ini seperti query tabel biasa.
-- Melihat semua tabel dalam database tertentu
SELECT TABLE_NAME, TABLE_ROWS, TABLE_COMMENT, CREATE_TIME, UPDATE_TIME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'perpustakaan'
ORDER BY TABLE_NAME;
-- Melihat detail kolom dari tabel tertentu
SELECT
COLUMN_NAME,
COLUMN_TYPE,
IS_NULLABLE,
COLUMN_KEY,
COLUMN_DEFAULT,
EXTRA,
COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'perpustakaan'
AND TABLE_NAME = 'peminjaman'
ORDER BY ORDINAL_POSITION;
-- Melihat semua constraint (FK) dalam database
SELECT
CONSTRAINT_NAME,
TABLE_NAME,
COLUMN_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'perpustakaan'
AND REFERENCED_TABLE_NAME IS NOT NULL
ORDER BY TABLE_NAME;
-- Melihat semua index dalam database
SELECT
TABLE_NAME,
INDEX_NAME,
COLUMN_NAME,
NON_UNIQUE,
INDEX_TYPE
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'perpustakaan'
ORDER BY TABLE_NAME, INDEX_NAME;C.5 Materi 4: Data Governance β Tata Kelola Data
C.5.1 Apa Itu Data Governance?
DATA GOVERNANCE adalah sistem kerangka kerja yang mendefinisikan:
SIAPA yang berhak membuat keputusan tentang data
APA keputusan yang perlu dibuat
BAGAIMANA keputusan tersebut dibuat dan dieksekusi
Governance bukan hanya soal teknologi β ini tentang:
β Orang: Roles, tanggung jawab, akuntabilitas
β Proses: Kebijakan, prosedur, standar
β Teknologi: Tools untuk penegakan kebijakan
TANPA DATA GOVERNANCE:
β Setiap developer mendefinisikan kolom "status" berbeda
β Tidak ada yang tahu apakah data pelanggan boleh dilihat tim marketing
β Data breach terjadi tanpa ada yang bertanggung jawab
β Regulasi dilanggar tanpa disadari
DENGAN DATA GOVERNANCE:
β Standar yang jelas: format, naming, tipe data
β Jalur persetujuan jelas saat ada perubahan skema
β Kontrol akses terstruktur: siapa boleh baca/ubah/hapus
β Kepatuhan regulasi terjamin secara sistemikC.5.2 Peran Kunci dalam Data Governance
1. DATA OWNER (Pemilik Data)
β Pejabat senior yang secara bisnis bertanggung jawab
atas data dalam domain tertentu
β Membuat keputusan strategis: kebijakan retensi,
siapa yang boleh akses, kapan data bisa dihapus
β Contoh: Direktur Keuangan = data owner untuk data keuangan
2. DATA STEWARD (Pengelola Data)
β Bertanggung jawab atas kualitas dan integritas data
sehari-hari (lebih operasional dari Data Owner)
β Tugas: memperbarui data dictionary, memantau DQ,
menyelesaikan masalah kualitas data
β Contoh: Kepala Divisi IT atau Data Analyst senior
3. DATA CUSTODIAN (Penjaga Data)
β Bertanggung jawab atas infrastruktur penyimpanan dan keamanan data
β Tugas: backup, recovery, access control, enkripsi
β Contoh: Database Administrator (DBA)
4. DATA CONSUMER (Pengguna Data)
β Menggunakan data untuk kebutuhan bisnis atau analisis
β Wajib menggunakan data sesuai kebijakan yang ditetapkan
β Contoh: Data Scientist, Business Analyst, Manajer
HUBUNGAN ANTAR PERAN:
Data Owner β menetapkan kebijakan
β
Data Steward β memastikan kebijakan dijalankan, menjaga kualitas
β
Data Custodian β mengimplementasikan keamanan teknis
β
Data Consumer β menggunakan data sesuai kebijakanC.5.3 Kebijakan-Kebijakan Penting dalam Data Governance
1. KEBIJAKAN AKSES DATA (Data Access Policy)
β Siapa boleh baca, siapa boleh ubah, siapa boleh hapus?
β Prinsip Least Privilege: berikan akses minimum yang diperlukan
Implementasi di MySQL:
-- Buat user dengan akses terbatas
CREATE USER 'analyst_team'@'%' IDENTIFIED BY 'password';
GRANT SELECT ON perpustakaan.* TO 'analyst_team'@'%';
-- Analyst hanya bisa SELECT, tidak bisa INSERT/UPDATE/DELETE
CREATE USER 'app_backend'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE ON perpustakaan.* TO 'app_backend'@'localhost';
REVOKE DELETE ON perpustakaan.* FROM 'app_backend'@'localhost';
-- Aplikasi backend bisa baca/tulis tapi tidak bisa hapus
2. KEBIJAKAN RETENSI DATA (Data Retention Policy)
β Berapa lama data disimpan? Kapan data bisa/harus dihapus?
Contoh kebijakan umum:
β Data transaksi : Disimpan 10 tahun (untuk audit perpajakan)
β Log aplikasi : Disimpan 90 hari (kemudian dihapus otomatis)
β Data pelanggan : Disimpan selama pelanggan aktif + 2 tahun
β Data anak di bawah umur: Khusus β lihat UU Perlindungan Anak
Implementasi: Scheduled job/cron yang menghapus atau mengarsip
data sesuai kebijakan.
3. KEBIJAKAN PERUBAHAN SKEMA (Schema Change Policy)
β Perubahan struktur tabel (ALTER TABLE) harus melalui:
a. Review dan persetujuan (code review atau DBA review)
b. Diuji di environment development/staging
c. Memperbarui data dictionary setelah perubahan
d. Komunikasi ke semua stakeholder yang terdampak
β Jangan pernah langsung ALTER TABLE di production
tanpa proses review!
4. KEBIJAKAN BACKUP DAN RECOVERY
β Full backup: berapa kali? Disimpan di mana? Berapa lama?
β Point-in-time recovery: bisa recovery ke titik waktu tertentu?
β Recovery Time Objective (RTO): berapa lama boleh downtime?
β Recovery Point Objective (RPO): berapa lama data boleh hilang?C.5.4 Regulasi yang Relevan di Konteks Indonesia
DATA GOVERNANCE DI INDONESIA β KERANGKA REGULASI
1. UU NO. 27 TAHUN 2022 β PERLINDUNGAN DATA PRIBADI (PDP)
Berlaku efektif Oktober 2024.
Yang harus diperhatikan:
β Data pribadi: nama, alamat, email, no. KTP, no. HP, tgl_lahir, dll.
β Harus ada dasar hukum untuk memproses data pribadi
(persetujuan, kepentingan sah, kontrak, dll.)
β Hak subjek data: hak akses, koreksi, hapus, portabilitas
β Wajib melindungi data dengan langkah teknis dan organisasional
β Wajib melapor jika terjadi kebocoran data dalam 14 hari
Dampak pada desain database:
β Enkripsi untuk data sensitif (tgl_lahir, no_KTP, dll.)
β Kemampuan untuk "melupakan" (delete) data pengguna jika diminta
β Audit trail: log siapa mengakses data pribadi siapa
β Anonimisasi untuk keperluan analisis (tidak perlu identitas asli)
2. UU ITE (UU NO. 11/2008 diubah UU NO. 19/2016)
β Mengatur penggunaan data elektronik
β Larang akses tanpa izin ke sistem elektronik
β Relevan untuk desain sistem autentikasi dan otorisasi
3. STANDAR ISO 27001 β INFORMATION SECURITY MANAGEMENT
Internasional, banyak perusahaan Indonesia mengadopsi:
β Manajemen risiko keamanan informasi
β Kontrol akses, enkripsi, audit
β Relevan untuk organisasi yang menangani data sensitif dalam volume besar
IMPLIKASI PRAKTIS UNTUK DATA MODELLING:
β Identifikasi kolom yang berisi data pribadi di data dictionary
β Pertimbangkan enkripsi untuk kolom sensitif (no_KTP, password)
β Desain mekanisme untuk soft-delete (jangan hapus permanent, tapi
tandai is_deleted = 1 untuk audit trail)
β Rencanakan anonimisasi: hapus nama/email tapi simpan data transaksinya
β Dokumentasikan tujuan pengumpulan setiap data pribadi di data dictionaryC.6 Materi 5: Dampak Kualitas Data terhadap Sains Data
C.6.1 Prinsip GIGO β Garbage In, Garbage Out
"GARBAGE IN, GARBAGE OUT"
Jika data yang masuk ke model ML atau analisis statistik berkualitas
buruk, maka output yang dihasilkan pun tidak dapat dipercaya β
tidak peduli seberapa canggih algoritmanya.
ESTIMASI INDUSTRI:
β Data scientist menghabiskan 60β80% waktu mereka
untuk data cleaning dan preparation
β Bukan karena mereka suka β tapi karena kualitas data
yang sampai ke tangan mereka seringkali buruk
β Inilah mengapa data modelling yang baik DAN data governance
yang kuat sangat berharga: mencegah masalah di hulu
jauh lebih murah daripada membersihkan di hilirC.6.2 Dampak per Dimensi Kualitas terhadap Analisis
ACCURACY β Model yang Menyesatkan
Contoh kasus:
Sebuah startup fintech menggunakan model ML untuk
prediksi risiko kredit. Kolom "penghasilan" ternyata
ada yang diisi dalam satuan juta (5 = Rp5.000.000)
dan ada yang diisi dalam satuan rupiah (5000000).
Akibat: Model "belajar" dari data yang campur aduk β
prediksi risiko kredit keliru β bank memberi pinjaman
ke profil yang salah β kerugian finansial nyata.
COMPLETENESS β Bias dalam Analisis
Contoh kasus:
Riset kepuasan pelanggan: 30% data "rating" bernilai NULL
(responden tidak menjawab). Jika NULL diabaikan (di-drop),
analisis hanya mencakup 70% yang menjawab.
Masalah: Pelanggan yang tidak puas cenderung tidak mau
mengisi rating β NULL bukan random, ada polanya (selection bias).
Analisis "rata-rata rating" yang mengabaikan NULL
secara sistematis lebih tinggi dari kenyataannya.
CONSISTENCY β Segmentasi yang Salah
Contoh kasus:
Analisis segmentasi pelanggan berdasarkan kota.
Kolom kota_asal berisi: "Jakarta", "jakarta", "JAKARTA",
"Dki Jakarta", "DKI Jakarta", "Kota Jakarta".
Akibat: Setiap variasi dianggap sebagai kota berbeda β
segmen "Jakarta" tampak kecil β rekomendasi bisnis keliru
(misalnya: tidak buka cabang baru di Jakarta karena
terlihat sedikit pelanggan).
TIMELINESS β Rekomendasi yang Usang
Contoh kasus:
Sistem rekomendasi produk menggunakan riwayat pembelian
pelanggan. Data tidak diperbarui secara real-time.
Akibat: Sistem merekomendasikan produk yang sudah
dibeli kemarin, atau promosi yang sudah berakhir minggu lalu.
Pengalaman pengguna buruk.
VALIDITY β False Patterns
Contoh kasus:
Dataset transaksi berisi tanggal "2099-12-31" untuk
transaksi yang gagal diproses sistem (default error date).
Akibat: Analisis tren transaksi per tahun menunjukkan
"lonjakan transaksi di tahun 2099" β anomali yang membingungkan.
Jika tidak dideteksi, bisa mengacaukan model forecasting.
UNIQUENESS β Hitung yang Salah
Contoh kasus:
Laporan "jumlah pelanggan unik" untuk meeting direksi:
laporan menunjukkan 50.000 pelanggan. Padahal setelah
deduplication ditemukan hanya 35.000 pelanggan unik
(15.000 adalah duplikat dari berbagai sumber).
Akibat: Seluruh strategi ekspansi berbasis data yang salah.
Target "1 juta pelanggan" sebenarnya baru 70% tercapai,
bukan 100%.C.6.3 Mekanisme Deteksi Masalah Kualitas Data β SQL Queries
-- ============================================================
-- TOOLKIT DATA QUALITY ASSESSMENT
-- ============================================================
-- 1. CEK COMPLETENESS β Hitung persentase NULL per kolom
SELECT
'nama' AS kolom,
COUNT(*) AS total,
SUM(CASE WHEN nama IS NULL OR nama = '' THEN 1 ELSE 0 END) AS nilai_kosong,
ROUND(100.0 * SUM(CASE WHEN nama IS NULL OR nama = '' THEN 1 ELSE 0 END)
/ COUNT(*), 2) AS persen_kosong
FROM pelanggan
UNION ALL
SELECT 'email', COUNT(*),
SUM(CASE WHEN email IS NULL OR email = '' THEN 1 ELSE 0 END),
ROUND(100.0 * SUM(CASE WHEN email IS NULL OR email = '' THEN 1 ELSE 0 END)
/ COUNT(*), 2)
FROM pelanggan
UNION ALL
SELECT 'no_telp', COUNT(*),
SUM(CASE WHEN no_telp IS NULL THEN 1 ELSE 0 END),
ROUND(100.0 * SUM(CASE WHEN no_telp IS NULL THEN 1 ELSE 0 END)
/ COUNT(*), 2)
FROM pelanggan;
-- 2. CATUR VALIDITY β Cari email yang tidak mengandung '@'
SELECT id_pelanggan, nama, email
FROM pelanggan
WHERE email NOT LIKE '%@%'
OR email NOT LIKE '%.%';
-- 3. CEK VALIDITY β Tanggal di masa depan
SELECT id_pelanggan, nama, tgl_lahir
FROM pelanggan
WHERE tgl_lahir > CURRENT_DATE
OR tgl_lahir < '1900-01-01'; -- juga cek yang tidak masuk akal
-- 4. CEK UNIQUENESS β Temukan baris duplikat
SELECT nama, email, tgl_lahir, COUNT(*) AS jumlah_duplikat
FROM pelanggan
GROUP BY nama, email, tgl_lahir
HAVING COUNT(*) > 1
ORDER BY jumlah_duplikat DESC;
-- 5. CEK CONSISTENCY β Deteksi variasi format no_telp
SELECT no_telp, COUNT(*) AS jumlah
FROM pelanggan
WHERE no_telp IS NOT NULL
GROUP BY
CASE
WHEN no_telp LIKE '08%' THEN '08... (format lokal)'
WHEN no_telp LIKE '+62%' THEN '+62... (format internasional)'
WHEN no_telp LIKE '62%' THEN '62... (tanpa +)'
WHEN no_telp REGEXP '^[0-9-() ]+$' THEN 'Format campuran angka'
ELSE 'Format tidak dikenal'
END
ORDER BY jumlah DESC;
-- 6. PROFILING CEPAT β Nilai unik dan distribusi (contoh: status pesanan)
SELECT status, COUNT(*) AS jumlah,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER(), 2) AS persentase
FROM pesanan
GROUP BY status
ORDER BY jumlah DESC;
-- 7. CEK DATA YANG "MENCURIGAKAN" (test data masuk production)
SELECT id_pelanggan, nama, email
FROM pelanggan
WHERE LOWER(nama) IN ('test', 'aaa', 'xxx', 'demo', 'admin', 'user')
OR LOWER(email) LIKE '%test%'
OR LOWER(email) LIKE '%demo%';
-- 8. CEK TIMELINESS β Baris yang belum diperbarui dalam 1 tahun
SELECT id_pelanggan, nama, updated_at,
DATEDIFF(CURRENT_DATE, updated_at) AS hari_sejak_update
FROM pelanggan
WHERE updated_at < DATE_SUB(CURRENT_DATE, INTERVAL 1 YEAR)
ORDER BY updated_at ASC;D. LATIHAN DAN DISKUSI
D.1 Latihan Identifikasi Masalah Kualitas Data (Individual, 15 menit)
Dataset Latihan: Tabel produk dari Sistem E-Commerce
βββββββββββββ¬βββββββββββββββββββββββββββ¬ββββββββββββ¬βββββββ¬βββββββββββββ¬βββββββββββββββββ
β id_produk β nama_produk β harga β stok β id_kategoriβ status β
βββββββββββββΌβββββββββββββββββββββββββββΌββββββββββββΌβββββββΌβββββββββββββΌβββββββββββββββββ€
β 1 β Laptop ASUS VivoBook 14 β 7500000 β 15 β 1 β aktif β
β 2 β laptop asus β 7500000 β 15 β 1 β aktif β β ?
β 3 β Mouse Wireless Logitech β 0 β 8 β 2 β aktif β β ?
β 4 β Keyboard Mechanical β 350000 β -3 β 2 β aktif β β ?
β 5 β Monitor LG 24" β NULL β 5 β 2 β AKTIF β β ?
β 6 β SSD Kingston 1TB β 850000 β 20 β 99 β aktif β β ?
β 7 β Headphone Sony β 450000 β 0 β 3 β nonaktif β
β 8 β webcam hd 1080p logitech β 45.0000 β 12 β 3 β aktif β β ?
β 9 β RAM Corsair 16GB DDR4 β 650000 β 7 β 2 β aktif β
β 10 β test produk β 1 β 0 β 1 β aktif β β ?
βββββββββββββ΄βββββββββββββββββββββββββββ΄ββββββββββββ΄βββββββ΄βββββββββββββ΄βββββββββββββββββTugas:
- Identifikasi setiap masalah kualitas data yang ada. Isi tabel berikut:
| Baris (id) | Masalah yang Ditemukan | Dimensi DQ | Dampak jika Dibiarkan | Saran Perbaikan |
|---|---|---|---|---|
-
Mana masalah yang seharusnya bisa dicegah dengan constraint DDL yang tepat? Constraint apa yang dimaksud?
-
Mana masalah yang TIDAK bisa dicegah dengan constraint DDL dan butuh penanganan di lapisan lain?
D.2 Praktikum: Menyusun Data Dictionary (Kelompok, 20 menit)
Instruksi: Gunakan DDL script proyek kelompok yang dibuat di pertemuan 9. Pilih 2 tabel terpenting dari proyek kelompok, lalu susun data dictionary lengkap menggunakan format standar yang telah diajarkan.
Format yang harus diisi:
Untuk setiap tabel:
- Tabel-level dictionary: Nama tabel, deskripsi bisnis, data owner, steward, frekuensi update, retensi, business rules
- Kolom-level dictionary: Untuk setiap kolom β tipe data, nullable, key type, default, deskripsi bisnis yang jelas (minimal 2 kalimat), nilai valid (jika ENUM), aturan bisnis khusus
Pertanyaan diskusi setelah praktikum:
- Kolom mana yang paling sulit untuk dideskripsikan? Mengapa?
- Adakah kolom yang setelah dideskripsikan, kamu menyadari seharusnya di-redesain?
- Business rules apa yang kamu temukan saat menyusun DD yang belum ter-encode di DDL?
D.3 Diskusi Kelompok: "The Cost of Poor Data Quality" (10 menit)
Studi Kasus: Data Dosen yang Tidak Konsisten
Universitas X memiliki sistem akademik yang sudah berjalan 10 tahun. Beberapa bulan lalu, universitas mulai membangun Dashboard Analitik Akademik untuk memantau produktivitas penelitian, beban mengajar, dan kinerja program studi.
Tim data science memulai analisis dan menemukan:
- Nama dosen tersimpan dalam berbagai format: "Dr. Ahmad, M.Pd.", "Ahmad", "Dr Ahmad MPd", "AHMAD"
- NIP sebagian diisi dengan strip ("-"), sebagian kosong, sebagian diisi lengkap 18 digit
- Kolom jabatan berisi 47 variasi teks berbeda untuk jabatan yang pada dasarnya hanya ada 5 jenis
- Data kehadiran mengajar memiliki 23% nilai NULL
- Beberapa dosen muncul dengan dua ID berbeda karena pernah diinput ulang setelah resign dan bergabung kembali
Pertanyaan Diskusi:
- Berapa lama waktu yang dibutuhkan tim data science untuk "membersihkan" data ini sebelum bisa dianalisis? Estimasi!
- Jika analisis tetap dijalankan tanpa membersihkan data, apa risiko terbesarnya?
- Apa kesalahan desain yang seharusnya dicegah dari awal? (Kaitkan dengan materi hari ini)
- Siapa yang seharusnya bertanggung jawab atas kondisi data seperti ini?
E. EVALUASI DAN PENILAIAN
E.1 Kuis Penutup (10 menit, bobot partisipasi)
-
Sebutkan 6 dimensi kualitas data dan berikan satu contoh pelanggaran untuk setiap dimensi!
-
Seorang developer berkata: "Data quality bukan masalah saya β saya sudah pasang NOT NULL dan CHECK constraint di DDL." Apa yang salah dengan pernyataan ini? Berikan argumen dengan contoh nyata!
-
Apa perbedaan antara Data Owner, Data Steward, dan Data Custodian? Dalam konteks program studi Sains Data UIN Pekalongan, siapa yang cocok menjadi masing-masing peran tersebut?
-
Mengapa data dictionary dianggap sebagai "investasi jangka panjang"? Apa yang terjadi jika data dictionary tidak diperbarui setelah ada perubahan skema?
-
Seorang data scientist menemukan bahwa 35% baris di tabel transaksi memiliki nilai NULL di kolom
id_pelanggan. Apakah ini masalah kualitas data? Dimension apa yang terlanggar? Bagaimana cara menginvestigasinya lebih lanjut?
E.2 Tugas: Data Dictionary Proyek Kelompok
Judul: Data Dictionary Komprehensif β Proyek Kelompok
Deskripsi: Kelompok menyusun data dictionary lengkap untuk semua tabel dalam proyek mereka.
Deliverables:
Bagian 1 β Data Dictionary Tabel-Level Untuk setiap tabel, isi format standar:
- Nama tabel, skema/database, deskripsi bisnis
- Data Owner (nama/jabatan fiktif yang logis)
- Data Steward
- Frekuensi pembaruan data
- Kebijakan retensi
- Business rules yang berlaku (minimal 3 per tabel)
- Tabel-tabel yang berelasi
Bagian 2 β Data Dictionary Kolom-Level Untuk setiap kolom di setiap tabel:
- Nama kolom, tipe data, nullable, key type, nilai default
- Deskripsi bisnis dalam bahasa non-teknis (minimal 2 kalimat)
- Nilai valid (terutama untuk ENUM dan kolom terbatas)
- Aturan bisnis khusus
- Catatan tambahan (misalnya: semantik NULL, format yang diharapkan)
Bagian 3 β Data Quality Assessment Bayangkan database sudah berjalan 6 bulan:
- Identifikasi 5 potensi masalah kualitas data yang paling mungkin terjadi untuk domain proyek kelompok kamu
- Untuk setiap potensi masalah: dimensi DQ yang terlanggar, penyebab yang mungkin, dampaknya, dan rekomendasi pencegahan
- Tulis minimal 3 query SQL untuk mendeteksi masalah-masalah tersebut
Bagian 4 β Catatan Data Governance
- Identifikasi kolom-kolom yang berisi data pribadi (sesuai UU PDP)
- Rekomendasikan level akses untuk 3 peran pengguna berbeda (admin, staff, analyst)
- Tuliskan minimal 2 kebijakan data governance yang relevan untuk domain proyek kamu
Format File:
DataDictionary_[KelompokX]_[Domain].pdf(min. 8 halaman)
Deadline: H-1 sebelum pertemuan 11 (dikumpulkan via Ngaji UIN Gusdur)
F. PERSIAPAN PERTEMUAN 11
F.1 Topik Pertemuan 11
Pengantar Data Warehouse & Analytical Modelling β transisi besar dari OLTP (sistem operasional) ke OLAP (sistem analitik). Pertemuan ini membuka babak baru: bagaimana data dari sistem operasional yang sudah kita rancang (pertemuan 1β10) bisa dimanfaatkan untuk analisis skala besar.
Topik yang akan dibahas:
- OLTP vs OLAP: perbedaan fundamental dalam tujuan, skema, dan pola query
- Konsep Data Warehouse: subject-oriented, integrated, time-variant, non-volatile
- Data Mart sebagai subset domain-specific dari Data Warehouse
- Proses ETL: Extract, Transform, Load β menjembatani OLTP dan OLAP
- Mengapa skema yang sudah ternormalisasi di OLTP perlu didepormalisasi di OLAP
F.2 Pertanyaan Pemantik untuk Pertemuan 11
Bayangkan sistem e-commerce Toko Batik Online yang sudah dibangun:
- Sistem OLTP menyimpan setiap transaksi secara real-time
- Setelah 2 tahun, tabel
pesananmemiliki 500.000 baris - Manajer ingin laporan: "Tren penjualan per kategori produk per bulan selama 2 tahun terakhir, dibandingkan dengan target penjualan"
Query untuk laporan ini membutuhkan JOIN 5 tabel dan agregasi 500.000 baris.
Pikirkan:
- Apakah query seperti ini sebaiknya dijalankan langsung di database OLTP yang sedang dipakai customer berbelanja?
- Jika tidak, apa solusinya?
- Bagaimana struktur data yang ideal untuk pertanyaan analitik seperti itu?
G. REFERENSI
G.1 Referensi Utama
-
Redman, T. C. (2008). Data Driven: Profiting from Your Most Important Business Asset. Harvard Business School Press.
- Chapter 3: The Many Dimensions of Data Quality (bacaan utama β dimensi DQ)
- Chapter 7: Building the Data Quality System
-
Elmasri, R. & Navathe, S. B. (2015). Fundamentals of Database Systems (7th Edition). Pearson.
- Chapter 5: The Relational Data Model β Integrity Constraints
- Chapter 24: Data Warehousing, OLAP, and Data Mining (pengantar)
-
Loshin, D. (2010). The Practitioner's Guide to Data Quality Improvement. Morgan Kaufmann.
- Panduan praktis komprehensif tentang DQ dari perspektif industri
-
DAMA International. (2017). DAMA-DMBOK: Data Management Body of Knowledge (2nd Edition). Technics Publications.
- Standar internasional untuk manajemen data, termasuk DQ dan Governance
G.2 Regulasi dan Standar
- Undang-Undang No. 27 Tahun 2022 tentang Perlindungan Data Pribadi (PDP)
- https://peraturan.bpk.go.id/ (opens in a new tab) β teks lengkap UU PDP
- ISO 8000 β Data Quality Standard
- ISO/IEC 27001 β Information Security Management
G.3 Referensi Online
- DAMA UK. "The Six Primary Dimensions for Data Quality Assessment" β https://www.dama.org (opens in a new tab)
- IBM Data Management. "Data Governance" β https://www.ibm.com/topics/data-governance (opens in a new tab)
- Great Expectations. Open-source data quality framework β https://greatexpectations.io (opens in a new tab)
- MySQL INFORMATION_SCHEMA Documentation β https://dev.mysql.com/doc/refman/8.0/en/information-schema.html (opens in a new tab)
G.4 Video Resources
- IBM Technology β "What is Data Governance?" (YouTube β penjelasan visual yang baik)
- Pragmatic Works β "Data Quality Explained" (YouTube)
- Kominfo / Kemkominfo β Sosialisasi UU PDP (YouTube β konteks Indonesia)
H. LAMPIRAN
Lampiran A: Template Data Dictionary β Format Standar
Instruksi Pengisian: Template ini digunakan untuk mendokumentasikan setiap tabel dalam database. Satu file bisa berisi multiple tabel. Perbarui setiap kali ada perubahan skema.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DATA DICTIONARY β [NAMA SISTEM / DATABASE]
Versi: [X.Y] | Terakhir Diperbarui: [YYYY-MM-DD]
Disusun oleh: [Nama] | Direview oleh: [Nama Data Steward]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
TABEL: [nama_tabel]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Nama Tabel : [nama_tabel]
Skema/Database : [nama_database]
Deskripsi Bisnis : [Jelaskan fungsi bisnis tabel ini dalam 2β4
kalimat. Hindari jargon teknis. Tulis seolah
menjelaskan kepada manajer non-teknis.]
Data Owner : [Jabatan/divisi yang secara bisnis
bertanggung jawab atas data ini]
Data Steward : [Nama/jabatan pengelola data sehari-hari]
Frekuensi Update : [Real-time / Harian / Mingguan / Bulanan /
Hanya saat event tertentu]
Retensi Data : [Berapa lama data disimpan? Kapan diarsip/hapus?]
Estimasi Volume : [Perkiraan jumlah baris dan pertumbuhan per bulan]
Sumber Data : [Dari mana data ini berasal: form web, API,
migrasi, integrasi sistem lain, dll.]
Tabel Berelasi : [Daftar tabel yang memiliki FK ke/dari tabel ini]
Business Rules :
BR-001: [Aturan bisnis pertama β tulis dengan jelas]
BR-002: [Aturan bisnis kedua]
BR-003: [Aturan bisnis ketiga]
[Tambah sesuai kebutuhan]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
KOLOM-KOLOM:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Nama Kolom : [nama_kolom]
Tipe Data : [INT UNSIGNED / VARCHAR(n) / DECIMAL(p,s) / dll.]
Nullable : [YES / NO]
Key Type : [PK / FK / UNIQUE / β (bukan key)]
Nilai Default : [Nilai default, atau AUTO_INCREMENT, atau β]
Deskripsi Bisnis : [Penjelasan 2β4 kalimat tentang makna bisnis
kolom ini. Apa artinya? Bagaimana digunakan?
Siapa yang mengisinya?]
Nilai Valid : [Untuk ENUM: daftar nilai dan artinya.
Untuk numerik: range yang valid.
Untuk teks: format yang diharapkan.]
Aturan Bisnis : [Business rule spesifik untuk kolom ini
yang belum tertangkap oleh definisi di atas]
Catatan : [Informasi tambahan: semantik NULL, riwayat
perubahan nama, hubungan dengan kolom lain, dll.]
[Ulangi blok di atas untuk setiap kolom]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
RIWAYAT PERUBAHAN:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Tanggal | Versi | Perubahan | Oleh
βββββββββββββΌββββββββΌβββββββββββββββββββββββββββββΌββββββββββββββ
[YYYY-MM-DD]| 1.0 | Versi awal | [Nama]
[YYYY-MM-DD]| 1.1 | Tambah kolom [nama] | [Nama]
[YYYY-MM-DD]| 1.2 | Ubah tipe [kolom] β [tipe] | [Nama]
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββLampiran B: Checklist Data Quality Assessment
CHECKLIST PENILAIAN KUALITAS DATA
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
[ACCURACY]
β‘ Tidak ada nilai yang secara logis tidak mungkin (mis. tgl_lahir di masa depan)
β‘ Tidak ada nilai yang secara statistik merupakan outlier ekstrem
β‘ Data yang berasal dari input manual telah diverifikasi/validated
β‘ Ada mekanisme audit trail untuk mendeteksi perubahan yang tidak sah
[COMPLETENESS]
β‘ Kolom NOT NULL tidak punya nilai kosong ("") yang lolos constraint
β‘ Persentase NULL pada setiap kolom telah dievaluasi dan dalam batas wajar
β‘ Tidak ada record yang missing kolom yang secara bisnis wajib diisi
β‘ Dokumentasi ada untuk setiap kolom nullable: apa arti NULL di sini?
[CONSISTENCY]
β‘ Format data seragam dalam satu kolom (no_telp, nama, kode, dll.)
β‘ Nilai yang sama tidak dinyatakan berbeda di tabel berbeda
β‘ Tidak ada konflik antar kolom dalam satu baris (mis. tgl_mulai > tgl_selesai)
β‘ Tabel referensi (master data) ada untuk menstandarkan nilai yang berulang
[TIMELINESS]
β‘ Semua tabel punya audit columns: created_at dan updated_at
β‘ Frekuensi update data sesuai dengan kebutuhan bisnis
β‘ Ada proses untuk menandai atau menonaktifkan data yang sudah kadaluarsa
β‘ SLA refresh data terdokumentasi dan dipatuhi
[VALIDITY]
β‘ Semua kolom dengan nilai terbatas menggunakan ENUM atau FK ke tabel referensi
β‘ CHECK constraint ada untuk kolom numerik yang punya range logis
β‘ Validasi format (email, nomor telepon, kode pos) ada di lapisan aplikasi
β‘ Data uji coba (test data) tidak ada di environment production
[UNIQUENESS]
β‘ Kolom bisnis yang harus unik punya UNIQUE constraint
β‘ Tidak ada duplikasi baris yang terdeteksi (cek dengan GROUP BY + HAVING)
β‘ Mekanisme idempotency ada untuk mencegah double-insert dari sistem
β‘ Strategi deduplication ada untuk data yang masuk dari multiple sumber
[GOVERNANCE]
β‘ Setiap tabel punya Data Owner yang jelas
β‘ Data dictionary tersedia dan up-to-date
β‘ Kolom yang berisi data pribadi (PII) telah diidentifikasi
β‘ Kebijakan akses (siapa boleh baca/tulis/hapus) terdokumentasi
β‘ Kebijakan retensi data ada dan diimplementasikan
β‘ Mekanisme audit trail ada untuk data sensitifLampiran C: Contoh Query DQ Assessment Siap Pakai
-- ============================================================
-- TEMPLATE QUERY DATA QUALITY ASSESSMENT
-- Ganti nama database dan tabel sesuai kebutuhan
-- ============================================================
-- 1. RINGKASAN TABEL: Jumlah baris dan tanggal update
SELECT
TABLE_NAME,
TABLE_ROWS AS estimasi_baris,
CREATE_TIME,
UPDATE_TIME,
TABLE_COMMENT
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'nama_database'
ORDER BY TABLE_ROWS DESC;
-- 2. COMPLETENESS REPORT: % NULL per kolom (sesuaikan nama tabel & kolom)
SELECT
kolom,
total_baris,
jumlah_null,
ROUND(100.0 * jumlah_null / total_baris, 2) AS persen_null,
CASE
WHEN ROUND(100.0 * jumlah_null / total_baris, 2) = 0 THEN 'β Sempurna'
WHEN ROUND(100.0 * jumlah_null / total_baris, 2) <= 5 THEN 'β Perlu perhatian'
WHEN ROUND(100.0 * jumlah_null / total_baris, 2) <= 20 THEN 'β β Bermasalah'
ELSE 'β Kritis'
END AS status
FROM (
SELECT 'nama' AS kolom, COUNT(*) AS total_baris,
SUM(CASE WHEN nama IS NULL OR nama = '' THEN 1 ELSE 0 END) AS jumlah_null
FROM pelanggan
UNION ALL
SELECT 'email', COUNT(*),
SUM(CASE WHEN email IS NULL OR email = '' THEN 1 ELSE 0 END)
FROM pelanggan
UNION ALL
SELECT 'no_telp', COUNT(*),
SUM(CASE WHEN no_telp IS NULL THEN 1 ELSE 0 END)
FROM pelanggan
) AS completeness_check
ORDER BY persen_null DESC;
-- 3. UNIQUENESS CHECK: Deteksi kemungkinan duplikat pelanggan
SELECT
SOUNDEX(nama) AS nama_soundex, -- Soundex: nama mirip meski beda ejaan
COUNT(DISTINCT email) AS variasi_email,
COUNT(*) AS jumlah_kemungkinan_duplikat,
GROUP_CONCAT(email SEPARATOR ' | ') AS daftar_email
FROM pelanggan
GROUP BY SOUNDEX(nama)
HAVING COUNT(*) > 1 AND COUNT(DISTINCT email) > 1
ORDER BY jumlah_kemungkinan_duplikat DESC;
-- 4. VALIDITY CHECK: Data yang tidak sesuai rule bisnis
SELECT 'email_invalid' AS jenis_masalah, COUNT(*) AS jumlah
FROM pelanggan WHERE email NOT REGEXP '^[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}$'
UNION ALL
SELECT 'tgl_lahir_masa_depan', COUNT(*)
FROM pelanggan WHERE tgl_lahir > CURRENT_DATE
UNION ALL
SELECT 'tgl_lahir_terlalu_tua', COUNT(*)
FROM pelanggan WHERE tgl_lahir < '1900-01-01'
UNION ALL
SELECT 'nama_terlalu_pendek', COUNT(*)
FROM pelanggan WHERE LENGTH(TRIM(nama)) < 2;
-- 5. DATA PROFILING: Distribusi nilai untuk kolom kategorik
SELECT
status,
COUNT(*) AS jumlah,
ROUND(100.0 * COUNT(*) / SUM(COUNT(*)) OVER (), 2) AS persen,
REPEAT('β', ROUND(COUNT(*) * 30 / MAX(COUNT(*)) OVER (), 0)) AS bar_chart
FROM pesanan
GROUP BY status
ORDER BY jumlah DESC;Lampiran D: Lembar Kerja Latihan DQ Assessment
LEMBAR KERJA β LATIHAN DATA QUALITY ASSESSMENT
Nama : ___________________________ NIM : _______________
Tanggal: ___________________
DATASET: Tabel produk (lihat Soal D.1)
TABEL IDENTIFIKASI MASALAH:
ββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββ
β id_prodβ Masalah yang Ditemukan β Dimensi DQ β Dampak jika Dibiarkan β Saran Perbaikan β
ββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββΌβββββββββββββββββββββββββΌβββββββββββββββββββββββββββββ€
β 2 β β β β β
β 3 β β β β β
β 4 β β β β β
β 5 β β β β β
β 6 β β β β β
β 8 β β β β β
β 10 β β β β β
ββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββ΄βββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββ
PERTANYAAN ANALISIS:
1. Masalah mana yang bisa dicegah dengan constraint DDL?
[Jawaban:]
2. Constraint DDL apa yang spesifik mencegah masing-masing masalah di atas?
Masalah: ___________ β Constraint: ___________
Masalah: ___________ β Constraint: ___________
Masalah: ___________ β Constraint: ___________
3. Masalah mana yang TIDAK bisa dicegah dengan constraint DDL saja?
[Jawaban:]
4. Untuk masalah di nomor 3, di lapisan mana seharusnya ditangani?
β‘ Application layer (validasi form/API)
β‘ ETL/Ingestion pipeline
β‘ Proses manual/SOP
β‘ Data governance policy
Jelaskan: [Jawaban:]PENUTUP
Pertemuan 10 menandai selesainya pembahasan tentang model data operasional (OLTP) secara komprehensif β dari konseptual (pertemuan 3β4), logikal (5β7), fisik (9), hingga kini: kualitas dan tata kelola (10).
Key Messages Pertemuan 10:
-
Database "valid secara teknis" β data berkualitas β Constraint DDL adalah lapisan pertama, bukan satu-satunya. Data bisa lolos semua constraint tapi tetap salah secara bisnis ("test", tgl_lahir di masa depan, format tidak konsisten)
-
Kualitas data adalah tanggung jawab bersama β bukan hanya DBA atau developer. Data owner, steward, aplikasi developer, dan pengguna akhir semuanya berperan dalam menjaga kualitas data
-
Data dictionary adalah "kontrak" antar tim β tanpa dokumentasi yang jelas, setiap orang menginterpretasikan data secara berbeda, dan analisis yang dihasilkan pun berbeda
-
Data governance adalah sistem, bukan proyek satu kali β governance perlu dirawat, diperbarui, dan dievaluasi secara berkelanjutan seiring berkembangnya sistem
-
Investasi di kualitas data di hulu jauh lebih murah daripada membersihkan data di hilir saat pipeline analitik sudah jalan β ini adalah argumen terkuat untuk data modelling yang baik sejak awal
Koneksi ke Proyek Semester: Data dictionary yang disusun di pertemuan ini adalah komponen wajib dalam laporan proyek akhir kelompok (pertemuan 15). Kerjakan dengan serius karena ini menjadi dokumentasi resmi sistem yang akan dinilai secara keseluruhan.
Transisi ke Babak Kedua: Mulai pertemuan 11, kita memasuki babak baru: Analytical Modelling β bagaimana data dari sistem OLTP yang sudah kita rancang diolah untuk mendukung pengambilan keputusan berbasis data dalam skala besar.
Disusun oleh: Mohammad Reza Maulana, M.Kom Program Studi Sains Data Fakultas Ekonomi dan Bisnis Islam UIN K.H. Abdurrahman Wahid Pekalongan
Revisi: Februari 2026