BAB I PENDAHULUAN 1.1 Latar Belakang Sistem penjualan merupakan salah satu komponen penting dalam operasional usaha kuliner, termasuk toko kue. Dengan meningkatnya variasi produk, transaksi harian, dan kebutuhan pencatatan yang akurat, diperlukan sistem basis data yang mampu mencatat data kue, pelanggan, transaksi, dan detail penjualan secara terstruktur. Penggunaan database relasional membantu pemilik usaha mengolah data penjualan untuk kebutuhan stok, laporan pendapatan, dan evaluasi produk yang paling diminati. Pada studi kasus ini dirancang sebuah sistem basis data sederhana untuk Sistem Penjualan Kue, kemudian diimplementasikan menggunakan SQL pada R melalui package RSQLite. Studi kasus ini mencakup operasi dasar seperti CREATE, INSERT, SELECT, UPDATE, DELETE, serta penggunaan JOIN dan fungsi agregat. 1.2 Tujuan Tujuan dilakukannya studi kasus: Sistem Penjualan Kue yaitu sebagai berikut: 1. Membangun struktur basis data yang dapat merepresentasikan proses penjualan kue. 2. Menerapkan bahasa SQL dalam R untuk melakukan pengelolaan data penjualan. 3. Menyediakan sistem pencatatan penjualan yang dapat digunakan untuk menganalisis kinerja produk. 1.3 Ruang Lingkup Ruang lingkup studi kasus ini mencakup pencatatan data kue, data pelanggan, transaksi penjualan, serta detail setiap item kue yang dibeli. Selain itu, ruang lingkup ini juga mencakup proses pengolahan dan penyajian laporan penjualan berdasarkan data yang telah tersimpan dalam database. Studi kasus ini tidak mencakup sistem pembayaran digital, pengaturan stok otomatis, maupun manajemen kasir secara real-time.

BAB II PERANCANGAN SISTEM BASIS DATA 2.1 Struktur Tabel dan Relasi Antar Entitas Dalam sistem basis data penjualan kue, dirancang empat tabel utama yang mewakili proses bisnis penjualan secara keseluruhan. Setiap tabel memiliki fungsi spesifik dan saling terhubung melalui primary key dan foreign key sehingga alur data dapat dikelola dengan rapi serta menjaga integritas informasi di dalam sistem. 1. Tabel kue berfungsi untuk menyimpan informasi mengenai seluruh produk kue yang dijual oleh toko. Data yang dicatat meliputi id_kue sebagai primary key, nama kue, kategori, serta harga jual kue tersebut. Tabel ini menjadi acuan ketika transaksi dilakukan, karena setiap pembelian harus merujuk pada produk yang tercatat di dalam tabel kue. Dengan adanya tabel ini, toko dapat mengelola daftar menu secara terstruktur, memantau jenis produk yang tersedia, dan memastikan harga yang digunakan dalam transaksi sudah sesuai. 2. Tabel pelanggan digunakan untuk menyimpan informasi dasar mengenai pelanggan yang melakukan pembelian. Data ini meliputi id_pelanggan sebagai primary key, nama pelanggan, dan alamat. Tabel ini penting karena setiap transaksi yang masuk harus terhubung dengan pelanggan tertentu, sehingga toko dapat memantau pola pembelian, mengidentifikasi pelanggan tetap, atau melakukan analisis terkait preferensi pelanggan. Keberadaan tabel pelanggan juga memungkinkan sistem menyimpan riwayat transaksi secara individual. 3. Tabel transaksi mencatat semua transaksi penjualan yang terjadi di toko kue. Informasi dalam tabel ini meliputi id_transaksi sebagai primary key, tanggal transaksi, serta id_pelanggan sebagai foreign key yang menghubungkan transaksi dengan pelanggan yang melakukan pembelian. Tabel ini berfungsi sebagai catatan utama penjualan, sehingga setiap pembelian direkam sesuai waktu dan identitas pembelinya. Data pada tabel ini sangat penting untuk pembuatan laporan pendapatan harian, bulanan, maupun tahunan. 4. Tabel detail_transaksi merupakan bagian penting yang mencatat rincian dari setiap transaksi. Tabel ini menyimpan id_detail sebagai primary key, id_transaksi dan id_kue sebagai foreign key, jumlah item yang dibeli, serta subtotal harga. Tabel ini memungkinkan satu transaksi memiliki lebih dari satu jenis kue, sehingga struktur penjualan dapat dicatat secara rinci. Tabel detail_transaksi juga digunakan untuk menghitung total pendapatan, mengetahui produk yang paling banyak dibeli, serta menganalisis kuantitas penjualan setiap produk. 2.2 Skema Relasional (ERD Sederhana) Relasi antar tabel dalam sistem ini digambarkan sebagai berikut: Pelanggan ───< Transaksi ───< Detail_Transaksi >─── Kue Relasi pada sistem penjualan kue menunjukkan bahwa satu pelanggan dapat memiliki banyak transaksi, karena dalam praktiknya seorang pelanggan dapat melakukan pembelian lebih dari satu kali pada hari yang berbeda maupun dalam periode tertentu. Setiap transaksi yang dilakukan pelanggan kemudian dapat berisi lebih dari satu item kue, sehingga transaksi memiliki hubungan one-to-many dengan tabel detail_transaksi. Hal ini memungkinkan pencatatan pembelian beberapa jenis kue dalam satu nomor transaksi yang sama. Selain itu, satu jenis kue dapat muncul pada banyak detail transaksi karena produk yang sama dapat dibeli oleh pelanggan yang berbeda pada waktu yang berbeda pula. Dengan demikian, relasi antar tabel ini menggambarkan alur penjualan secara lengkap mulai dari pelanggan, transaksi, hingga rincian item kue yang dibeli dalam setiap transaksi.

