A.Program

1. Import library

pengguna menginport library yang diperlukan agar dapat mengakses SQL pada server MySQL yang dimiliki

library(RSQLite)
## Warning: package 'RSQLite' was built under R version 4.5.2

2.Membuat dan mengakses Database baru

pengguna membuat sebuah database baru pada server yang telah dimasukkan

db <- dbConnect(SQLite(), "reservasi_studio.db")

3.Membuat tabel baru didalam Database

# Tabel pelanggan
dbExecute(db, "
CREATE TABLE IF NOT EXISTS pelanggan (
    id_pelanggan INTEGER PRIMARY KEY,
    nama TEXT,
    no_hp TEXT,
    email TEXT
);
")

# Tabel studio
dbExecute(db, "
CREATE TABLE IF NOT EXISTS studio (
    id_studio INTEGER PRIMARY KEY,
    nama_studio TEXT,
    harga_per_jam INTEGER
);
")

# Tabel reservasi
dbExecute(db, "
CREATE TABLE IF NOT EXISTS reservasi (
    id_reservasi INTEGER PRIMARY KEY,
    id_pelanggan INTEGER,
    id_studio INTEGER,
    tanggal TEXT,
    durasi_jam INTEGER,
    total_harga INTEGER,
    FOREIGN KEY(id_pelanggan) REFERENCES pelanggan(id_pelanggan),
    FOREIGN KEY(id_studio) REFERENCES studio(id_studio)
);
")

4.Menginput Data kedalam tabel data yang telah dibuat

#input pelanggan
dbExecute(db, "
INSERT INTO pelanggan (nama, no_hp, email) VALUES
('Aldi Putra', '0812345678', 'aldi@mail.com'),
('Nadia Sari', '0823456789', 'nadia@mail.com'),
('Rangga Pratama', '0834567890', 'rangga@mail.com');
")

#input studio
dbExecute(db, "
INSERT INTO studio (nama_studio, harga_per_jam) VALUES
('Studio Premium', 200000),
('Studio Basic', 120000);
")

#input reservasi
dbExecute(db, "
INSERT INTO reservasi (id_pelanggan, id_studio, tanggal, durasi_jam, total_harga) VALUES
(1, 1, '2025-01-01', 2, 400000),
(1, 2, '2025-01-05', 1, 120000),
(2, 1, '2025-01-03', 3, 600000),
(2, 2, '2025-01-07', 2, 240000),
(3, 1, '2025-01-10', 1, 200000),
(3, 2, '2025-01-11', 4, 480000);
")

B. Studi Kasus

Topik:

Sistem basis data pada sistem reservasi Studio Foto

Deskripsi

Membuat sistem basis data untuk mengelola data investasi, termasuk data portofolio, transaksi, dan kinerja investasi.

1. Tabel yang digunakan

A. Tabel pelanggan

  • id pelanggan
  • nama
  • no hp
  • emali
tampilkan.pelanggan <- dbGetQuery(db, "SELECT * FROM pelanggan")
print(tampilkan.pelanggan)
##   id_pelanggan           nama      no_hp           email
## 1            1     Aldi Putra 0812345678   aldi@mail.com
## 2            2     Nadia Sari 0823456789  nadia@mail.com
## 3            3 Rangga Pratama 0834567890 rangga@mail.com

B. Tabel Studio

  • id studio
  • nama studio
  • harga per jam
tampilkan.studio <- dbGetQuery(db, "SELECT * FROM studio")
print(tampilkan.studio)
##   id_studio    nama_studio harga_per_jam
## 1         1 Studio Premium        200000
## 2         2   Studio Basic        120000

C. Tabel reservasi

  • id pelanggan
  • id studio
  • tanggal
  • durasi jam
  • total harga
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
##   id_reservasi id_pelanggan id_studio    tanggal durasi_jam total_harga
## 1            1            1         1 2025-01-01          2      400000
## 2            3            2         1 2025-01-03          3      600000
## 3            4            2         2 2025-01-07          2      240000
## 4            5            3         1 2025-01-10          1      200000
## 5            6            3         2 2025-01-11          5      600000

2. mengurutkan data di tabel yang ada pada database

Pemilik reservasi studio mengurutkan data terbesar ke terkecil dan data terkecil ke terbesar untuk melihat perkembangan keuangan

dbGetQuery(db, "
SELECT * FROM reservasi
ORDER BY total_harga ASC
")
##   id_reservasi id_pelanggan id_studio    tanggal durasi_jam total_harga
## 1            5            3         1 2025-01-10          1      200000
## 2            4            2         2 2025-01-07          2      240000
## 3            1            1         1 2025-01-01          2      400000
## 4            3            2         1 2025-01-03          3      600000
## 5            6            3         2 2025-01-11          5      600000
dbGetQuery(db, "
SELECT * FROM reservasi
ORDER BY total_harga DESC
")
##   id_reservasi id_pelanggan id_studio    tanggal durasi_jam total_harga
## 1            3            2         1 2025-01-03          3      600000
## 2            6            3         2 2025-01-11          5      600000
## 3            1            1         1 2025-01-01          2      400000
## 4            4            2         2 2025-01-07          2      240000
## 5            5            3         1 2025-01-10          1      200000

3. Mengupdate Data

Pemilik reservasi mengupdate/mengubah data karena terjadi permintaan perubahan durasi jam dari id reservasi yang ke -6 dari customer jadi otomatis total harga nya akan berubah.

dbExecute(db, "
UPDATE reservasi
SET durasi_jam = 5,
    total_harga = 600000
WHERE id_reservasi = 6
")
## [1] 1
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
##   id_reservasi id_pelanggan id_studio    tanggal durasi_jam total_harga
## 1            1            1         1 2025-01-01          2      400000
## 2            3            2         1 2025-01-03          3      600000
## 3            4            2         2 2025-01-07          2      240000
## 4            5            3         1 2025-01-10          1      200000
## 5            6            3         2 2025-01-11          5      600000

4. Menghapus Data

Pemilik reservasi studio foto menghapus salah satu data preservasi dengan id reservasi yang ke 2 atas permintaan pelanggan itu sendiri.

dbExecute(db, "
DELETE FROM reservasi
WHERE id_reservasi = 2
")
## [1] 0
tampilkan.reservasi <- dbGetQuery(db, "SELECT * FROM reservasi")
print(tampilkan.reservasi)
##   id_reservasi id_pelanggan id_studio    tanggal durasi_jam total_harga
## 1            1            1         1 2025-01-01          2      400000
## 2            3            2         1 2025-01-03          3      600000
## 3            4            2         2 2025-01-07          2      240000
## 4            5            3         1 2025-01-10          1      200000
## 5            6            3         2 2025-01-11          5      600000

5. Inner join

Pemilik menggunakan program inner join untuk melihat id reservasi ,nama pelanggan, nama studio yang digunakan, durasi jam dan total harga dari masing-masing studio yang digunakan.

dbGetQuery(db, "
SELECT r.id_reservasi, p.nama, s.nama_studio, r.tanggal, r.durasi_jam, r.total_harga
FROM reservasi r
INNER JOIN pelanggan p ON r.id_pelanggan = p.id_pelanggan
INNER JOIN studio s ON r.id_studio = s.id_studio
")
##   id_reservasi           nama    nama_studio    tanggal durasi_jam total_harga
## 1            1     Aldi Putra Studio Premium 2025-01-01          2      400000
## 2            3     Nadia Sari Studio Premium 2025-01-03          3      600000
## 3            4     Nadia Sari   Studio Basic 2025-01-07          2      240000
## 4            5 Rangga Pratama Studio Premium 2025-01-10          1      200000
## 5            6 Rangga Pratama   Studio Basic 2025-01-11          5      600000

6. SUM dan AVG

Pemilik reservasi studio foto melihat total pendapatan dan rata-rata durasi dari dari total keseluruhan hasil penggunaan studio dari tanggal 01 Januari 2025 sampai 11 Januari 2025.

dbGetQuery(db, "
SELECT 
    SUM(total_harga) AS total_pendapatan,
    AVG(durasi_jam) AS rata_rata_durasi
FROM reservasi
")
##   total_pendapatan rata_rata_durasi
## 1          2040000              2.6

7. Laporan Akhir

Data transaksi yang sudah dilakukan dari tanggal 01 januari 2025 sampai 11 januari 2025 bisa dilihat di tabel di bawah ini:

query_laporan <- "
SELECT 
    r.id_reservasi AS id_reservasi,
    p.nama AS pelanggan,
    s.nama_studio AS studio,
    r.tanggal AS tanggal,
    r.durasi_jam AS durasi,
    r.total_harga AS total
FROM reservasi r
JOIN pelanggan p ON r.id_pelanggan = p.id_pelanggan
JOIN studio s ON r.id_studio = s.id_studio
ORDER BY r.id_reservasi ASC
"

# Menjalankan query laporan
laporan <- dbGetQuery(db, query_laporan)

# Menampilkan laporan
print(laporan)
##   id_reservasi      pelanggan         studio    tanggal durasi  total
## 1            1     Aldi Putra Studio Premium 2025-01-01      2 400000
## 2            3     Nadia Sari Studio Premium 2025-01-03      3 600000
## 3            4     Nadia Sari   Studio Basic 2025-01-07      2 240000
## 4            5 Rangga Pratama Studio Premium 2025-01-10      1 200000
## 5            6 Rangga Pratama   Studio Basic 2025-01-11      5 600000