Target Pertemuan
Di akhir kelas, Anda mampu menentukan entity, atribut, tipe data, dan primary key sebuah aplikasi — dituangkan sebagai rancangan tabel di Project Book.
Membedakan benda/kejadian yang datanya perlu disimpan dari sekadar proses.
Menentukan ciri yang wajib dicatat beserta tipe datanya.
Memilih penanda unik agar setiap baris bisa dibedakan.
SQL boleh di-copy–paste. Yang tidak boleh di-copy–paste adalah pemahaman tentang data Anda sendiri.
Pertanyaan Pembuka
Laundry menerima 3 pelanggan hari ini, salah satunya bernama sama persis: “Andi”. Tanpa nomor nota / ID, bagaimana Anda membedakan cucian milik Andi yang satu dari Andi yang lain? Tulis jawaban di kertas sebelum membuka laptop.
1. Dari Pertemuan 3 ke Pertemuan 4
Pertemuan 3 menghitung total belanja — tetapi setelah browser ditutup, datanya hilang. Aplikasi nyata harus menyimpan data agar bisa dilihat lagi besok.
P2–P3
P4 hari ini
P5
P6
2. Analogi Lemari Arsip
Bayangkan ruang arsip laundry — persis seperti database (ilustrasi resmi kerangka kuliah):
Satu wadah besar bernama mis. laundry_db untuk seluruh arsip satu usaha.
Map “Pelanggan”, “Transaksi”, “Pembayaran” — tiap map hanya berisi satu jenis formulir.
Satu lembar = satu baris. Nomor arsip unik di pojok = primary key.
3. Database, Tabel & Record
Database berisi tabel; tiap tabel berisi baris (record) dan kolom (field/column).
Contoh tabel pelanggan
| id_pelanggan (PK) | nama | no_hp |
|---|---|---|
| 1 | Andi | 0812… |
| 2 | Andi | 0857… |
| 3 | Sinta | 0821… |
Dua “Andi” tetap berbeda karena PK-nya beda: 1 vs 2. Inilah jawaban pertanyaan pembuka.
Entity vs tabel
Entity adalah konsepnya (“ada Pelanggan”); tabel adalah wujudnya di database. Satu entity → satu tabel.
- Entity Pelanggan → tabel pelanggan
- Entity Transaksi → tabel transaksi
- Bukan entity: “hitung diskon”, “tombol simpan” (itu proses, bukan data).
Atribut → kolom: apa yang wajib dicatat?
Atribut dipilih dari kebutuhan nyata, bukan kira-kira. Tanya: “tanpa data ini, proses apa yang macet?”
| Pertanyaan | Atribut yang lahir |
|---|---|
| Bagaimana menghubungi pelanggan? | no_hp |
| Berapa yang harus dibayar? | berat_kg, total_harga |
| Kapan diambil? | tanggal_masuk, tanggal_selesai |
| Sudah bayar atau belum? | status |
4. Tipe Data — Pilih Wadah yang Tepat
Tipe data menentukan isi apa yang muat, operasi apa yang bisa dilakukan, dan seberapa besar penyimpanan. Salah pilih = tanggal tidak bisa diurutkan, harga tidak bisa dijumlahkan.
| Tipe | Untuk apa | Contoh |
|---|---|---|
| INT | Bilangan bulat: ID, jumlah, harga rupiah | berat dibulatkan / harga 25000 |
| DECIMAL(5,2) | Angka desimal presisi: berat 2,50 kg | berat_kg DECIMAL(5,2) |
| VARCHAR(n) | Teks pendek berbatas: nama, no HP, username | nama VARCHAR(100) |
| TEXT | Teks panjang bebas: alamat, catatan | alamat TEXT |
| DATE / DATETIME | Tanggal / tanggal+jam | tanggal_masuk DATE |
| ENUM(...) | Pilihan tetap: status, metode, peran | status ENUM('baru','proses','selesai','diambil') |
Primary Key — Nomor Arsip yang Unik
Primary key (PK) wajib: unik + tidak kosong + tidak berubah-ubah. Praktik standar: id_... INT AUTO_INCREMENT PRIMARY KEY — nomor urut otomatis.
id_pelanggan, id_transaksi — buatan sistem, stabil, unik.
Nama (bisa kembar), no HP (bisa ganti), alamat (bisa sama). Boleh dicari, tapi bukan identitas.
5. Kasus Nyata — 5 Entity Laundry (Sesuai Kerangka)
Kerangka kuliah menetapkan contoh output P4 untuk laundry: Pelanggan, Transaksi, Layanan, Pembayaran, User. Berikut rancangan atributnya — tiru polanya untuk sistem pilihan Anda.
Pelanggan
- id_pelanggan INT PK
- nama VARCHAR(100) wajib
- no_hp VARCHAR(20)
- alamat TEXT
Layanan
- id_layanan INT PK
- nama_layanan VARCHAR(100)
- harga_per_kg INT
- estimasi_hari INT
Transaksi
- id_transaksi INT PK
- id_pelanggan, id_layanan INT (calon penghubung — FK formal di P5)
- berat_kg DECIMAL(5,2)
- tanggal_masuk, tanggal_selesai DATE
- status ENUM
- total_harga INT
Pembayaran
- id_pembayaran INT PK
- id_transaksi INT (calon penghubung)
- tanggal_bayar DATETIME
- jumlah_bayar INT
- metode ENUM tunai/transfer/qris
User (pengguna sistem)
Petugas yang login — bedakan dengan pelanggan. Kolom: id_user INT PK, username VARCHAR(50) UNIQUE, password_hash VARCHAR(255), peran ENUM admin/kasir. Detail login & hashing di Pertemuan 9.
6. Praktik — Dari Kertas ke phpMyAdmin
Alur Paper First, AI Later: gambar rancangan di Project Book dulu, baru tulis SQL, baru jalankan. SQL di bawah siap copy–paste ke tab SQL phpMyAdmin.
Diagram — Entity Menjadi Tabel
Setiap entity menjadi satu tabel; atribut menjadi kolom; satu kolom dinobatkan sebagai primary key.
Siapkan di XAMPP
- Buka XAMPP Control Panel, klik Start pada Apache dan MySQL. Latihan ini memakai keduanya (phpMyAdmin butuh keduanya jalan).
- Buka http://localhost/phpmyadmin. Jika error, pastikan kedua modul berstatus hijau/running.
- Salin blok mini coding 1, buka tab SQL, tempel, klik Go/Kirim. Ulangi untuk blok 5 tabel dan uji isi.
CREATE DATABASE IF NOT EXISTS laundry_db
CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE laundry_db;
CREATE TABLE IF NOT EXISTS pelanggan (
id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
no_hp VARCHAR(20),
alamat TEXT
);
USE laundry_db;
-- 1. Pelanggan
CREATE TABLE IF NOT EXISTS pelanggan (
id_pelanggan INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
no_hp VARCHAR(20),
alamat TEXT
);
-- 2. Layanan
CREATE TABLE IF NOT EXISTS layanan (
id_layanan INT AUTO_INCREMENT PRIMARY KEY,
nama_layanan VARCHAR(100) NOT NULL,
harga_per_kg INT NOT NULL,
estimasi_hari INT NOT NULL DEFAULT 2
);
-- 3. Transaksi (id_pelanggan & id_layanan jadi FK formal di P5)
CREATE TABLE IF NOT EXISTS transaksi (
id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
id_pelanggan INT NOT NULL,
id_layanan INT NOT NULL,
berat_kg DECIMAL(5,2) NOT NULL,
tanggal_masuk DATE NOT NULL,
tanggal_selesai DATE,
status ENUM('baru','proses','selesai','diambil') NOT NULL DEFAULT 'baru',
total_harga INT NOT NULL DEFAULT 0
);
-- 4. Pembayaran
CREATE TABLE IF NOT EXISTS pembayaran (
id_pembayaran INT AUTO_INCREMENT PRIMARY KEY,
id_transaksi INT NOT NULL,
tanggal_bayar DATETIME DEFAULT CURRENT_TIMESTAMP,
jumlah_bayar INT NOT NULL,
metode ENUM('tunai','transfer','qris') NOT NULL DEFAULT 'tunai'
);
-- 5. User / petugas (login dibahas P9)
CREATE TABLE IF NOT EXISTS pengguna (
id_user INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
peran ENUM('admin','kasir') NOT NULL DEFAULT 'kasir'
);
USE laundry_db;
-- Contoh isi (detail INSERT/SELECT dibahas penuh di P6)
INSERT INTO pelanggan (nama, no_hp, alamat) VALUES
('Andi', '081234567890', 'Jl. Merpati No. 10'),
('Andi', '085700011122', 'Jl. Kenari No. 5'),
('Sinta', '082133344455', 'Jl. Anggrek No. 8');
INSERT INTO layanan (nama_layanan, harga_per_kg, estimasi_hari) VALUES
('Cuci Setrika', 8000, 2),
('Express 1 Hari', 15000, 1);
SELECT * FROM pelanggan;
SELECT * FROM layanan;
SHOW TABLES;
DESCRIBE pelanggan;
Alur pada kode
Membuat “lemari” laundry_db. Sekali saja.
Membuat “map”: nama tabel + daftar kolom + tipe + PK.
Mengisi 2–3 formulir contoh lalu melihat isinya untuk memastikan struktur benar.
7. Jalankan, Uji, dan Amati
Uji struktur, bukan cuma “berhasil dijalankan”. Prediksi dulu, baru eksekusi, lalu catat.
| Kasus uji | Cara | Hasil yang seharusnya |
|---|---|---|
| PK menolak kembar | INSERT INTO pelanggan (id_pelanggan, nama) VALUES (1, 'Kembar'); | Error duplicate entry — bukti dua “Andi” tetap dua baris berbeda. |
| Kolom wajib | INSERT INTO pelanggan (no_hp) VALUES ('0812'); (tanpa nama) | Error — kolom nama NOT NULL menolak. |
| Tipe menolak salah isi | Isi tanggal_masuk dengan teks bebas mis. “kemarin” | Error / tanggal 0000-00-00 — bukti DATE butuh format YYYY-MM-DD. |
| ENUM menolak di luar pilihan | Isi status dengan 'ngawur' | Error — hanya 4 pilihan yang diizinkan. |
| Struktur benar | DESCRIBE transaksi; dan SELECT * FROM pelanggan; | Kolom, tipe, dan PK tampil sesuai rancangan kertas. |
8. Mini Challenge
- Tambahkan kolom email VARCHAR(100) ke tabel pelanggan via tab SQL (ALTER TABLE ... ADD COLUMN). Tipe apa yang Anda pilih dan mengapa?
- Buat tabel ke-6 untuk sistem Anda sendiri (mis. “obat”, “kendaraan”, “buku”) — minimal 4 kolom + 1 PK. Tulis dulu di kertas.
- Coba masukkan no_hp dengan awalan 0 (mis. 0812…). Hilang atau utuh? Apa buktinya soal pilihan VARCHAR vs INT?
- Temukan satu atribut di sistem Anda yang “bisa kembar” (nama, alamat) dan jelaskan mengapa ia tidak layak jadi PK.
9. Hubungkan dengan Project Semester — Project 04 Data Analysis
Tentukan seluruh entity pada sistem pilihan Anda beserta atributnya — ini bekal ERD (P5) dan CRUD Matrix (P6).
Pelanggan, Lapangan, Booking, Pembayaran, User. Atribut kunci: tanggal, jam mulai/selesai, status.
Anggota, Buku, Peminjaman, Denda, User. Atribut kunci: tanggal pinjam/kembali, status kembali.
Tiru pola laundry: siapa (pelanggan) + apa (layanan/barang/kamar) + kejadian (transaksi) + uang (pembayaran) + petugas (user).
Jangan menyalin mentah tabel laundry. Ganti entity dan atribut dengan kebutuhan sistem Anda. Setiap tabel wajib punya PK dan alasan pemilihannya.
10. Tugas Project Book — Minggu 4
- Tetap gunakan sistem project semester yang sama.
- Daftar seluruh entity sistem Anda (minimal 4) + atribut masing-masing.
- Untuk tiap kolom tulis: nama, tipe data, wajib/opsional, dan tandai PK-nya + alasan.
- Gambar rancangan tabel di kertas (nama tabel + kolom + PK), lalu wujudkan minimal 3 tabel di phpMyAdmin dan lampirkan bukti (screenshot / ekspor SQL).
- Tulis analisis tangan, foto/scan jelas, unggah ke Google Drive sesuai arahan dosen. Simpan untuk ERD minggu depan.
Nama entity → Atribut → Tipe data + alasan → Primary key + alasan → Bukti SQL/phpMyAdmin.
11. Quis Pertemuan 4
- Jelaskan perbedaan database, tabel, dan record dengan contoh dari sistem Anda.
- Apa beda entity dan tabel? Apa beda atribut dan kolom?
- Kapan memakai VARCHAR, kapan TEXT, kapan INT, kapan DATE? Beri contoh masing-masing.
- Mengapa no HP disimpan sebagai VARCHAR bukan INT? Mengapa harga sebagai INT bukan VARCHAR?
- Apa syarat primary key? Mengapa “nama” umumnya buruk sebagai PK?
- Pada tabel transaksi laundry, kolom apa yang menjadi calon penghubung ke tabel lain? Mengapa FK formalnya baru dibahas di P5?
- Jelaskan alur membuat database sampai teruji: dari rancangan kertas hingga SELECT berhasil.
Quis/aktivitas mengikuti aturan kelas dan arahan dosen. Pastikan rancangan yang dikumpulkan dapat Anda jelaskan.
12. Ringkasan
apa yang disimpan
apa yang dicatat
pembeda baris
wujud di DB
Data yang baik dirancang di kertas sebelum diketik sebagai SQL.
Pertemuan 5 akan menghubungkan tabel-tabel ini (PK, FK, ERD). Simpan Project Book dan file SQL Anda.
Glosarium
Istilah bergaris putus-putus dapat diarahkan kursor atau difokuskan untuk melihat arti singkat.