Dalam pengembangan aplikasi berbasis data, perancangan database yang baik sangat penting untuk memastikan data tersimpan dengan efisien dan dapat diakses dengan mudah. Artikel ini akan menjelaskan rancangan Entity-Relationship Diagram (ERD) dan Enhanced Entity-Relationship Diagram (EERD) dari aplikasi yang telah dibuat, termasuk penjelasan relasi antar entitas dan metode normalisasi yang digunakan untuk mengoptimalkan struktur database. Selain itu, artikel ini juga akan membahas implementasi CRUD menggunakan file PHP.
Entity-Relationship Diagram (ERD)
ERD adalah representasi grafis dari struktur database yang menunjukkan entitas, atribut, dan relasi antar entitas. Berikut adalah ERD dari aplikasi yang telah dibuat:
Penjelasan Entitas dan Atribut
1. Tabel Lecturer
- id_lecturer (Primary Key): ID unik untuk setiap dosen.
- name: Nama dosen.
Relasi:
- Tabel Lecturer berhubungan dengan tabel Absensi Dosen melalui id_lecturer sebagai foreign key. Setiap dosen bisa memiliki banyak catatan absensi.
2. Tabel Mata Kuliah
- id_matkul (Primary Key): ID unik untuk setiap mata kuliah.
- nama: Nama mata kuliah.
- SKS: Jumlah jam kuliah.
Relasi:
- Tabel Mata Kuliah berhubungan dengan tabel Absensi Dosen melalui id_matkul sebagai foreign key. Setiap mata kuliah bisa memiliki banyak catatan absensi dari berbagai dosen.
3. Tabel Absensi Dosen
- id_absensi (Primary Key): ID unik untuk setiap catatan absensi.
- id_matkul (Foreign Key): Mengacu pada id_matkul di tabel Mata Kuliah.
- id_lecturer (Foreign Key): Mengacu pada id_lecturer di tabel Lecturer.
- status: Status absensi dosen (misalnya hadir atau tidak hadir).
tanggal: Tanggal absensi dilakukan.
Relasi:
- Tabel Absensi Dosen berfungsi sebagai entitas penghubung untuk menyelesaikan hubungan Many-to-Many antara Mata Kuliah dan Lecturer.
- Mata Kuliah dan Lecturer masing-masing memiliki relasi One-to-Many dengan Absensi Dosen. Artinya, satu mata kuliah bisa memiliki banyak catatan absensi (yang berhubungan dengan beberapa dosen), dan satu dosen bisa memiliki banyak catatan absensi (untuk beberapa mata kuliah).
4. Tabel User
- id_user (Primary Key): ID unik untuk setiap pengguna.
- username: Nama pengguna.
- password: Kata sandi pengguna.
- id_lecturer (Foreign Key): Mengacu pada id_lecturer di tabel Lecturer untuk menunjukkan dosen yang berhubungan dengan pengguna ini.
Relasi:
- Tabel User berhubungan dengan Lecturer melalui id_lecturer sebagai foreign key. Relasi ini mungkin mengindikasikan bahwa pengguna tertentu terhubung atau terkait dengan dosen yang lebih besar, misalnya sebagai asisten dosen atau mahasiswa yang mengikuti kuliah dosen tersebut.
5. Tabel Blog
- id_blog (Primary Key): ID unik untuk setiap blog.
- title: Judul blog.
- content: Isi blog.
- id_lecturer (Foreign Key): Mengacu pada id_lecturer di tabel Lecturer untuk mengetahui dosen yang menulis blog.
- id_user (Foreign Key): Mengacu pada id_user di tabel User untuk mengetahui pengguna yang membuat blog.
Relasi:
- Blog berhubungan dengan Lecturer melalui id_lecturer untuk menunjukkan siapa dosen yang menulis blog tersebut.
Blog juga berhubungan dengan User melalui id_user untuk mengetahui siapa pengguna yang membuat blog tersebut. Relasi ini bisa berarti blog ini ditulis oleh mahasiswa atau dosen yang juga sebagai pengguna di sistem.
Relasi Antar Tabel Secara Keseluruhan:
Lecturer dan Absensi Dosen:
- Relasi One-to-Many: Satu dosen dapat memiliki banyak catatan absensi. id_lecturer di Absensi Dosen mengacu pada id_lecturer di Lecturer.
Mata Kuliah dan Absensi Dosen:
- Relasi One-to-Many: Satu mata kuliah bisa memiliki banyak catatan absensi untuk setiap dosen yang mengajarnya. id_matkul di Absensi Dosen mengacu pada id_matkul di Mata Kuliah.
Lecturer dan User:
- Relasi Many-to-One: Banyak pengguna (mahasiswa atau admin) bisa terkait dengan satu dosen. id_lecturer di User mengacu pada id_lecturer di Lecturer.
Lecturer dan Blog:
- Relasi One-to-Many: Satu dosen dapat menulis banyak blog. id_lecturer di Blog mengacu pada id_lecturer di Lecturer.
User dan Blog:
- Relasi Many-to-One: Banyak blog dapat ditulis oleh satu pengguna. id_user di Blog mengacu pada id_user di User.
Mata Kuliah dan Lecturer (Many-to-Many):
- Absensi Dosen menjadi entitas penghubung yang menyelesaikan relasi Many-to-Many antara Mata Kuliah dan Lecturer. Tabel Absensi Dosen menghubungkan Lecturer dengan Mata Kuliah untuk mencatat absensi dosen pada mata kuliah tertentu di tanggal tertentu.
Enhanced Entity-Relationship Diagram (EERD)
EERD adalah pengembangan dari ERD yang mencakup konsep-konsep tambahan seperti generalisasi, spesialisasi, dan agregasi. Berikut adalah EERD dari aplikasi yang telah dibuat:
Berdasarkan penjelasan sebelumnya tentang relasi antar tabel dalam sistem, berikut adalah Rancangan EERD (Enhanced Entity Relationship Diagram) untuk menggambarkan hubungan antar entitas secara visual, serta penjelasan rinci mengenai masing-masing entitas dan relasinya.
Entitas dan Atribut
Lecturer
- id_lecturer: ID unik untuk setiap dosen (Primary Key).
- name: Nama dosen.
Relasi:
- Satu Lecturer dapat memiliki banyak Absensi Dosen (One-to-Many).
- Satu Lecturer dapat memiliki banyak Blog (One-to-Many).
- Banyak User dapat terhubung dengan satu Lecturer (Many-to-One).
Absensi Dosen
- id_absensi: ID unik untuk setiap catatan absensi (Primary Key).
- id_matkul: ID mata kuliah yang diabsensikan (Foreign Key, referensi ke Mata Kuliah).
- id_lecturer: ID dosen yang mengajar (Foreign Key, referensi ke Lecturer).
- status: Status absensi (Hadir, Tidak Hadir).
- tanggal: Tanggal absensi dilakukan.
Relasi:
- Absensi Dosen menghubungkan Lecturer dan Mata Kuliah dalam hubungan Many-to-Many. Entitas ini menjadi penghubung antara Mata Kuliah dan Lecturer.
Mata Kuliah
- id_matkul: ID unik untuk setiap mata kuliah (Primary Key).
- nama: Nama mata kuliah.
- SKS: Jumlah SKS (jam kuliah).
Relasi:
- Satu Mata Kuliah dapat memiliki banyak Absensi Dosen (One-to-Many), yang menghubungkan banyak Lecturer yang mengajar mata kuliah tersebut.
User
- id_user: ID unik untuk setiap pengguna (Primary Key).
- username: Nama pengguna.
- password: Kata sandi pengguna.
- id_lecturer: ID dosen terkait dengan pengguna tersebut (Foreign Key, referensi ke Lecturer).
Relasi:
- Banyak User dapat terhubung dengan satu Lecturer (Many-to-One).
Blog
- id_blog: ID unik untuk setiap blog (Primary Key).
- title: Judul blog.
- content: Isi blog.
- id_lecturer: ID dosen yang menulis blog tersebut (Foreign Key, referensi ke Lecturer).
- id_user: ID pengguna yang membuat blog tersebut (Foreign Key, referensi ke User).
Relasi:
- Satu Lecturer dapat memiliki banyak Blog (One-to-Many).
- Satu User dapat membuat banyak Blog (One-to-Many).
Relasi Antar Entitas:
Lecturer Absensi Dosen:
- Hubungan One-to-Many: Satu dosen dapat memiliki banyak catatan absensi.
- Relasi ini menggambarkan bahwa satu dosen bisa mengajar banyak mata kuliah pada waktu yang berbeda-beda.
Mata Kuliah Absensi Dosen:
- Hubungan One-to-Many: Satu mata kuliah bisa memiliki banyak catatan absensi.
- Relasi ini menggambarkan bahwa satu mata kuliah bisa memiliki banyak dosen yang mengajarnya pada tanggal yang berbeda-beda.
Lecturer Blog:
- Hubungan One-to-Many: Satu dosen bisa menulis banyak blog.
- Relasi ini menggambarkan bahwa satu dosen bisa membuat beberapa blog di platform yang ada.
User Blog:
- Hubungan One-to-Many: Satu pengguna bisa membuat banyak blog.
- Relasi ini menggambarkan bahwa satu pengguna (misalnya mahasiswa) bisa membuat banyak blog.
Lecturer User:
- Hubungan Many-to-One: Banyak pengguna bisa terhubung dengan satu dosen.
- Relasi ini menggambarkan bahwa banyak mahasiswa atau pengguna bisa terhubung dengan satu dosen yang menjadi mentor atau pengajar mereka.
Rancangan EERD (Enhanced Entity Relationship Diagram)
Berikut adalah gambaran tentang bagaimana relasi-relasi tersebut akan digambarkan dalam diagram EERD:
- Lecturer memiliki relasi One-to-Many dengan Absensi Dosen dan Blog.
- Mata Kuliah memiliki relasi One-to-Many dengan Absensi Dosen.
- Absensi Dosen menjadi penghubung antara Lecturer dan Mata Kuliah, dengan relasi Many-to-Many antara keduanya.
- User memiliki relasi Many-to-One dengan Lecturer, dan relasi One-to-Many dengan Blog.
Visualisasi EERD
- Lecturer Absensi Dosen (One-to-Many)
- Mata Kuliah Absensi Dosen (One-to-Many)
- Lecturer Blog (One-to-Many)
- User Blog (One-to-Many)
- User Lecturer (Many-to-One)
Untuk membuat EERD, kita menggambar entitas Lecturer, Mata Kuliah, Absensi Dosen, User, dan Blog dengan simbol yang sesuai, dan menghubungkan entitas-entitas tersebut dengan garis untuk menunjukkan relasi antar entitas. Setiap garis relasi diberi label yang menjelaskan kardinalitas (One-to-Many atau Many-to-One), serta tanda panah untuk menunjukkan arah relasi.
Implementasi CRUD Menggunakan PHP
CRUD adalah singkatan dari Create, Read, Update, dan Delete, yang merupakan operasi dasar untuk mengelola data dalam database. Berikut adalah langkah-langkah implementasi CRUD menggunakan file PHP:
1. Menyiapkan Struktur DirektoriÂ
Struktur direktori proyek PHP dapat dibuat dengan folder-folder berikut:
/project
  /css
  /js
  /includes
  /templates
  index.php