BAB III IMPLEMENTASI DAN ANALISIS SQL 3.1 Membuat Koneksi Database Program: library(DBI) library(RSQLite) library(dplyr) con <- dbConnect(SQLite(), “:memory:”) Output: [1] 0 Langkah pertama dalam membangun sistem basis data penjualan kue adalah membuat koneksi antara R dan SQLite. Paket DBI dan RSQLite digunakan untuk menghubungkan R dengan database sehingga seluruh perintah SQL dapat dijalankan langsung melalui R Studio. Pada tahap ini, database dibuat secara in-memory, artinya seluruh data disimpan sementara di memori komputer tanpa membuat file fisik. Perintah koneksi tersebut akan menghasilkan sebuah database kosong yang nantinya menjadi tempat penyimpanan seluruh tabel seperti tabel kue, pelanggan, transaksi, dan detail_transaksi. Output [1] 0 menunjukkan bahwa perintah telah berjalan dengan benar dan koneksi database berhasil dibuat tanpa error. 3.2 Membuat tabel Program: dbExecute(con, ” CREATE TABLE kue( id_kue INTEGER PRIMARY KEY, nama_kue TEXT, kategori TEXT, harga INTEGER ); “)

dbExecute(con, ” CREATE TABLE pelanggan( id_pelanggan INTEGER PRIMARY KEY, nama TEXT, alamat TEXT ); “)

dbExecute(con, ” CREATE TABLE transaksi( id_transaksi INTEGER PRIMARY KEY, tanggal TEXT, id_pelanggan INTEGER, FOREIGN KEY(id_pelanggan) REFERENCES pelanggan(id_pelanggan) ); “)

