📦 Mini Project: Sistem Inventaris Barang

Level: Intermediate

Pada mini project ini, kita akan membangun sistem inventaris sederhana untuk mengelola stok barang. Proyek ini menggabungkan konsep relasi, foreign key, JOIN, dan agregasi.

📖 Desain Database

Kita akan membuat 3 tabel utama:

🛠️ Implementasi

-- Membuat database
CREATE DATABASE inventaris_db;
USE inventaris_db;

-- Tabel kategori
CREATE TABLE kategori (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nama_kategori VARCHAR(50) NOT NULL
);

-- Tabel barang
CREATE TABLE barang (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nama_barang VARCHAR(50) NOT NULL,
    stok INT DEFAULT 0,
    kategori_id INT,
    FOREIGN KEY (kategori_id) REFERENCES kategori(id)
);

-- Tabel transaksi
CREATE TABLE transaksi (
    id INT PRIMARY KEY AUTO_INCREMENT,
    barang_id INT,
    jumlah INT,
    tipe ENUM('masuk','keluar'),
    tanggal DATE,
    FOREIGN KEY (barang_id) REFERENCES barang(id)
);

-- Tambah kategori
INSERT INTO kategori (nama_kategori) VALUES ('Elektronik'), ('Alat Tulis');

-- Tambah barang
INSERT INTO barang (nama_barang, stok, kategori_id)
VALUES ('Laptop', 10, 1), ('Mouse', 20, 1), ('Pulpen', 50, 2);

-- Tambah transaksi
INSERT INTO transaksi (barang_id, jumlah, tipe, tanggal)
VALUES (1, 5, 'keluar', '2025-01-01'),
       (2, 10, 'masuk', '2025-01-02'),
       (3, 5, 'keluar', '2025-01-03');

-- Laporan stok barang dengan kategori
SELECT b.nama_barang, k.nama_kategori, b.stok
FROM barang b
JOIN kategori k ON b.kategori_id = k.id;

-- Hitung total transaksi keluar per barang
SELECT b.nama_barang, SUM(t.jumlah) AS total_keluar
FROM transaksi t
JOIN barang b ON t.barang_id = b.id
WHERE t.tipe = 'keluar'
GROUP BY b.nama_barang;

👉 Dengan desain ini, kita bisa mengelola stok barang, mencatat transaksi, dan membuat laporan ringkas.

🎮 Mini Challenge

Kembangkan sistem inventaris dengan fitur tambahan:

Tugas tambahan: Buat trigger yang otomatis mengurangi atau menambah stok barang setiap kali ada transaksi masuk/keluar.