Ini memisahkan file berdasarkan fungsinya, seperti folder includes untuk file koneksi dan fungsi, folder css untuk styling, folder js untuk JavaScript, dan templates untuk template halaman.
2. Membuat Koneksi Database
File db.php di folder includes digunakan untuk mengatur koneksi ke database dengan kode PHP berikut:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "nama_database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
?>
3. Membuat Fungsi CRUD
File functions.php di folder includes mengatur fungsi CRUD (Create, Read, Update, Delete). Berikut adalah kode untuk masing-masing fungsi:
- Create:
 function createData($table, $data) {
  global $conn;
  $columns = implode(", ", array_keys($data));
  $values = implode("', '", array_values($data));
  $sql = "INSERT INTO $table ($columns) VALUES ('$values')";
  return $conn->query($sql);
}
- Read:
function readData($table, $conditions = []) {
  global $conn;
  $sql = "SELECT * FROM $table";
  if (!empty($conditions)) {
    $sql .= " WHERE " . implode(" AND ", $conditions);
  }
  return $conn->query($sql);
}
- Update:
function updateData($table, $data, $conditions) {
  global $conn;
  $set = [];
  foreach ($data as $column => $value) {
    $set[] = "$column='$value'";
  }
  $sql = "UPDATE $table SET " . implode(", ", $set) . " WHERE " . implode(" AND ", $conditions);
  return $conn->query($sql);
}
- Delete:
function deleteData($table, $conditions) {
  global $conn;
  $sql = "DELETE FROM $table WHERE " . implode(" AND ", $conditions);
  return $conn->query($sql);
}
4. Menggunakan Fungsi CRUD di Halaman Utama
Pada index.php, Anda bisa menggunakan fungsi CRUD yang telah dibuat, seperti contoh berikut:
<?php
include 'includes/functions.php';
// Contoh penggunaan fungsi CRUD
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
  if (isset($_POST['create'])) {
    $data = [
      'name' => $_POST['name'],
      'status' => $_POST['status']
    ];
    createData('lecturer', $data);
  } elseif (isset($_POST['update'])) {
    $data = [
      'name' => $_POST['name'],
      'status' => $_POST['status']
    ];
    $conditions = ["id_lecturer=" . $_POST['id_lecturer']];
    updateData('lecturer', $data, $conditions);
  } elseif (isset($_POST['delete'])) {
    $conditions = ["id_lecturer=" . $_POST['id_lecturer']];
    deleteData('lecturer', $conditions);
  }
}
$lecturers = readData('lecturer');
?>
5. Membuat Form dan Menampilkan Data
Di dalam index.php, form digunakan untuk input data baru atau mengupdate data, serta menampilkan data dari tabel lecturer:
<form method="POST">
  <input type="text" name="name" placeholder="Name">
  <input type="text" name="status" placeholder="Status">
  <button type="submit" name="create">Create</button>
