PRAKTIKUM LENGKAP BASIS DATA: RELASI ANTAR TABEL APLIKASI ATM
A. Tujuan Praktikum
1. Membuat database ATM dengan struktur tabel yang saling berelasi.
2. Memahami penggunaan perintah SQL melalui CMD.
3. Mengetahui bagaimana transaksi dalam aplikasi ATM disimpan dalam basis data.
---
B. Kebutuhan
- MySQL sudah terpasang dan dapat diakses melalui Command Prompt (CMD).
- Akun root atau akun lain dengan hak akses membuat database.
C. Struktur Database
Database ini akan terdiri dari tabel:
1. `nasabah` – menyimpan data pemilik rekening.
2. `rekening` – menyimpan data rekening yang dimiliki nasabah.
3. `transaksi` – menyimpan data transaksi (setor, tarik, transfer).
4. `log_transfer` – menyimpan log transfer antar rekening (untuk detail transfer).
D. Langkah-Langkah Praktikum
1. Masuk ke MySQL via CMD
```cmd
mysql -u root -p
```
Ketik password dan tekan Enter.
---
2. Membuat Database
```sql
CREATE DATABASE db_atm;
USE db_atm;
```
---
3. Membuat Tabel `nasabah`
```sql
CREATE TABLE nasabah (
id_nasabah INT AUTO_INCREMENT PRIMARY KEY,
nama_lengkap VARCHAR(100) NOT NULL,
alamat VARCHAR(150),
no_ktp VARCHAR(20) UNIQUE NOT NULL,
tanggal_daftar DATE DEFAULT (CURRENT_DATE)
);
```
---
4. Membuat Tabel `rekening`
```sql
CREATE TABLE rekening (
no_rekening VARCHAR(15) PRIMARY KEY,
id_nasabah INT,
pin CHAR(6) NOT NULL,
saldo DECIMAL(15,2) DEFAULT 0,
status ENUM('Aktif', 'Nonaktif') DEFAULT 'Aktif',
FOREIGN KEY (id_nasabah) REFERENCES nasabah(id_nasabah) ON DELETE CASCADE
);
```
---
5. Membuat Tabel `transaksi`
```sql
CREATE TABLE transaksi (
id_transaksi INT AUTO_INCREMENT PRIMARY KEY,
no_rekening VARCHAR(15),
jenis_transaksi ENUM('Setor', 'Tarik', 'Transfer'),
jumlah DECIMAL(15,2),
waktu_transaksi DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (no_rekening) REFERENCES rekening(no_rekening) ON DELETE CASCADE
);
```
---
6. Membuat Tabel `log_transfer`
```sql
CREATE TABLE log_transfer (
id_transfer INT AUTO_INCREMENT PRIMARY KEY,
dari_rekening VARCHAR(15),
ke_rekening VARCHAR(15),
jumlah DECIMAL(15,2),
waktu_transfer DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (dari_rekening) REFERENCES rekening(no_rekening),
FOREIGN KEY (ke_rekening) REFERENCES rekening(no_rekening)
);
```
---
E. Menambahkan Data Contoh
1. Tambah Nasabah
```sql
INSERT INTO nasabah (nama_lengkap, alamat, no_ktp)
VALUES ('Budi Santoso', 'Jl. Kenanga No.12', '111222333444'),
('Siti Aminah', 'Jl. Melati No.5', '555666777888');
```
2. Tambah Rekening
```sql
INSERT INTO rekening (no_rekening, id_nasabah, pin, saldo)
VALUES ('1001001', 1, '123456', 2000000),
('1001002', 2, '654321', 3500000);
```
3. Tambah Transaksi
```sql
INSERT INTO transaksi (no_rekening, jenis_transaksi, jumlah)
VALUES ('1001001', 'Setor', 500000),
('1001001', 'Tarik', 100000),
('1001002', 'Setor', 200000);
```
4. Simulasi Transfer
```sql
-- Transfer dari 1001001 ke 1001002 sebesar 300000
INSERT INTO transaksi (no_rekening, jenis_transaksi, jumlah)
VALUES ('1001001', 'Transfer', 300000);
INSERT INTO log_transfer (dari_rekening, ke_rekening, jumlah)
VALUES ('1001001', '1001002', 300000);
```
---
F. Melihat Data
```sql
SELECT * FROM nasabah;
SELECT * FROM rekening;
SELECT * FROM transaksi;
SELECT * FROM log_transfer;
```
---
G. Uji Coba Relasi (Opsional)
1. Hapus Nasabah dan lihat efek ke rekening dan transaksi
```sql
DELETE FROM nasabah WHERE id_nasabah = 1;
```
Cek kembali:
```sql
SELECT * FROM rekening;
SELECT * FROM transaksi;
```
---
H. Pertanyaan Diskusi
1. Apa perbedaan antara `PRIMARY KEY` dan `FOREIGN KEY`?
2. Mengapa kita perlu `ON DELETE CASCADE` pada relasi antar tabel?
3. Apa yang terjadi jika kita menghapus nasabah? Apakah rekening dan transaksi ikut terhapus?
4. Bagaimana kita bisa melacak transaksi transfer antar rekening?
5. Bagaimana cara menampilkan semua transaksi milik nasabah tertentu?
---
I. Tugas Tambahan (Opsional)
Buat query SQL untuk:
- Menampilkan total saldo semua rekening.
- Menampilkan semua transaksi dengan jenis "Setor".
- Menampilkan semua log transfer dari rekening tertentu.
---
No comments:
Post a Comment