dbExecute(con, ” CREATE TABLE detail_transaksi( id_detail INTEGER PRIMARY KEY, id_transaksi INTEGER, id_kue INTEGER, jumlah INTEGER, subtotal INTEGER, FOREIGN KEY(id_transaksi) REFERENCES transaksi(id_transaksi), FOREIGN KEY(id_kue) REFERENCES kue(id_kue) ); “) Output: [1] 0 [1] 0 [1] 0 [1] 0 Kemudian dibuat empat tabel utama yang dipakai dalam sistem penjualan kue, yaitu tabel kue, pelanggan, transaksi, dan detail_transaksi. Tabel kue digunakan untuk menyimpan daftar produk kue beserta kategori dan harganya. Tabel pelanggan mencatat data pembeli seperti nama dan alamat. Tabel transaksi berfungsi menyimpan informasi setiap pembelian yang dilakukan pelanggan, termasuk tanggal dan siapa yang membeli. Sementara itu, tabel detail_transaksi mencatat rincian barang yang dibeli dalam satu transaksi, seperti jenis kue, jumlah, dan subtotal harga. Setiap tabel dihubungkan dengan primary key dan foreign key agar data saling terkait dan mudah ditelusuri. Output [1] 0 pada setiap perintah menandakan bahwa tabel berhasil dibuat tanpa ada kesalahan. 3.3 Mengisi Data Program: dbExecute(con,” INSERT INTO kue VALUES (1, ‘Brownies Coklat’, ‘Cake’, 45000), (2, ‘Kue Lapis’, ‘Tradisional’, 15000), (3, ‘Cheesecake’, ‘Cake’, 55000); “)

dbExecute(con, ” INSERT INTO pelanggan VALUES (1, ‘Ayu Lestari’, ‘Jl. Anggrek’), (2, ‘Rafi Pratama’, ‘Jl. Matahari’); “)

dbExecute(con, ” INSERT INTO transaksi VALUES (11, ‘2025-02-01’, 1), (12, ‘2025-02-01’, 2); “)

dbExecute(con, ” INSERT INTO detail_transaksi VALUES (1, 11, 1, 2, 90000), (2, 11, 2, 3, 45000), (3, 12, 3, 1, 55000); “) Output: [1] 3 [1] 2 [1] 2 [1] 3 Selanjutnya dimasukkan data awal ke dalam empat tabel yang sudah dibuat. Tabel kue diisi dengan tiga jenis kue lengkap dengan kategori dan harganya. Tabel pelanggan berisi dua orang pelanggan yang nantinya melakukan pembelian. Tabel transaksi mencatat dua transaksi yang terjadi pada tanggal yang sama, masing-masing milik pelanggan yang berbeda. Selanjutnya, tabel detail_transaksi menyimpan rincian kue yang dibeli pada setiap transaksi, seperti jenis kue, jumlah, dan subtotal harga. Output berupa angka menunjukkan jumlah baris data yang berhasil dimasukkan ke dalam masing-masing tabel, sehingga dapat dipastikan seluruh data telah tersimpan dengan benar.dapat dipastikan bahwa seluruh tabel telah terisi sesuai kebutuhan. 3.4 Menampilkan tabel Program: dbListTables(con) dbGetQuery(con,”SELECT * FROM kue”) Output: > dbListTables(con) [1] “detail_transaksi” [2] “kue”
[3] “pelanggan”
[4] “transaksi” > dbGetQuery(con, “SELECT * FROM kue”) id_kue nama_kue kategori harga 1 1 Brownies Coklat Cake 45000 2 2 Kue Lapis Tradisional 15000 3 3 Cheesecake Cake 55000 Pada bagian ini dilakukan pengecekan terhadap tabel-tabel yang sudah dibuat dan data yang telah dimasukkan. Perintah dbListTables(con) digunakan untuk menampilkan daftar seluruh tabel yang ada di dalam database, yaitu detail_transaksi, kue, pelanggan, dan transaksi. Setelah itu, perintah dbGetQuery(con, “SELECT * FROM kue”) digunakan untuk melihat isi tabel kue. Hasil output menunjukkan bahwa tabel kue sudah berisi tiga jenis kue, yaitu Brownies Coklat, Kue Lapis, dan Cheesecake, lengkap dengan kategori dan harga masing-masing. Hal ini menandakan bahwa proses pembuatan tabel dan pengisian data sebelumnya telah berhasil dilakukan tanpa error. 3.5 Mengurutkan Data Pengurutan data dilakukan untuk melihat perbandingan harga antar produk secara jelas. Program: dbGetQuery(con, ” SELECT * FROM kue ORDER BY harga DESC; “) Output: id_kue nama_kue kategori harga 1 3 Cheesecake Cake 55000 2 1 Brownies Coklat Cake 45000 3 2 Kue Lapis Tradisional 15000