</form>
<table>
  <tr>
    <th>ID</th>
    <th>Name</th>
    <th>Status</th>
    <th>Actions</th>
  </tr>
  <?php while ($row = $lecturers->fetch_assoc()): ?>
  <tr>
    <td><?= $row['id_lecturer'] ?></td>
    <td><?= $row['name'] ?></td>
    <td><?= $row['status'] ?></td>
    <td>
      <form method="POST">
        <input type="hidden" name="id_lecturer" value="<?= $row['id_lecturer'] ?>">
        <input type="text" name="name" value="<?= $row['name'] ?>">
        <input type="text" name="status" value="<?= $row['status'] ?>">
        <button type="submit" name="update">Update</button>
        <button type="submit" name="delete">Delete</button>
      </form>
    </td>
  </tr>
  <?php endwhile; ?>
</table>
6. Menjalankan Aplikasi
Untuk menjalankan aplikasi PHP, buka terminal dan jalankan server lokal:
cd nama_folder
php -S localhost:8080
Kemudian buka browser dan akses aplikasi di http://localhost:8080.
Kesimpulan
Dengan langkah-langkah di atas, Anda dapat membuat aplikasi CRUD menggunakan PHP dengan fitur lengkap untuk Create, Read, Update, dan Delete data dari database. Fungsi CRUD yang sederhana memungkinkan Anda untuk mengelola data lecturer dengan efisien.
untuk bisa melihat tutorial lebih lanjut, anda dapat menonton vidio berikut :
Baca konten-konten menarik Kompasiana langsung dari smartphone kamu. Follow channel WhatsApp Kompasiana sekarang di sini: https://whatsapp.com/channel/0029VaYjYaL4Spk7WflFYJ2H