Dalam industri logistik dan pengiriman barang, pengelolaan data yang akurat dan terstruktur sangat penting agar proses pengiriman berjalan dengan lancar, cepat, dan dapat dipantau oleh pelanggan. Setiap tahapan mulai dari penerimaan paket, pencatatan data pengirim dan penerima, penjadwalan kurir hingga pelacakan posisi barang melibatkan data yang saling terkait. Oleh karena itu, dibutuhkan sistem basis data yang mampu mengelola informasi tersebut secara tepat dan efisien.
Sistem manajemen basis data relasional (RDBMS) memungkinkan perusahaan pengiriman menyimpan dan memproses data dalam jumlah besar secara terstruktur. Pada studi kasus ini, dirancang sebuah sistem basis data yang merepresentasikan aktivitas pengiriman barang menggunakan beberapa entitas utama yakni pelanggan, kurir, paket, rute dan status paket. Dengan menggunakan bahasa SQL dalam R melalui package RSQLite, diimplementasikan perintah dasar seperti CREATE, INSERT, SELECT, UPDATE, DELETE, serta JOIN untuk menghubungkan data antar tabel. Sistem ini dirancang untuk mensimulasikan proses pengiriman barang secara sederhana namun realistis.
Tujuan dilakukannya studi kasus Implementasi Sistem Basis Data Relasional pada Aktivitas Pengiriman Barang yaitu sebagai berikut: 1. Merancang struktur basis data pengiriman dengan lima entitas saling terhubung. 2. Mengimplementasikan operasi SQL untuk mengelola data pelanggan, kurir, paket, rute, dan status paket. 3. Menampilkan hasil pengolahan data melalui query untuk mendukung pemantauan proses pengiriman.
Studi kasus ini hanya mencakup fitur dasar sistem pengiriman barang seperti pencatatan paket, informasi pelanggan, penugasan kurir, dan pelacakan status. Tidak mencakup aspek keamanan data, autentikasi pengguna, perhitungan ongkos kirim, atau sistem pengiriman berskala besar.
Sistem basis data ini dirancang menggunakan lima tabel utama yang mewakili komponen penting dalam proses pengiriman barang. Setiap tabel saling terhubung melalui penggunaan primary key dan foreign key untuk menjamin integritas data.
Pelanggan ───< Paket >─── Kurir
│
├───> Rute
│
└───< Status_Paket
install.packages(c("DBI", "RSQLite", "dplyr"))
library(DBI)
library(RSQLite)
library(dplyr)
con <- dbConnect(SQLite(), ":memory:")
dbExecute(con, "CREATE TABLE pelanggan (id_pelanggan TEXT PRIMARY KEY,nama_pelanggan TEXT,alamat TEXT,no_hp TEXT);")
dbExecute(con, "CREATE TABLE kurir (id_kurir TEXT PRIMARY KEY,nama_kurir TEXT,no_hp TEXT,kendaraan TEXT,wilayah TEXT);")
dbExecute(con, "CREATE TABLE rute (id_rute TEXT PRIMARY KEY,id_kurir TEXT,titik_awal TEXT,titik_tujuan TEXT,estimasi_waktu TEXT,FOREIGN KEY(id_kurir) REFERENCES kurir(id_kurir));")
dbExecute(con, "CREATE TABLE paket (id_paket TEXT PRIMARY KEY,id_pelanggan TEXT,id_kurir TEXT,id_rute TEXT,jenis_paket TEXT,berat REAL,biaya REAL,tanggal_kirim TEXT,FOREIGN KEY(id_pelanggan) REFERENCES pelanggan(id_pelanggan),FOREIGN KEY(id_kurir) REFERENCES kurir(id_kurir),FOREIGN KEY(id_rute) REFERENCES rute(id_rute));")
dbExecute(con, "CREATE TABLE status_paket (id_status TEXT PRIMARY KEY,id_paket TEXT,waktu_update TEXT,keterangan TEXT,FOREIGN KEY(id_paket) REFERENCES paket(id_paket));")
dbExecute(con, "INSERT INTO pelanggan VALUES ('P001','Andi Pratama','Jl. Mawar No.12','081247913190'),('P002','Siti Lestari','Jl. Melati No.5','082261960136'),('P003','Budi Santoso','Jl. Kenanga No.88','081327926180'),('P004','Rina Amelia','Jl. Kamboja No.3','085212037122');")
dbExecute(con, "INSERT INTO kurir VALUES ('K001','Fajar Ramadhan','081295810421','Motor','Kendari Timur'),('K002','Joko Wahyudi','082247802103','Motor','Kendari Barat');")
dbExecute(con, "INSERT INTO rute VALUES ('R001','K001','Gudang Utama','Jl. Mawar','30 menit'),('R002','K001','Gudang Utama','Jl. Melati','35 menit'),('R003','K002','Gudang Barat','Jl. Kenanga','40 menit');")
dbExecute(con, "INSERT INTO paket VALUES ('PK001','P001','K001','R001','Dokumen',0.5,15000,'2025-01-10'),('PK002','P002','K001','R002','Pakaian',1.2,25000,'2025-01-11'),('PK003','P003','K002','R003','Elektronik',2.5,35000,'2025-01-11'),('PK004','P004','K002','R003','Makanan',1.0,20000,'2025-01-12');")
dbExecute(con, "INSERT INTO status_paket VALUES ('S001','PK001','2025-01-10 09:25','Paket berhasil dikirim'),('S002','PK002','2025-01-11 10:40','Paket berhasil dikirim'),('S003','PK003','2025-01-11 12:40','Paket berhasil dikirim'),('S004','PK004','2025-01-12 10:55','Paket berhasil dikirim');")
dbListTables(con)
dbGetQuery(con, "SELECT * FROM paket")
dbGetQuery(con, "SELECT * FROM paket ORDER BY biaya ASC;")
dbGetQuery(con, "SELECT * FROM paket ORDER BY biaya DESC;")
dbGetQuery(con, "SELECT * FROM paket WHERE berat > 1 ORDER BY tanggal_kirim ASC;")
dbExecute(con, "UPDATE paket SET biaya = biaya + 5000 WHERE id_paket = 'PK002';")
dbGetQuery(con, "SELECT * FROM paket WHERE id_paket = 'PK002'")
dbGetQuery(con, "SELECT * FROM status_paket;")
dbExecute(con, "DELETE FROM status_paket WHERE id_status = 'S004';")
dbGetQuery(con, "SELECT p.id_paket, pel.nama_pelanggan, k.nama_kurir, r.titik_tujuan, p.jenis_paket, p.tanggal_kirim, s.keterangan FROM paket p INNER JOIN pelanggan pel ON p.id_pelanggan = pel.id_pelanggan INNER JOIN kurir k ON p.id_kurir = k.id_kurir INNER JOIN rute r ON p.id_rute = r.id_rute INNER JOIN status_paket s ON p.id_paket = s.id_paket;")
dbGetQuery(con, "SELECT SUM(biaya) AS total_biaya, AVG(biaya) AS rata_rata_biaya FROM paket;")
query_laporan <- "SELECT p.id_paket, pel.nama_pelanggan AS pelanggan, k.nama_kurir AS kurir, r.titik_tujuan AS tujuan, p.jenis_paket, p.biaya, s.keterangan FROM paket p JOIN pelanggan pel ON p.id_pelanggan = pel.id_pelanggan JOIN kurir k ON p.id_kurir = k.id_kurir JOIN rute r ON p.id_rute = r.id_rute JOIN status_paket s ON p.id_paket = s.id_paket;"
laporan <- dbGetQuery(con, query_laporan)
print(laporan)
Berdasarkan implementasi dan analisis yang telah dilakukan, dapat disimpulkan bahwa sistem manajemen basis data memiliki peran penting dalam mengelola proses pengiriman barang secara terstruktur, akurat, dan efisien. Dengan lima entitas utama (pelanggan, kurir, rute, paket, dan status_paket), seluruh data dapat saling terhubung melalui relasi primary key dan foreign key.
Penerapan berbagai perintah SQL seperti CREATE, INSERT, SELECT, UPDATE, DELETE serta penggunaan JOIN dan fungsi agregat membuktikan bahwa data dapat dibentuk, diolah, dan disajikan menjadi laporan yang informatif. Studi kasus ini menggambarkan bagaimana konsep basis data relasional digunakan dalam dunia nyata untuk meningkatkan efektivitas sistem logistik.