Membuat Database Inventori dengan MySQL: Tabel, Query, dan Stored Procedure
1. Pendahuluan
Database merupakan kumpulan data yang disimpan secara terstruktur sehingga dapat dikelola, dicari, dan diperbarui dengan mudah. Dalam pengembangan aplikasi, database berperan penting untuk menyimpan informasi agar data dapat digunakan sesuai kebutuhan.
Pada artikel ini, saya akan membahas cara membuat database inventori menggunakan MySQL. Database inventori digunakan untuk mengelola data barang, kategori barang, pengguna, serta riwayat peminjaman dan pengembalian barang.
Selain membuat database dan tabel, saya juga akan membuat tiga stored procedure sesuai kebutuhan tugas, yaitu:
Menampilkan barang yang tidak sedang dipinjam atau tersedia untuk dipinjam.
Menampilkan data orang berdasarkan nama.
Mencari barang berdasarkan nama.
Pembuatan database ini menggunakan MySQL atau MariaDB dan dapat dicoba melalui phpMyAdmin maupun MySQL Workbench.
2. Pengertian Database Inventori
Database inventori adalah database yang digunakan untuk mencatat dan mengelola data barang dalam suatu organisasi, sekolah, kantor, atau perusahaan.
Dengan database inventori, pengguna dapat mengetahui nama barang, kategori, kondisi, lokasi penyimpanan, serta status peminjaman barang.
Database yang dibuat dalam proyek ini menggunakan nama db_inventori.
3. Perancangan Struktur Database
Sebelum menulis query SQL, langkah pertama adalah menentukan tabel yang diperlukan. Pada proyek ini terdapat empat tabel utama.
| Nama Tabel | Fungsi |
|---|---|
kategori_barang | Menyimpan kategori barang. |
barang | Menyimpan identitas dan kondisi barang inventori. |
pengguna | Menyimpan data orang yang dapat meminjam barang. |
peminjaman | Menyimpan riwayat peminjaman dan pengembalian barang. |
Keempat tabel tersebut saling berhubungan. Tabel barang berelasi dengan kategori_barang, sedangkan tabel peminjaman berelasi dengan tabel barang dan pengguna.
Relasi ini menggunakan primary key dan foreign key untuk menghubungkan data antartabel.
4. Membuat Database dan Tabel
Langkah pertama adalah membuat database dan memilih database yang akan digunakan.
Query SQL
CREATE DATABASE IF NOT EXISTS db_inventori
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE db_inventori;Penjelasan:
CREATE DATABASEdigunakan untuk membuat database.IF NOT EXISTSmencegah pembuatan database baru dengan nama yang sama apabila database tersebut sudah tersedia.CHARACTER SET utf8mb4mendukung penyimpanan berbagai karakter dan simbol.USE db_inventorimemilih database yang akan digunakan.
A. Membuat Tabel Kategori Barang
CREATE TABLE IF NOT EXISTS kategori_barang (
id_kategori INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nama_kategori VARCHAR(80) NOT NULL UNIQUE,
deskripsi VARCHAR(255),
dibuat_pada TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;Tabel kategori_barang berfungsi menyimpan informasi kategori, misalnya elektronik, peralatan kantor, dan perangkat jaringan.
Kolom id_kategori merupakan primary key yang digunakan sebagai identitas unik setiap kategori.
B. Membuat Tabel Pengguna
CREATE TABLE IF NOT EXISTS pengguna (
id_pengguna INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nama_pengguna VARCHAR(100) NOT NULL,
kelas_divisi VARCHAR(50),
no_telepon VARCHAR(20),
alamat VARCHAR(255),
dibuat_pada TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_pengguna_nama (nama_pengguna)
) ENGINE=InnoDB;Tabel pengguna digunakan untuk menyimpan informasi orang yang dapat melakukan peminjaman barang. Data ini dapat berupa nama siswa, guru, atau anggota organisasi.
Kolom id_pengguna merupakan primary key, sedangkan nama_pengguna digunakan untuk melakukan pencarian berdasarkan nama.
C. Membuat Tabel Barang
CREATE TABLE IF NOT EXISTS barang (
id_barang INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
kode_barang VARCHAR(30) NOT NULL UNIQUE,
nama_barang VARCHAR(120) NOT NULL,
id_kategori INT UNSIGNED NOT NULL,
merek VARCHAR(80),
kondisi ENUM(
'Baik',
'Rusak Ringan',
'Rusak Berat'
) NOT NULL DEFAULT 'Baik',
lokasi VARCHAR(100),
tanggal_input TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_barang_nama (nama_barang),
INDEX idx_barang_kategori (id_kategori),
CONSTRAINT fk_barang_kategori
FOREIGN KEY (id_kategori)
REFERENCES kategori_barang(id_kategori)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB;Tabel barang merupakan tabel utama untuk menyimpan informasi barang inventori.
Kolom kode_barang memiliki nilai unik agar setiap barang memiliki kode identifikasi yang berbeda.
Kolom id_kategori merupakan foreign key yang menghubungkan barang dengan tabel kategori_barang.
Kolom kondisi menggunakan tipe ENUM, sehingga nilai yang dapat dimasukkan dibatasi menjadi Baik, Rusak Ringan, atau Rusak Berat.
D. Membuat Tabel Peminjaman
CREATE TABLE IF NOT EXISTS peminjaman (
id_peminjaman BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
id_barang INT UNSIGNED NOT NULL,
id_pengguna INT UNSIGNED NOT NULL,
tanggal_pinjam DATE NOT NULL,
tanggal_jatuh_tempo DATE,
tanggal_kembali DATE,
keterangan VARCHAR(255),
dibuat_pada TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_peminjaman_barang_kembali
(id_barang, tanggal_kembali),
INDEX idx_peminjaman_pengguna (id_pengguna),
CONSTRAINT fk_peminjaman_barang
FOREIGN KEY (id_barang)
REFERENCES barang(id_barang)
ON UPDATE CASCADE
ON DELETE RESTRICT,
CONSTRAINT fk_peminjaman_pengguna
FOREIGN KEY (id_pengguna)
REFERENCES pengguna(id_pengguna)
ON UPDATE CASCADE
ON DELETE RESTRICT
) ENGINE=InnoDB;Tabel peminjaman berfungsi menyimpan riwayat transaksi peminjaman barang.
Kolom id_barang menghubungkan transaksi dengan barang yang dipinjam, sedangkan id_pengguna menghubungkan transaksi dengan orang yang meminjam.
Kolom tanggal_kembali digunakan untuk membedakan peminjaman yang masih berlangsung dan peminjaman yang sudah selesai. Jika tanggal_kembali bernilai NULL, transaksi dianggap masih aktif.
5. Memasukkan Data Contoh
Setelah semua tabel berhasil dibuat, langkah berikutnya adalah memasukkan data contoh agar database dapat diuji.
A. Memasukkan Data Kategori
INSERT INTO kategori_barang (nama_kategori, deskripsi)
VALUES
('Elektronik', 'Perangkat elektronik'),
('Peralatan Kantor', 'Perlengkapan kantor'),
('Jaringan', 'Perangkat jaringan komputer');B. Memasukkan Data Pengguna
INSERT INTO pengguna
(nama_pengguna, kelas_divisi, no_telepon, alamat)
VALUES
('Budi Santoso', 'XII RPL 1', NULL, NULL),
('Andi Pratama', 'XII RPL 2', NULL, NULL),
('Siti Rahma', 'Guru', NULL, NULL);C. Memasukkan Data Barang
INSERT INTO barang
(kode_barang, nama_barang, id_kategori,
merek, kondisi, lokasi)
SELECT
'IT-001', 'Laptop Lenovo 1', id_kategori,
'Lenovo', 'Baik', 'Lab RPL'
FROM kategori_barang
WHERE nama_kategori = 'Elektronik'
UNION ALL
SELECT
'IT-002', 'Proyektor Epson 1', id_kategori,
'Epson', 'Baik', 'Lab Multimedia'
FROM kategori_barang
WHERE nama_kategori = 'Elektronik'
UNION ALL
SELECT
'OF-001', 'Keyboard Logitech 1', id_kategori,
'Logitech', 'Baik', 'Ruang RPL'
FROM kategori_barang
WHERE nama_kategori = 'Peralatan Kantor'
UNION ALL
SELECT
'JR-001', 'Router TP-Link 1', id_kategori,
'TP-Link', 'Rusak Berat', 'Lab Jaringan'
FROM kategori_barang
WHERE nama_kategori = 'Jaringan'
UNION ALL
SELECT
'IT-003', 'Monitor Dell 1', id_kategori,
'Dell', 'Baik', 'Lab RPL'
FROM kategori_barang
WHERE nama_kategori = 'Elektronik';Query tersebut memasukkan lima contoh barang ke tabel barang. Penggunaan SELECT berdasarkan kategori memungkinkan setiap barang memperoleh id_kategori yang sesuai.
D. Memasukkan Contoh Riwayat Peminjaman
INSERT INTO peminjaman
(id_barang, id_pengguna, tanggal_pinjam,
tanggal_jatuh_tempo, tanggal_kembali, keterangan)
SELECT
b.id_barang, u.id_pengguna,
'2026-10-20', '2026-10-27', NULL,
'Peminjaman proyektor'
FROM barang AS b
CROSS JOIN pengguna AS u
WHERE b.kode_barang = 'IT-002'
AND u.nama_pengguna = 'Budi Santoso'
UNION ALL
SELECT
b.id_barang, u.id_pengguna,
'2026-10-01', '2026-10-03', '2026-10-03',
'Peminjaman keyboard selesai'
FROM barang AS b
CROSS JOIN pengguna AS u
WHERE b.kode_barang = 'OF-001'
AND u.nama_pengguna = 'Andi Pratama';Data contoh tersebut memiliki dua transaksi:
Proyektor Epson sedang dipinjam oleh Budi Santoso karena tanggal pengembaliannya masih
NULL.Keyboard Logitech sudah dikembalikan oleh Andi Pratama sehingga transaksinya sudah selesai.
Catatan: Jalankan query pemasukan data hanya satu kali pada database baru. Menjalankannya kembali dapat menimbulkan duplikasi, terutama pada kategori dan kode barang yang memiliki batasan unik.
6. Membuat Stored Procedure
Stored procedure adalah sekumpulan pernyataan SQL yang disimpan di dalam database dan dapat dipanggil kembali ketika dibutuhkan.
Stored procedure dapat membantu mengurangi penulisan query berulang dan membuat operasi database lebih mudah digunakan. Pada MySQL, stored procedure dibuat menggunakan CREATE PROCEDURE dan dijalankan menggunakan perintah CALL.
Sebelum membuat procedure, pilih database terlebih dahulu.
USE db_inventori;A. Stored Procedure Menampilkan Barang yang Tidak Sedang Dipinjam
Procedure pertama digunakan untuk menampilkan barang yang tersedia untuk dipinjam. Barang harus tidak sedang dipinjam dan tidak memiliki kondisi rusak berat.
DROP PROCEDURE IF EXISTS sp_barang_belum_dipinjam;
DELIMITER $$
CREATE PROCEDURE sp_barang_belum_dipinjam()
BEGIN
SELECT
b.id_barang,
b.kode_barang,
b.nama_barang,
k.nama_kategori,
b.merek,
b.kondisi,
b.lokasi
FROM barang AS b
INNER JOIN kategori_barang AS k
ON k.id_kategori = b.id_kategori
WHERE b.kondisi <> 'Rusak Berat'
AND NOT EXISTS (
SELECT 1
FROM peminjaman AS p
WHERE p.id_barang = b.id_barang
AND p.tanggal_kembali IS NULL
)
ORDER BY b.nama_barang;
END$$
DELIMITER ;Cara menjalankan procedure:
CALL sp_barang_belum_dipinjam();Penjelasan query:
CREATE PROCEDUREdigunakan untuk membuat stored procedure.INNER JOINmenghubungkan tabel barang dengan tabel kategori.NOT EXISTSmemeriksa bahwa tidak ada transaksi peminjaman aktif untuk barang tersebut.tanggal_kembali IS NULLmenunjukkan bahwa transaksi peminjaman belum selesai.kondisi <> 'Rusak Berat'memastikan barang rusak berat tidak ditampilkan sebagai barang yang tersedia.
Perlu diperhatikan bahwa procedure ini menampilkan barang yang tersedia saat ini, bukan hanya barang yang belum pernah dipinjam sepanjang riwayatnya.
B. Stored Procedure Menampilkan Orang Berdasarkan Nama
Procedure kedua berfungsi mencari dan menampilkan data pengguna berdasarkan nama yang dimasukkan.
DROP PROCEDURE IF EXISTS sp_cari_pengguna_berdasarkan_nama;
DELIMITER $$
CREATE PROCEDURE sp_cari_pengguna_berdasarkan_nama(
IN p_nama VARCHAR(100)
)
BEGIN
SELECT
u.id_pengguna,
u.nama_pengguna,
u.kelas_divisi,
u.no_telepon,
u.alamat
FROM pengguna AS u
WHERE p_nama IS NOT NULL
AND TRIM(p_nama) <> ''
AND u.nama_pengguna LIKE CONCAT(
'%', TRIM(p_nama), '%'
)
ORDER BY u.nama_pengguna;
END$$
DELIMITER ;Cara menjalankan procedure:
CALL sp_cari_pengguna_berdasarkan_nama('Budi');Contoh pencarian lainnya:
CALL sp_cari_pengguna_berdasarkan_nama('Andi');
CALL sp_cari_pengguna_berdasarkan_nama('Siti');Penjelasan query:
IN p_nama VARCHAR(100)merupakan parameter masukan untuk nama yang akan dicari.LIKEdigunakan untuk mencocokkan nama berdasarkan pola.CONCAT('%', TRIM(p_nama), '%')memungkinkan pencarian sebagian nama.TRIM()menghapus spasi di awal dan akhir teks masukan.Kondisi
p_nama IS NOT NULLdanTRIM(p_nama) <> ''mencegah pencarian dengan parameter kosong.
Sebagai contoh, ketika parameter berisi 'Budi', database dapat menampilkan pengguna bernama Budi Santoso.
C. Stored Procedure Mencari Barang Berdasarkan Nama
Procedure ketiga berfungsi mencari barang melalui nama barang. Hasil pencarian menampilkan kategori, merek, kondisi, lokasi, dan status peminjaman.
DROP PROCEDURE IF EXISTS sp_cari_barang_berdasarkan_nama;
DELIMITER $$
CREATE PROCEDURE sp_cari_barang_berdasarkan_nama(
IN p_nama VARCHAR(120)
)
BEGIN
SELECT
b.id_barang,
b.kode_barang,
b.nama_barang,
k.nama_kategori,
b.merek,
b.kondisi,
b.lokasi,
CASE
WHEN b.kondisi = 'Rusak Berat'
THEN 'Tidak layak dipinjam'
WHEN EXISTS (
SELECT 1
FROM peminjaman AS p
WHERE p.id_barang = b.id_barang
AND p.tanggal_kembali IS NULL
)
THEN 'Sedang dipinjam'
ELSE 'Tersedia'
END AS status_peminjaman
FROM barang AS b
INNER JOIN kategori_barang AS k
ON k.id_kategori = b.id_kategori
WHERE p_nama IS NOT NULL
AND TRIM(p_nama) <> ''
AND b.nama_barang LIKE CONCAT(
'%', TRIM(p_nama), '%'
)
ORDER BY b.nama_barang;
END$$
DELIMITER ;Cara menjalankan procedure:
CALL sp_cari_barang_berdasarkan_nama('Laptop');Contoh pencarian lainnya:
CALL sp_cari_barang_berdasarkan_nama('Proyektor');
CALL sp_cari_barang_berdasarkan_nama('Monitor');
CALL sp_cari_barang_berdasarkan_nama('Keyboard');Penjelasan query:
p_namadigunakan sebagai parameter untuk memasukkan nama barang yang ingin dicari.LIKE CONCAT('%', TRIM(p_nama), '%')memungkinkan pencarian berdasarkan sebagian nama barang.CASEmenentukan status barang berdasarkan kondisi dan riwayat peminjamannya.EXISTSmemeriksa apakah terdapat transaksi peminjaman yang masih aktif.AS status_peminjamanmemberikan nama kolom hasil untuk status barang.
Contohnya, pencarian 'Proyektor' akan menampilkan Proyektor Epson beserta status peminjamannya.
7. Query untuk Menguji Database
Setelah membuat database dan stored procedure, lakukan pengujian untuk memastikan data dan relasinya berfungsi dengan benar.
A. Menampilkan Semua Barang
SELECT
b.id_barang,
b.kode_barang,
b.nama_barang,
k.nama_kategori,
b.merek,
b.kondisi,
b.lokasi
FROM barang AS b
INNER JOIN kategori_barang AS k
ON k.id_kategori = b.id_kategori
ORDER BY b.id_barang;Query ini menampilkan seluruh data barang beserta kategori dan kondisinya.
B. Menampilkan Semua Pengguna
SELECT *
FROM pengguna
ORDER BY nama_pengguna;Query ini menampilkan semua orang yang tersimpan di tabel pengguna.
C. Menampilkan Riwayat Peminjaman
SELECT
p.id_peminjaman,
b.nama_barang,
u.nama_pengguna,
p.tanggal_pinjam,
p.tanggal_jatuh_tempo,
p.tanggal_kembali,
CASE
WHEN p.tanggal_kembali IS NULL
THEN 'Sedang dipinjam'
ELSE 'Sudah dikembalikan'
END AS status_peminjaman
FROM peminjaman AS p
INNER JOIN barang AS b
ON b.id_barang = p.id_barang
INNER JOIN pengguna AS u
ON u.id_pengguna = p.id_pengguna
ORDER BY p.id_peminjaman;Query tersebut menggabungkan informasi dari tiga tabel untuk menampilkan riwayat peminjaman secara lebih lengkap.
D. Melihat Stored Procedure yang Sudah Dibuat
SHOW PROCEDURE STATUS
WHERE Db = 'db_inventori';Untuk melihat isi definisi procedure tertentu, gunakan:
SHOW CREATE PROCEDURE sp_barang_belum_dipinjam;8. Cara Menjalankan SQL di phpMyAdmin
Berikut langkah-langkah untuk mencoba database inventori:
Buka phpMyAdmin melalui lingkungan server MySQL/MariaDB yang digunakan.
Pilih menu SQL.
Jalankan perintah pembuatan database dan tabel.
Masukkan data contoh setelah semua tabel berhasil dibuat.
Jalankan kode stored procedure untuk membuat tiga procedure.
Uji setiap procedure menggunakan perintah
CALL.Jalankan query pemeriksaan untuk memastikan hasil sesuai dengan data yang tersimpan.
Saat membuat stored procedure, jalankan seluruh definisinya sebagai satu skrip di editor SQL yang mendukung DELIMITER. Perintah DELIMITER membantu editor mengenali akhir definisi procedure yang di dalamnya terdapat beberapa tanda titik koma.
Jika terjadi kesalahan, periksa kembali nama database, nama tabel, nama kolom, dan urutan eksekusi query.
9. Kesimpulan
Database inventori menggunakan MySQL dapat membantu mengelola data barang, kategori, pengguna, dan riwayat peminjaman secara terstruktur.
Dalam proyek ini, database db_inventori memiliki empat tabel yang saling berhubungan melalui primary key dan foreign key. Tiga stored procedure dibuat untuk menampilkan barang yang tersedia, mencari pengguna berdasarkan nama, dan mencari barang berdasarkan nama.
Melalui latihan ini, saya mempelajari penggunaan perintah CREATE DATABASE, CREATE TABLE, INSERT INTO, SELECT, JOIN, LIKE, EXISTS, CASE, serta CREATE PROCEDURE dan CALL.
Pemahaman tersebut menjadi dasar untuk mengembangkan aplikasi inventori yang lebih lengkap, misalnya aplikasi inventori sekolah berbasis web.
10. Referensi
Artikel ini dibuat sebagai dokumentasi pembelajaran database dan SQL, khususnya untuk memahami struktur database inventori serta penggunaan stored procedure pada MySQL.
HASIL DARI SOAL DB_INVENTORI !!
Hasil db_Inventori :
Prosedur buat barang yang belum terpinjam :
Prosedur Untuk menampilkan orang berdasarkan nama :
Cari Barang Berdasarkan Nama:


0 Komentar