Desain Relasi Tabel Database Akademik


Bismillaahirrohmaanirrohiim. Bila aplikasi diibaratkan seperti sebuah hunian, maka database merupakan salah satu pondasinya. Pembuatan aplikasi yang melibatkan database, sebaiknya tidak main-main dalam mendesain relasi tabel databasenya, salah-salah dalam mendesain relasi tabelnya, maka aplikasi kemungkinan besar akan menghasilkan output redundant. Tulisan kali ini akan saya bagikan cara mendesain relasi tabel pada sistem akademik.

Intro

Sistem akademik merupakan salah satu sistem yang ada pada perguruan tinggi. Salah satu output yang dihasilkan ialah pencetakan Kartu Hasil Studi mahasiswa, yaitu sebuah lembaran nilai mahasiswa yang didapatkannya selama satu semester.

Salah satu contoh KHS yang saya dapatkan dari salah satu hasil pencarian Google adalah sebagai berikut:

Contoh Kartu Hasil Studi (KHS) Mahasiswa

KHS diatas yang apabila “diterjemahkan” ke dalam sebuah database relasional (RDMS) MySQL misalnya, maka akan terdiri dari beberapa tabel yang saling berelasi. Nah, disinilah tugas utama kita bagaimana membuat relasi tabel database akademik agar data yang tersimpan pada database dapat ditampilkan sebagai informasi yang benar.

Ketergantungan Fungsional

Saya mengasumsikan bahwa kita telah memiliki beberapa data berikut ini sebagai contoh laporan yang diinput oleh bagian Akademik tentang nilai akhir mahasiswa. Contoh berikut ini sangat sederhana, faktanya bisa saja lebih kompleks dari ini.

Contoh laporan nilai yang diinput oleh bagian Akademik

Dari contoh diatas, kita akan menentukan ketergantungan fungsional, yaitu menentukan kolom-kolom yang memiliki ketergantungan pada kolom lain. Dapat dilihat bahwa kolom nama mahasiswa bergantung pada kolom nim, ditandai dengan tidak adanya nama yang berbeda untuk nim yang sama. Atau dapat pula dikatakan bahwa, jika nim nya 1921001 maka nama_mahasiswanya ialah ADI TRIADI, tidak ada yang lain. Begitu juga untuk nim 1921002, nama mahasiswanya hanya BUDI LAKSONO, dan seterusnya. Jadi dapat ditulis bahwa nim -> nama_mahasiswa sebagai ketergantungan fungsional yang pertama.

Kita tidak dapat mengatakan bahwa kode_matakuliah bergantung kepada kolom nim, karena untuk nim 1921001 kode matakuliahnya bukan hanya M1001, tetapi juga M1002.

Kita dapat mengetahui bahwa kode matakuliah M1001 nama matakuliahnya ialah BAHASA INDONESIA dan SKSnya 2. Kode M1001 juga hanya disajikan pada semester 1 saja. Sehingga ketergantungan fungsional kedua ialah nama_matakuliah, sks dan semester bergantung pada kolom kode_matakuliah. Atau dapat ditulis kode_matakuliah -> nama_matakuliah, sks, semester.

Tinggal 1 kolom lagi yang tersisa, yaitu kolom nilai. Kolom ini bukan bergantung pada kolom nim, karena untuk nim yang sama (misal: 1921001), data nilainya bisa berbeda-beda (yaitu 85 dan 87). Kolom nilai juga bukan bergantung pada kolom kode_matakuliah, karena untuk kode M1001, data nilainya ada yang 85, 76 dan 80.

Jadi, kolom nilai ini sebenarnya bergantung pada dua kolom yaitu nim dan kode_matakuliah. Sehingga dapat ditulis nim, kode_matakuliah -> nilai.

Akhirnya kita telah menentukan ketergantungan fungsional dari contoh laporan nilai akhir mahasiswa dan didapat ada 3 ketergantungan fungsional, yaitu:

nim -> nama_mahasiswa

kode_matakuliah -> nama_matakuliah, sks, semester

nim, kode_matakuliah -> nilai

Dari ketiga ketergantungan fungsional tersebut, kita dapat menentukan nama himpunan entitasnya (nama tabelnya), masing-masing yaitu: tabel mahasiswa, tabel matakuliah dan tabel nilai.

Tabel mahasiswa, nilai dan matakuliah