Pada bagian ini digunakan perintah SQL untuk mengurutkan data kue berdasarkan harga, dari yang paling mahal hingga yang paling murah. Perintah ORDER BY harga DESC membuat hasil ditampilkan secara menurun (descending), sehingga kue dengan harga tertinggi muncul di urutan pertama. Output menunjukkan bahwa Cheesecake menjadi kue termahal dengan harga 55.000, diikuti Brownies Coklat dengan harga 45.000, dan Kue Lapis sebagai yang termurah dengan harga 15.000. Hasil ini menunjukkan bahwa proses pengurutan berjalan dengan benar dan membantu melihat perbandingan harga antar produk secara jelas.

3.6 Menampilkan Produk dengan Harga di Atas Rp20.000 Untuk melihat kue yang memiliki harga lebih tinggi, dilakukan penyaringan data berdasarkan nilai harga tertentu. Program: dbGetQuery(con, ” SELECT * FROM kue WHERE harga > 20000; “) Output: id_kue nama_kue kategori harga 1 1 Brownies Coklat Cake 45000 2 3 Cheesecake Cake 55000 Pada tahap ini digunakan perintah SQL untuk mengurutkan data kue berdasarkan harga, dari yang paling mahal hingga yang paling murah. Perintah ORDER BY harga DESC membuat hasil ditampilkan secara menurun (descending), sehingga kue dengan harga tertinggi muncul di urutan pertama. Output menunjukkan bahwa Cheesecake menjadi kue termahal dengan harga 55.000, diikuti Brownies Coklat dengan harga 45.000, dan Kue Lapis sebagai yang termurah dengan harga 15.000. Hasil ini menunjukkan bahwa proses pengurutan berjalan dengan benar dan membantu melihat perbandingan harga antar produk secara jelas. 3.7 UPDATE (Mengubah Harga Kue) Untuk memperbarui informasi kue yang mengalami perubahan harga, dilakukan proses pengeditan data menggunakan perintah UPDATE agar harga terbaru tercatat dengan benar di dalam database. Program: dbExecute(con,” UPDATE cctv SET status = ‘Aktif’ WHERE id_cctv = 103; “)

dbGetQuery(con, “SELECT * FROM cctv WHERE id_cctv = 103”) Output: [1] 1 id_kue nama_kue kategori harga 1 1 Brownies Coklat Cake 50000 Pada program tersebut, perintah UPDATE digunakan untuk mengganti harga Brownies Coklat menjadi 50.000 pada tabel kue. Setelah itu, perintah SELECT dijalankan untuk memastikan bahwa perubahan telah berhasil tersimpan. Output [1] 1 menandakan bahwa satu baris data berhasil diperbarui, dan hasil tampilan tabel menunjukkan bahwa harga Brownies Coklat sudah berubah menjadi 50.000 sesuai dengan perintah yang diberikan. 3.8 Menghapus Data Pelanggan (DELETE) Untuk menghapus data pelanggan yang tidak lagi diperlukan atau tercatat secara salah, digunakan perintah DELETE agar informasi tersebut tidak disimpan lagi di dalam database. Program: dbExecute(con, ” DELETE FROM pelanggan WHERE id_pelanggan = 2; “) Output: [1] 0 Pada program tersebut, perintah DELETE digunakan untuk menghapus data pelanggan dengan id_pelanggan = 2 dari tabel pelanggan. Setelah perintah dijalankan, muncul output [1] 0 yang menunjukkan bahwa perintah berhasil dieksekusi tanpa error. 3.9 Menampilkan Data Penjualan Lengkap (INNER JOIN) Untuk menampilkan informasi penjualan secara lengkap, dilakukan penggabungan beberapa tabel menggunakan perintah JOIN agar data pelanggan, transaksi, dan kue yang dibeli dapat ditampilkan dalam satu tampilan. Program: dbGetQuery(con,” SELECT t.id_transaksi, p.nama AS pelanggan, k.nama_kue, d.jumlah, d.subtotal, t.tanggal FROM detail_transaksi d JOIN transaksi t ON d.id_transaksi = t.id_transaksi JOIN pelanggan p ON t.id_pelanggan = p.id_pelanggan JOIN kue k ON d.id_kue = k.id_kue; “) Output:

Pada program tersebut, JOIN digunakan untuk menghubungkan tabel detail_transaksi, transaksi, pelanggan, dan kue sehingga informasi seperti nama pelanggan, jenis kue yang dibeli, jumlah, subtotal, dan tanggal transaksi dapat ditampilkan secara lengkap. Setiap tabel dihubungkan melalui primary key dan foreign key, sehingga data yang muncul sesuai dengan transaksi yang sebenarnya terjadi. Output yang dihasilkan menunjukkan dua baris data, yaitu transaksi milik Ayu Lestari pada tanggal 1 Februari 2025 dengan pembelian Brownies Coklat sebanyak 2 potong dan Kue Lapis sebanyak 3 potong. Hasil ini menunjukkan bahwa proses JOIN berjalan dengan benar dan mampu menghasilkan laporan penjualan yang terstruktur dan mudah dibaca. 3.10 Menggunakan Fungsi Agregat (Total Pendapatan) Untuk mengetahui jumlah pendapatan yang diperoleh dari seluruh transaksi penjualan, digunakan fungsi agregat SUM agar total nilai penjualan dapat dihitung secara otomatis. Program: dbGetQuery(con, ” SELECT SUM(subtotal) AS total_pendapatan FROM detail_transaksi; “) Output: total_pendapatan 1 190000 Pada program tersebut, perintah SQL SUM(subtotal) digunakan untuk menjumlahkan seluruh nilai subtotal yang ada pada tabel detail_transaksi. Subtotal ini merupakan hasil perhitungan jumlah kue yang dibeli dikalikan dengan harga masing-masing produk. Hasil output menunjukkan bahwa total pendapatan yang tercatat dalam database adalah sebesar 190.000. Hal ini menandakan bahwa fungsi agregat bekerja dengan baik dan mampu memberikan ringkasan nilai penjualan secara cepat dan akurat. 3.11 Laporan Akhir Sistem penjualan Kue Program: query_laporan <-” SELECT t.id_transaksi, p.nama AS nama_pelanggan, k.nama_kue, d.jumlah, d.subtotal, t.tanggal FROM detail_transaksi d JOIN transaksi t ON d.id_transaksi = t.id_transaksi JOIN pelanggan p ON t.id_pelanggan = p.id_pelanggan JOIN kue k ON d.id_kue = k.id_kue; ”

laporan <- dbGetQuery(con, query_laporan) print(laporan) Output:

Bagian terakhir adalah penyusunan laporan akhir dengan menggabungkan seluruh komponen penting dari sistem, meliputi informasi transaksi, nama pelanggan, jenis kue yang dibeli, jumlah pembelian, subtotal harga, serta tanggal terjadinya transaksi. Laporan ini memberikan gambaran lengkap mengenai seluruh aktivitas penjualan dalam satu periode, mulai dari siapa yang membeli hingga produk apa saja yang terjual. Informasi yang tersaji secara terstruktur dan terpadu ini sangat bermanfaat sebagai bahan evaluasi penjualan, pemantauan produk yang paling diminati, serta penyusunan laporan penjualan harian maupun bulanan dalam sistem manajemen penjualan kue.

BAB IV KESIMPULAN Berdasarkan implementasi sistem penjualan kue menggunakan basis data relasional, dapat disimpulkan bahwa penggunaan SQL dalam R sangat efektif untuk mengelola data penjualan. Mulai dari pembuatan tabel, pemasukan data, pemrosesan transaksi, hingga pembuatan laporan akhir semuanya dapat dilakukan dengan cepat dan terstruktur. Penggunaan perintah SQL seperti SELECT, INSERT, UPDATE, DELETE, JOIN, dan agregat memberikan fleksibilitas dalam pengolahan data. Sistem ini dapat menjadi dasar pengembangan sistem penjualan kue yang lebih kompleks seperti pengelolaan stok, laporan bulanan, dan integrasi kasir.