Skip to main content

Command Palette

Search for a command to run...

Studi Kasus with CRUD

Updated
•7 min read•View as Markdown
  1. Buku Tamu Kelas

Konteks masalah

Kelas sering kedatangan tamu (orang tua, alumni, supplier ATK). Perlu catat siapa datang, keperluan, dan nomor kontak—supaya mudah ditindaklanjuti.

Alur utama

  1. Tamu datang → dicatat.

  2. Wali kelas melihat daftar tamu hari ini.

  3. Jika ada salah tulis → koreksi.

  4. Entri yang tidak valid → hapus.

ERD (single table)

Skema

Kita akan membuat table untuk buku_tamu

 CREATE TABLE buku_tamu (
tugas(# id BIGSERIAL PRIMARY KEY,
tugas(# tanggal DATE DEFAULT CURRENT_DATE,
tugas(# nama VARCHAR(120) NOT NULL,
tugas(# jenis_tamu VARCHAR(20), -- 'ortu' | 'alumni' | 'supplier' | 'lainnya'
tugas(# no_hp VARCHAR(20),
tugas(# keperluan TEXT,
tugas(# created_at TIMESTAMPZ DEFAULT now()
tugas(# );

disini kita mendapatkan error

ERROR:  tipe « timestampz » belum ada
LINE 8: created_at TIMESTAMPZ DEFAULT now()

Setelah dicari lamaaaa, ternyata salahnya karena kurang huruf ‘T’ pada kata ‘TIMESTAMPZ’

maka ketika kita menambahkan huruf ‘T’, tabel pun berhasil dibuat

 tugas=# CREATE TABLE buku_tamu (
tugas(# id BIGSERIAL PRIMARY KEY,
tugas(# tanggal DATE DEFAULT CURRENT_DATE,
tugas(# nama VARCHAR(120) NOT NULL,
tugas(# jenis_tamu VARCHAR(20), -- 'ortu' | 'alumni' | 'supplier' | 'lainnya'
tugas(# no_hp VARCHAR(20),
tugas(# keperluan TEXT,
tugas(# created_at TIMESTAMPTZ DEFAULT now()
tugas(# );

Tanda berhasilnya adalah dengan muncul kalimat CREATE TABLE di terminal

CREATE TABLE

horeeee berhasil buat tabel.

Create

kita akan mencoba menambahkan data

tugas=# INSERT INTO buku_tamu (nama, jenis_tamu, no_hp, keperluan)
tugas-# VALUES ('Muhammad Nadhif', 'alumni', '082139398960', 'main');

dan berhasil

INSERT 0 1

Kita akan melihat hasilnya

tugas=# SELECT * FROM buku_tamu;
 id |  tanggal   |      nama       | jenis_tamu |    no_hp     | keperluan |          created_at
----+------------+-----------------+------------+--------------+-----------+-------------------------------
  1 | 2025-08-16 | Muhammad Nadhif | alumni     | 082139398960 | main      | 2025-08-16 11:26:06.856861+07
(1 row)

Dan berhasil

Update

tugas=# UPDATE buku_tamu
tugas-# SET no_hp = '08211112222'
tugas-# WHERE id = 1;
UPDATE 1
tugas=# SELECT * FROM buku_tamu;
 id |  tanggal   |      nama       | jenis_tamu |    no_hp    | keperluan |          created_at
----+------------+-----------------+------------+-------------+-----------+-------------------------------
  1 | 2025-08-16 | Muhammad Nadhif | alumni     | 08211112222 | main      | 2025-08-16 11:26:06.856861+07
(1 row)
tugas=# DELETE FROM buku_tamu WHERE id = 1;
DELETE 1
tugas=# SELECT * FROM buku_tamu;
 id | tanggal | nama | jenis_tamu | no_hp | keperluan | created_at
----+---------+------+------------+-------+-----------+------------
(0 rows)

2) Agenda Kegiatan Harian

Konteks masalah

Banyak kegiatan: piket, kajian, olahraga, lomba. Sering lupa jam dan penanggung jawab. Simpan agenda sederhana per hari.

Alur utama

Buat agenda → lihat daftar hari ini → tandai status selesai → koreksi/hapus bila perlu.

ERD

Skema & CRUD

tugas=# CREATE TABLE agenda (
tugas(#   id                BIGSERIAL PRIMARY KEY,
tugas(#   tanggal           DATE DEFAULT CURRENT_DATE,
tugas(#   judul             VARCHAR(120) NOT NULL,
tugas(#   jam               TIME,
tugas(#   penanggung_jawab  VARCHAR(60),
tugas(#   status            VARCHAR(15) DEFAULT 'rencana', -- 'rencana'|'berjalan'|'selesai'
tugas(#   catatan           TEXT
tugas(# );
CREATE TABLE

-- CREATE
tugas=# INSERT INTO agenda (judul, jam, penanggung_jawab)
tugas-# VALUES
tugas-# ('kajian', '09:00', 'Abdullah'),
tugas-# ('Renang', '07:00', 'Ahmad');
INSERT 0 2

-- READ (hari ini)
tugas=# SELECT * FROM agenda WHERE tanggal = CURRENT_DATE ORDER BY jam NULLS LAST;
 id |  tanggal   | judul  |   jam    | penanggung_jawab | status  | catatan
----+------------+--------+----------+------------------+---------+---------
  2 | 2025-08-16 | Renang | 07:00:00 | Ahmad            | rencana |
  1 | 2025-08-16 | kajian | 09:00:00 | Abdullah         | rencana |

-- UPDATE (tandai selesai)
tugas=# UPDATE agenda SET status = 'selesai' WHERE id = 1;
UPDATE 1
tugas=# SELECT * FROM agenda;
 id |  tanggal   | judul  |   jam    | penanggung_jawab | status  | catatan
----+------------+--------+----------+------------------+---------+---------
  2 | 2025-08-16 | Renang | 07:00:00 | Ahmad            | rencana |
  1 | 2025-08-16 | kajian | 09:00:00 | Abdullah         | selesai |
(2 rows)

-- DELETE
tugas=# DELETE FROM agenda WHERE id = 2;
DELETE 1
tugas=# SELECT * FROM agenda;
 id |  tanggal   | judul  |   jam    | penanggung_jawab | status  | catatan
----+------------+--------+----------+------------------+---------+---------
  1 | 2025-08-16 | kajian | 09:00:00 | Abdullah         | selesai |
(1 row)

3) Catatan Hafalan Harian

Konteks masalah

Santri butuh mencatat setoran hafalan agar terlihat progresnya hari ke hari.

Alur utama

Catat setoran → lihat rekap mingguan → koreksi bila salah.

ERD

Skema + CRUD

CREATE TABLE hafalan (
  id               BIGSERIAL PRIMARY KEY,
  tanggal          DATE DEFAULT CURRENT_DATE,
  nama_santri      VARCHAR(120) NOT NULL,
  surat_atau_materi VARCHAR(60) NOT NULL,
  rentang          VARCHAR(30),         -- misal: "1-10" atau "hal 3"
  durasi_menit     INTEGER,
  catatan          TEXT
);

-- Dummy
INSERT INTO hafalan (nama_santri, surat_atau_materi, rentang, durasi_menit) VALUES
('Ahmad', 'Al-Baqarah', '1-5', 30),
('Naufal', 'Al-Mulk', '1-10', 25);

-- CREATE
INSERT INTO hafalan (nama_santri, surat_atau_materi, rentang, durasi_menit)
VALUES ('Dini', 'An-Naba', '1-20', 35);

-- READ (rekap 7 hari terakhir)
SELECT nama_santri, COUNT(*) jml_setor, SUM(COALESCE(durasi_menit,0)) total_menit
FROM hafalan
WHERE tanggal >= CURRENT_DATE - 6
GROUP BY nama_santri
ORDER BY jml_setor DESC;

-- UPDATE (koreksi rentang)
UPDATE hafalan SET rentang = '1-15' WHERE id = 1;

-- DELETE
DELETE FROM hafalan WHERE id = 2;

4) Daftar Kontak (Teman/Orang Tua/Relasi)

Konteks masalah

Suka kehilangan nomor teman/ortu/wali asrama. Buat buku kontak sederhana.

Alur utama

Tambah kontak → cari kontak → update nomor → hapus duplikat.

ERD

Skema + CRUD

CREATE TABLE kontak (
  id        BIGSERIAL PRIMARY KEY,
  nama      VARCHAR(120) NOT NULL,
  no_hp     VARCHAR(20)  NOT NULL,
  kategori  VARCHAR(60),             -- 'teman'|'guru'|'ortu'|'lainnya'
  catatan   TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Dummy
INSERT INTO kontak (nama, no_hp, kategori) VALUES
('Budi', '0812345678', 'teman'),
('Ust Faris', '085211122233', 'guru');

-- CREATE
INSERT INTO kontak (nama, no_hp, kategori) VALUES ('Ibu Rina', '08199887766', 'ortu');

-- READ (pencarian nama)
SELECT * FROM kontak WHERE nama ILIKE '%rin%' ORDER BY created_at DESC;

-- UPDATE (ganti nomor)
UPDATE kontak SET no_hp = '081700011122' WHERE id = 1;

-- DELETE (duplikat)
DELETE FROM kontak WHERE id = 2;

5) Catatan Tabungan Pribadi

Konteks masalah

Siswa ingin memantau tabungan kecil (uang saku). Satu tabel transaksi masuk/keluar sederhana.

Alur utama

Catat pemasukan/pengeluaran → lihat saldo akhir → koreksi bila ada salah angka.

ERD

Skema + CRUD

CREATE TABLE tabungan (
  id        BIGSERIAL PRIMARY KEY,
  tanggal   DATE DEFAULT CURRENT_DATE,
  jenis     VARCHAR(10) NOT NULL,  -- 'masuk'|'keluar'
  kategori  VARCHAR(60),
  deskripsi TEXT,
  jumlah    INTEGER NOT NULL -- >0 (validasi di aplikasi)
);

-- Dummy
INSERT INTO tabungan (jenis, kategori, deskripsi, jumlah) VALUES
('masuk', 'Uang saku', 'Mingguan', 50000),
('keluar', 'Jajan', 'Roti', 8000);

-- CREATE
INSERT INTO tabungan (jenis, kategori, deskripsi, jumlah)
VALUES ('keluar', 'ATK', 'Beli pulpen', 5000);

-- READ (saldo akhir on-the-fly)
SELECT COALESCE(SUM(CASE WHEN jenis='masuk' THEN jumlah END),0)
     - COALESCE(SUM(CASE WHEN jenis='keluar' THEN jumlah END),0) AS saldo
FROM tabungan;

-- UPDATE
UPDATE tabungan SET jumlah = 7000 WHERE id = 3;

-- DELETE
DELETE FROM tabungan WHERE id = 2;

6) Peminjaman Barang Kelas (Log Sederhana)

Versi satu tabel ini hanya log, bukan sistem stok penuh. Cukup untuk tahu siapa meminjam apa hari ini.

Konteks masalah

Kelas punya perlengkapan (bola, spidol, speaker). Sering dipinjam tapi lupa siapa yang bawa.

Alur utama

Catat peminjaman → saat dikembalikan, update kolom pengembalian → list peminjaman aktif.

ERD

Skema + CRUD

CREATE TABLE pinjam_barang (
  id             BIGSERIAL PRIMARY KEY,
  tanggal        DATE DEFAULT CURRENT_DATE,
  nama_peminjam  VARCHAR(120) NOT NULL,
  nama_barang    VARCHAR(120) NOT NULL,
  jam_pinjam     TIME,
  jam_kembali    TIME,
  catatan        TEXT
);

-- Dummy
INSERT INTO pinjam_barang (nama_peminjam, nama_barang, jam_pinjam) VALUES
('Rafi', 'Bola futsal', '15:30'),
('Nanda', 'Speaker aktif', '10:00');

-- CREATE
INSERT INTO pinjam_barang (nama_peminjam, nama_barang, jam_pinjam)
VALUES ('Syifa', 'Spidol', '08:15');

-- READ (yang belum kembali)
SELECT * FROM pinjam_barang
WHERE jam_kembali IS NULL
ORDER BY tanggal, jam_pinjam;

-- UPDATE (kembali)
UPDATE pinjam_barang SET jam_kembali = '16:45' WHERE id = 1;

-- DELETE (entri salah)
DELETE FROM pinjam_barang WHERE id = 2;

7) Tugas/Kuis Sederhana (Nilai Per Tugas)

Bukan sistem rapor; cukup untuk mencatat nilai satu tugas/kuis per baris.

Konteks masalah

Guru ingin rekap cepat nilai kuis harian tanpa ribet banyak tabel.

Alur utama

Input nilai → lihat ranking hari ini → koreksi nilai bila salah tulis.

ERD

Skema + CRUD

CREATE TABLE nilai_tugas (
  id          BIGSERIAL PRIMARY KEY,
  tanggal     DATE DEFAULT CURRENT_DATE,
  nama_siswa  VARCHAR(120) NOT NULL,
  nama_tugas  VARCHAR(120) NOT NULL,
  nilai       INTEGER,               -- 0..100 (validasi di aplikasi)
  catatan     TEXT
);

-- Dummy
INSERT INTO nilai_tugas (nama_siswa, nama_tugas, nilai) VALUES
('Alya', 'Kuis SQL 1', 85),
('Fajar', 'Kuis SQL 1', 72);

-- CREATE
INSERT INTO nilai_tugas (nama_siswa, nama_tugas, nilai)
VALUES ('Doni', 'Kuis SQL 1', 90);

-- READ (ranking hari ini)
SELECT nama_siswa, nilai
FROM nilai_tugas
WHERE tanggal = CURRENT_DATE
ORDER BY nilai DESC NULLS LAST;

-- UPDATE (koreksi nilai)
UPDATE nilai_tugas SET nilai = 88 WHERE id = 2;

-- DELETE
DELETE FROM nilai_tugas WHERE id = 1;
M
MUHAMMAD1y ago

NICE!

A

tolong segera selesaikan sampai 7 table

More from this blog

Digital Course

21 posts