Struktur Tabel

Penentuan struktur tabel ini berguna supaya data yang diinputkan ke dalam tabel dapat disimpan dengan baik tanpa ada data yang truncated. Yang perlu diperhatikan ialah jenis data dan panjang datanya.

Tabel mahasiswa terdiri dari 2 kolom yang masing-masing kolomnya, nim varchar (7), nama_mahasiswa varchar(15). Dimana varchar adalah jenis data yang akan ditampung pada kolom nim ataupun kolom nama_mahasiswa. Sedangkan nilai (7) dan (15) merupakan panjang datanya.

Tabel nilai terdiri dari 3 kolom yang masing-masing kolomnya, nim varchar(7), kode_matakuliah varchar(5), nilai int(2). Sedangkan tabel matakuliah, masing-masing kolomnya memiliki struktur kode_matakuliah varchar(5), nama_matakuliah varchar(20), sks int(1). Disini kita tidak perlu menuliskan kolom semesternya, karena pada hakikatnya nilai semester didapat dari digit kedua pada kode_matakuliah.

Pembuatan Database dan Tabel

Setelah struktur tabel telah selesai dibuat, selanjutnya bagian implementasi pada Relational Database Management System (DBMS), disini saya menggunakan MySQL. Berikut adalah proses pembuatan database dan ketiga tabel.

CREATE TABLE `mahasiswa` (
  `nim` varchar(7) NOT NULL,
  `nama_mahasiswa` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`nim`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `matakuliah` (
  `kode_matakuliah` varchar(5) NOT NULL,
  `nama_matakuliah` varchar(20) DEFAULT NULL,
  `sks` int(1) DEFAULT NULL,
  PRIMARY KEY (`kode_matakuliah`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE `nilai` (
  `nim` varchar(7) DEFAULT NULL,
  `kode_matakuliah` varchar(5) DEFAULT NULL,
  `nilai` int(2) DEFAULT NULL,
  PRIMARY KEY (`nim`, `kode_matakuliah`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Memasukkan Data kedalam Masing-masing Tabel

Untuk memasukkan data kedalam masing-masing tabel, kita gunakan perintah DML INSERT, yaitu:

INSERT INTO `mahasiswa` VALUES
('1921001', 'ADI TRIADI'),
('1921002', 'BUDI LAKSONO'),
('1921003', 'CINDY PUTRI');


INSERT INTO `matakuliah` VALUES
('M1001', 'BAHASA INDONESIA', 2),
('M1002', 'ETIKA PROFESI', 2),
('M3001', 'KALKULUS I', 2);


INSERT INTO `nilai` VALUES
('1921001', 'M1001', 85),
('1921001', 'M1002', 87),
('1921002', 'M1002', 85),
('1921003', 'M3001', 76),
('1921002', 'M3001', 80);

Nah, sampai tahapan ini kita telah berhasil menentukan ketergantungan fungsional, membuat tabel dan memasukkan data-datanya kedalam tabel pada database.

Uji Coba (Menampilkan Keseluruhan Data)

Untuk menguji coba apakah proses pencarian ketergantungan fungsional telah benar-benar dapat menghasilkan data yang sama dengan data aslinya, maka disini kita akan melakukan pegujian dengan cara menampilkan keseluruhan data dari ketiga tabel dengan perintah DML SELECT sebagai berikut:

SELECT mahasiswa.nim, nama_mahasiswa, matakuliah.kodatakuliah, sks, mid(matakuliah.kode_matakuliah, 2, 1) as semester, nilai 
FROM mahasiswa 
JOIN nilai on mahasiswa.nim = nilai.nim 
JOIN matakuliah on nilai.kode_matakuliah = matakuliah.kode_matakuliah;

Output dari perintah DML SELECT diatas adalah seperti pada gambar berikut dan memiliki hasil yang sama dengan laporan akhir nilai mahasiswa yang diinput oleh Akademik.

Output perintah SELECT pada ketiga tabel (mahasiswa, nilai dan matakuliah)

Demikianlah tahapan-tahapan dalam mendesain database akademik menggunakan Relational Database Management System (DBMS) MySQL dimulai dengan menentukan ketergantungan fungsional, pembuatan struktur tabel, perintah DDL hingga perintah DML INSERT dan SELECT. Semoga bermanfaat šŸ™‚

Tinggalkan Komentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.