Studi kasus ini mengimplementasikan sistem basis data untuk manajemen pelanggan barbershop menggunakan SQLite dalam R.
# Instal paket (jika belum)
# install.packages(c("DBI", "RSQLite", "dplyr", "knitr"))
library(DBI)
## Warning: package 'DBI' was built under R version 4.5.2
library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.5.2
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.5.2
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(knitr)
## Warning: package 'knitr' was built under R version 4.5.2
# Membuat koneksi database
con <- dbConnect(SQLite(), ":memory:")
cat("Koneksi database berhasil dibuat. Output:", dbGetQuery(con, "SELECT 1")[[1]], "\n")
## Koneksi database berhasil dibuat. Output: 1
# Tabel Pelanggan
dbExecute(con, "
CREATE TABLE pelanggan (
id_pelanggan INTEGER PRIMARY KEY AUTOINCREMENT,
nama TEXT NOT NULL,
no_hp TEXT UNIQUE,
email TEXT,
tanggal_daftar DATE DEFAULT CURRENT_DATE
);")
## [1] 0
# Tabel Layanan
dbExecute(con, "
CREATE TABLE layanan (
id_layanan INTEGER PRIMARY KEY AUTOINCREMENT,
nama_layanan TEXT NOT NULL,
harga INTEGER NOT NULL,
durasi INTEGER DEFAULT 30
);")
## [1] 0
# Tabel Kapster
dbExecute(con, "
CREATE TABLE kapster (
id_kapster INTEGER PRIMARY KEY AUTOINCREMENT,
nama_kapster TEXT NOT NULL,
spesialisasi TEXT,
pengalaman INTEGER
);")
## [1] 0
# Tabel Booking
dbExecute(con, "
CREATE TABLE booking (
id_booking INTEGER PRIMARY KEY AUTOINCREMENT,
id_pelanggan INTEGER NOT NULL,
id_layanan INTEGER NOT NULL,
id_kapster INTEGER NOT NULL,
tanggal_booking DATE NOT NULL,
waktu_booking TIME NOT NULL,
status TEXT DEFAULT 'Dipesan',
catatan TEXT,
FOREIGN KEY(id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY(id_layanan) REFERENCES layanan(id_layanan),
FOREIGN KEY(id_kapster) REFERENCES kapster(id_kapster)
);")
## [1] 0
# Tabel Transaksi
dbExecute(con, "
CREATE TABLE transaksi (
id_transaksi INTEGER PRIMARY KEY AUTOINCREMENT,
id_booking INTEGER NOT NULL,
metode_bayar TEXT DEFAULT 'Tunai',
total_bayar INTEGER NOT NULL,
tanggal_bayar DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY(id_booking) REFERENCES booking(id_booking)
);")
## [1] 0
cat("Kelima tabel berhasil dibuat.\n")
## Kelima tabel berhasil dibuat.
# Data Pelanggan
dbExecute(con, "
INSERT INTO pelanggan (nama, no_hp, email) VALUES
('Ahyum', '08123456789', 'ahyum@email.com'),
('Rifqy', '08234567890', 'rifqy@email.com'),
('Bagas', '08345678901', 'ezhar@email.com');")
## [1] 3
# Data Layanan
dbExecute(con, "
INSERT INTO layanan (nama_layanan, harga, durasi) VALUES
('Potong Rambut', 50000, 30),
('Cukur Rambut', 30000, 20),
('Styling Rambut', 40000, 40),
('Facial Treatment', 80000, 60);")
## [1] 4
# Data Kapster
dbExecute(con, "
INSERT INTO kapster (nama_kapster, spesialisasi, pengalaman) VALUES
('Ezhar', 'Potong Modern', 5),
('Shafwan', 'Cukur Tradisional', 8),
('Eca', 'Styling & Coloring', 4);")
## [1] 3
# Data Booking
dbExecute(con, "
INSERT INTO booking (id_pelanggan, id_layanan, id_kapster, tanggal_booking, waktu_booking, status) VALUES
(1, 1, 1, '2025-06-01', '14:00', 'Selesai'),
(2, 3, 3, '2025-06-01', '16:30', 'Dipesan'),
(3, 2, 2, '2025-06-02', '10:00', 'Dipesan');")
## [1] 3
# Data Transaksi
dbExecute(con, "
INSERT INTO transaksi (id_booking, metode_bayar, total_bayar) VALUES
(1, 'Tunai', 50000);")
## [1] 1
cat("Data berhasil dimasukkan ke semua tabel.\n")
## Data berhasil dimasukkan ke semua tabel.
booking_data <- dbGetQuery(con, "
SELECT
b.id_booking,
p.nama AS pelanggan,
l.nama_layanan,
k.nama_kapster,
b.tanggal_booking,
b.waktu_booking,
b.status
FROM booking b
JOIN pelanggan p ON b.id_pelanggan = p.id_pelanggan
JOIN layanan l ON b.id_layanan = l.id_layanan
JOIN kapster k ON b.id_kapster = k.id_kapster
ORDER BY b.tanggal_booking DESC;")
kable(booking_data, caption = "Data Booking Barbershop")
| id_booking | pelanggan | nama_layanan | nama_kapster | tanggal_booking | waktu_booking | status |
|---|---|---|---|---|---|---|
| 3 | Bagas | Cukur Rambut | Shafwan | 2025-06-02 | 10:00 | Dipesan |
| 1 | Ahyum | Potong Rambut | Ezhar | 2025-06-01 | 14:00 | Selesai |
| 2 | Rifqy | Styling Rambut | Eca | 2025-06-01 | 16:30 | Dipesan |
transaksi_data <- dbGetQuery(con, "
SELECT
t.id_transaksi,
p.nama AS pelanggan,
l.nama_layanan,
t.metode_bayar,
t.total_bayar,
t.tanggal_bayar
FROM transaksi t
JOIN booking b ON t.id_booking = b.id_booking
JOIN pelanggan p ON b.id_pelanggan = p.id_pelanggan
JOIN layanan l ON b.id_layanan = l.id_layanan;")
kable(transaksi_data, caption = "Data Transaksi")
| id_transaksi | pelanggan | nama_layanan | metode_bayar | total_bayar | tanggal_bayar |
|---|---|---|---|---|---|
| 1 | Ahyum | Potong Rambut | Tunai | 50000 | 2025-12-10 15:23:20 |
Sistem basis data untuk manajemen pelanggan barbershop telah berhasil diimplementasikan menggunakan SQLite dalam R. Sistem ini mampu mengelola data pelanggan, layanan, kapster, booking, dan transaksi secara terstruktur.