Skema Tabel Database OBE: DDL SQL Siap Pakai untuk SIAKAD
Dari ERD yang sudah kamu rancang, kini saatnya "diterjemahkan" ke dalam kode SQL nyata. Artikel ini menyajikan DDL SQL OBE yang siap kamu eksekusi langsung di database SIAKAD-mu.
⏱️
Estimasi Baca
12 Menit
🎯
Level
Pemula–Menengah
🗓️
Tahun
2025–2026
🏗️
Fase
Fase 4 — Digitalisasi
Sudah punya ERD yang keren, tapi bingung cara "menuangkannya" ke dalam database sungguhan? Kamu tidak sendirian. Banyak dosen dan staf IT kampus yang mahir menggambar diagram — tapi begitu harus menulis DDL SQL OBE, tiba-tiba mendadak blank. Padahal, inilah momen krusial di Fase 4 Digitalisasi kurikulum OBE: saat konsep berubah menjadi kode yang bisa langsung dieksekusi di SIAKAD. Artikel ke-18 dari seri OBE From Zero to Zorro ini akan membantumu memahami skema database SIAKAD OBE lengkap dengan skrip CREATE TABLE, foreign key, dan relasi antar entitas — semuanya siap pakai, tinggal sesuaikan nama institusimu.
📐 Konsep Utama
DDL SQL OBE (Data Definition Language) adalah sekumpulan perintah SQL — utamanya CREATE TABLE, ALTER TABLE, dan DROP TABLE — yang digunakan untuk mendefinisikan struktur tabel database kurikulum OBE, termasuk atribut, tipe data, primary key, dan foreign key yang menghubungkan CPL, CPMK, mata kuliah, mahasiswa, hingga nilai evaluasi.
🧱 Kenapa DDL SQL OBE Itu Penting dan Tidak Bisa Asal Dibuat?
Bayangkan kamu mau membangun rumah. ERD adalah denah arsitektur-nya — gambar di atas kertas yang menunjukkan berapa kamar, di mana dapur, dan bagaimana alirannya. Tapi DDL SQL adalah perintah ke tukang bangunan: "Bangun dinding di sini, pasang pintu di sana, sambungkan dengan koridor itu." Tanpa DDL yang benar, rumah kamu bisa roboh — atau lebih tepatnya, data OBE kamu bisa kacau balau.
Dalam konteks SIAKAD berbasis OBE, DDL SQL yang buruk bisa menyebabkan:
⚠️ DDL Asal-asalan
✅ DDL yang Terstruktur
Data CPL dan CPMK tidak terhubung → attainment tidak bisa dihitung
Foreign key memastikan relasi CPL–CPMK selalu valid
Duplikasi data mahasiswa dan nilai di banyak tabel
Normalisasi tabel menjamin data efisien dan konsisten
Query lambat karena tidak ada indeks pada kolom kritis
INDEX pada FK mempercepat join query laporan akreditasi
Kolom varchar terlalu pendek → data terpotong saat input
Tipe data presisi menghindari overflow dan error input
🔥 Fakta Menarik
Berdasarkan pengalaman implementasi SIAKAD OBE di beberapa PTS Indonesia, lebih dari 60% bug pada sistem pelaporan CPL bersumber dari skema database yang tidak menerapkan foreign key constraint. Akibatnya, data nilai ada tapi tidak bisa di-trace ke CPL mana — laporan akreditasi pun jadi manual kembali.
🗺️ Peta Tabel Skema Database SIAKAD OBE: Siapa Berhubungan dengan Siapa?
Sebelum menulis satu baris DDL SQL OBE pun, kamu perlu memahami peta besar tabel-tabelnya. Ibarat navigasi Google Maps — kalau kamu tahu semua persimpangannya, kamu tidak akan nyasar saat coding. Skema database OBE minimal terdiri dari 8 tabel inti yang saling terhubung:
┌──────────────────────────────────────────────────────────────┐│PETA RELASI TABEL SIAKAD OBE│└──────────────────────────────────────────────────────────────┘[prodi] ──────────── memiliki ────────────── [cpl]
│ │
│ dipetakan ke
│ │
memiliki [cpmk]
│ │
▼ dimiliki oleh
[mata_kuliah] ──── memiliki ──────────── [penilaian]
│ │
diikuti oleh mengukur
│ │
[mahasiswa][nilai_mahasiswa]
│ │
└─────────── mempunyai ───────────────────── ┘
⚡ Daftar 8 Tabel Inti Database OBE
prodi Program studi
cpl Capaian Pembelajaran Lulusan
cpmk Capaian Per Mata Kuliah
mata_kuliah Mata kuliah prodi
mahasiswa Data mahasiswa
penilaian Komponen & bobot penilaian
nilai_mahasiswa Nilai per penilaian per mahasiswa
pemetaan_cpl_cpmk Tabel pivot relasi CPL–CPMK
💻 DDL SQL OBE Lengkap: Skrip CREATE TABLE Siap Pakai
Berikut adalah skrip DDL SQL OBE yang bisa langsung kamu eksekusi. Skrip ini ditulis dengan MySQL/MariaDB (paling umum dipakai SIAKAD Indonesia), namun logikanya berlaku di PostgreSQL dengan penyesuaian kecil. Mari kita bangun satu per satu!
Gunakan UNSIGNED pada kolom ID integer agar kapasitas penyimpanan dua kali lipat (0 s/d ~4 miliar). Ini penting untuk SIAKAD dengan data mahasiswa puluhan ribu. Jangan lupa tambahkan ENGINE=InnoDB agar foreign key constraint aktif — MyISAM tidak mendukung FK!
2
Tabel mata_kuliah, cpmk, dan Tabel Pivot pemetaan_cpl_cpmk
-- ================================================-- TABEL 3: mata_kuliah-- ================================================CREATE TABLEmata_kuliah (
id_mk INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_prodi INTUNSIGNED NOT NULL,
kode_mk VARCHAR(20) NOT NULL UNIQUE,
nama_mk VARCHAR(200) NOT NULL,
sks TINYINTUNSIGNED NOT NULL DEFAULT 3,
semester TINYINTUNSIGNED NOT NULL,
CONSTRAINTfk_mk_prodiFOREIGN KEY (id_prodi) REFERENCESprodi(id_prodi)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ================================================-- TABEL 4: cpmk (Capaian Per Mata Kuliah)-- ================================================CREATE TABLEcpmk (
id_cpmk INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_mk INTUNSIGNED NOT NULL,
kode_cpmk VARCHAR(20) NOT NULL,
deskripsi_cpmk TEXTNOT NULL,
bobot_cpmk DECIMAL(5,2) NOT NULL DEFAULT 100.00,
CONSTRAINTfk_cpmk_mkFOREIGN KEY (id_mk) REFERENCESmata_kuliah(id_mk)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ================================================-- TABEL 5: pemetaan_cpl_cpmk (Tabel Pivot)-- ================================================CREATE TABLEpemetaan_cpl_cpmk (
id_pemetaan INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_cpl INTUNSIGNED NOT NULL,
id_cpmk INTUNSIGNED NOT NULL,
CONSTRAINTfk_pemetaan_cplFOREIGN KEY (id_cpl) REFERENCEScpl(id_cpl)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINTfk_pemetaan_cpmkFOREIGN KEY (id_cpmk) REFERENCEScpmk(id_cpmk)
ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE KEYuq_cpl_cpmk (id_cpl, id_cpmk)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3
Tabel mahasiswa, penilaian, dan nilai_mahasiswa
-- ================================================-- TABEL 6: mahasiswa-- ================================================CREATE TABLEmahasiswa (
id_mahasiswa INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_prodi INTUNSIGNED NOT NULL,
nim VARCHAR(20) NOT NULL UNIQUE,
nama VARCHAR(200) NOT NULL,
angkatan YEARNOT NULL,
email VARCHAR(150) NULL,
CONSTRAINTfk_mhs_prodiFOREIGN KEY (id_prodi) REFERENCESprodi(id_prodi)
ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ================================================-- TABEL 7: penilaian (Komponen Evaluasi)-- ================================================CREATE TABLEpenilaian (
id_penilaian INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_cpmk INTUNSIGNED NOT NULL,
nama_penilaian VARCHAR(150) NOT NULL,
jenis ENUM('UTS','UAS','Tugas','Proyek','Quiz','Praktikum') NOT NULL,
bobot_penilaian DECIMAL(5,2) NOT NULL,
tahun_akademik VARCHAR(12) NOT NULL,
CONSTRAINTfk_penilaian_cpmkFOREIGN KEY (id_cpmk) REFERENCEScpmk(id_cpmk)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ================================================-- TABEL 8: nilai_mahasiswa (Tabel Transaksi Utama)-- ================================================CREATE TABLEnilai_mahasiswa (
id_nilai INTUNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_mahasiswa INTUNSIGNED NOT NULL,
id_penilaian INTUNSIGNED NOT NULL,
nilai DECIMAL(5,2) NOT NULL,
catatan VARCHAR(255) NULL,
created_at TIMESTAMPDEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPDEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINTfk_nilai_mhsFOREIGN KEY (id_mahasiswa) REFERENCESmahasiswa(id_mahasiswa)
ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINTfk_nilai_penilaianFOREIGN KEY (id_penilaian) REFERENCESpenilaian(id_penilaian)
ON DELETE RESTRICT ON UPDATE CASCADE,
UNIQUE KEYuq_nilai_mhs_penilaian (id_mahasiswa, id_penilaian)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
⚠️ Perhatian Penting
Urutan eksekusi CREATE TABLE sangat penting! Tabel yang dirujuk oleh foreign key harus dibuat lebih dulu. Urutan yang benar: prodi → cpl → mata_kuliah → cpmk → pemetaan_cpl_cpmk → mahasiswa → penilaian → nilai_mahasiswa. Salah urutan = error FK constraint.
🔗 Best Practice Foreign Key OBE: ON DELETE dan ON UPDATE
Salah satu keputusan terpenting dalam skema database SIAKAD OBE adalah menentukan strategi ON DELETE dan ON UPDATE untuk setiap foreign key. Ini seperti aturan "kalau bapaknya pindah rumah, anak-anaknya ikut atau tidak?"
Aksi FK
Penjelasan
Kapan Digunakan di OBE
CASCADE
Data anak ikut terhapus/diupdate
CPL dihapus → CPMK & pemetaannya ikut terhapus
RESTRICT
Error jika ada data anak → tidak bisa dihapus
Nilai mahasiswa tidak bisa dihapus selama mahasiswa aktif
SET NULL
FK di anak di-set NULL saat parent dihapus
Jarang dipakai di OBE karena data nilai tidak boleh NULL
NO ACTION
Default — mirip RESTRICT di MySQL
Gunakan hanya jika yakin tidak ada cascade yang dibutuhkan
⚡ Insight Penting
Dalam DDL SQL OBE untuk SIAKAD, gunakan CASCADE untuk data kurikulum (CPL, CPMK, pemetaan) karena bersifat hierarkis — jika prodi dihapus, wajar semua data turunannya ikut terhapus. Tapi gunakan RESTRICT untuk data transaksi (nilai mahasiswa) — kamu tidak mau data nilai terhapus hanya karena ada kesalahan penghapusan komponen penilaian.
⚙️ Optimasi Indeks: Agar Query Laporan CPL Tidak Lemot
Skema database SIAKAD OBE yang baik tidak cukup hanya dengan foreign key. Kamu juga perlu indeks yang tepat agar query laporan attainment CPL — yang biasanya melibatkan JOIN 4–5 tabel sekaligus — bisa berjalan dalam hitungan milidetik, bukan menit.
-- ================================================-- TAMBAHKAN INDEX SETELAH CREATE TABLE-- ================================================-- Percepat pencarian nilai berdasarkan tahun akademikCREATE INDEXidx_penilaian_tahunONpenilaian (tahun_akademik);
-- Percepat JOIN nilai per mahasiswaCREATE INDEXidx_nilai_mahasiswaONnilai_mahasiswa (id_mahasiswa);
-- Percepat JOIN nilai per komponen penilaianCREATE INDEXidx_nilai_penilaianONnilai_mahasiswa (id_penilaian);
-- Percepat filter mahasiswa per angkatanCREATE INDEXidx_mahasiswa_angkatanONmahasiswa (angkatan);
💡 Tips Pro
MySQL otomatis membuat indeks pada kolom PRIMARY KEY dan UNIQUE KEY. Tapi kolom foreign key tidak otomatis diindeks — kamu harus menambahkannya manual dengan CREATE INDEX. Ini sangat berpengaruh saat query JOIN antara nilai_mahasiswa dan penilaian untuk laporan CPL ribuan mahasiswa.
📚 Bagian dari Seri
Seri Kurikulum OBE: OBE from Zero to Zorro
20 Artikel komprehensif dari konsep dasar hingga digitalisasi penuh SIAKAD OBE
DDL SQL OBE Bukan Sekadar Kode — Ini Fondasi Digital Kurikulum Kamu
Kita sudah membahas tuntas bagaimana membangun skema database SIAKAD OBE yang solid dari nol. Mulai dari memahami mengapa DDL SQL OBE tidak boleh asal dibuat, memetakan 8 tabel inti dan relasinya, hingga skrip CREATE TABLE lengkap dengan foreign key yang siap dieksekusi.
Poin-poin krusial yang wajib kamu ingat: gunakan InnoDB agar FK aktif, perhatikan urutan eksekusi tabel, pilih strategi CASCADE vs RESTRICT dengan bijak, dan jangan lupa tambahkan indeks pada kolom FK untuk performa query. Dengan skema yang benar, laporan attainment CPL yang selama ini menjadi momok bisa dihitung otomatis oleh sistem.
Artikel ini adalah bagian ke-18 dari seri OBE From Zero to Zorro — dan perjalanan kita belum selesai. Di artikel selanjutnya, kita akan menulis query SQL untuk menghitung attainment CPL secara otomatis menggunakan data dari skema yang baru saja kita bangun ini. Stay tuned!
💬 Diskusi yuk! Apakah SIAKAD di kampusmu sudah menggunakan skema yang mirip ini? Atau kamu masih stuck di fase mana? Ceritakan pengalamanmu di kolom komentar di bawah — mungkin masalahmu sudah dialami orang lain dan ada solusinya!
Jika artikel ini bermanfaat, bagikan ke rekan dosen atau staf IT kampusmu yang sedang berjuang mengimplementasikan OBE. Satu share darimu bisa menghemat berminggu-minggu riset bagi orang lain! 🙏
saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux
No comments:
Post a Comment