Topik : Sistem Donasi dan Penggalangan Dana Online untuk Bencana Alam

A. PROGRAM

Membuat dan memasukkan data pada tabel

1. Import Library

Pengguna Mengimport library yang dibutuhkan untuk mengakses SQL pada server MySQL yang dimiliki

library(RMySQL)
## Warning: package 'RMySQL' was built under R version 4.5.2
## Loading required package: DBI
## Warning: package 'DBI' was built under R version 4.5.2
library(DBI)

2. Create Database : Digunakan untuk membuat database baru

dbExecute(server, "CREATE DATABASE IF NOT EXISTS `DonasiOnline`")
## [1] 0
dbExecute(server, "USE `DonasiOnline`")
## [1] 0

3. Drop : Digunakan untuk menghapus Tabel dan Database

dbExecute(server,"DROP TABLE IF EXISTS DONASI;")
## [1] 0
dbExecute(server,"DROP TABLE IF EXISTS DONATUR;")
## [1] 0
dbExecute(server,"DROP TABLE IF EXISTS BENCANA;")
## [1] 0

4. Create Table : Digunakan untuk membuat tabel data baru dalam sebuah database.

#Tabel Bencana
dbExecute(server, "
CREATE TABLE IF NOT EXISTS BENCANA(
  id_bencana VARCHAR(10) PRIMARY KEY,
  nama_bencana VARCHAR(100),
  lokasi VARCHAR(100),
  tanggal DATE,
  status VARCHAR(20)
)
")
## [1] 0
#Tabel Donatur
dbExecute(server, "
CREATE TABLE IF NOT EXISTS DONATUR(
  id_donatur VARCHAR(10) PRIMARY KEY,
  nama VARCHAR(100) NOT NULL,
  email VARCHAR(100) NOT NULL,
  nohp VARCHAR(20)
)
")
## [1] 0
#Tabel Donasi
dbExecute(server, "
CREATE TABLE IF NOT EXISTS DONASI(
  id_donasi VARCHAR(10) PRIMARY KEY,
  id_bencana VARCHAR(10),
  id_donatur VARCHAR(10),
  nominal INT,
  tanggal DATE,
  metode VARCHAR(20),
  FOREIGN KEY(id_bencana) REFERENCES BENCANA(id_bencana),
  FOREIGN KEY(id_donatur) REFERENCES DONATUR(id_donatur)
)
")
## [1] 0

5. Delete : Digunakan untuk penghapusan data pada Tabel Database

dbExecute(server, "DELETE FROM DONASI")   # hapus data donasi dulu (foreign key)
## [1] 0
dbExecute(server, "DELETE FROM DONATUR") # hapus data donatur
## [1] 0
dbExecute(server, "DELETE FROM BENCANA") # hapus data bencana
## [1] 0

6. Insert Into : Digunakan untuk menambahkan data baru di tabel database.

#Tabel Bencana
dbExecute(server,"
INSERT INTO BENCANA VALUES
('BCN001','Gempa Cianjur','Cianjur','2023-02-01','Aktif'),
('BCN002','Banjir Semarang','Semarang','2023-03-10','Aktif'),
('BCN003','Erupsi Semeru','Lumajang','2023-02-25','Selesai'),
('BCN004','Tsunami Aceh','Aceh','2023-04-30','Aktif'),
('BCN005','Angin Puting Beliung','Garut','2023-05-12','Aktif');
")
## [1] 5
#Tabel Donatur
dbExecute(server,"
INSERT INTO DONATUR VALUES
('DTR001','Andi Saputra','andi@gmail.com','0812123123'),
('DTR002','Bella Rahma','bella@gmail.com','0813123123'),
('DTR003','Chandra Putra','chandra@gmail.com','0821121111'),
('DTR004','Dewi Lestari','dewi@gmail.com','0812232323'),
('DTR005','Febrian Nur','febrian@gmail.com','0822332332'),
('DTR006','Gina Aprilia','gina@gmail.com','081234111'),
('DTR007','Hendra Salim','hendra@gmail.com','081452313'),
('DTR008','Indah Maharani','indah@gmail.com','0812349898'),
('DTR009','Joko Prasetyo','joko@gmail.com','081225212'),
('DTR010','Karmila Putri','karmila@gmail.com','081228812'),
('DTR011','Lutfi Idris','lutfi@gmail.com','081399321'),
('DTR012','Meisya Anggraini','meisya@gmail.com','081299222')
")
## [1] 12
#Tabel Donasi
dbExecute(server,"
INSERT INTO DONASI VALUES
('DNS001','BCN001','DTR001',500000,'2023-02-10','Transfer'),
('DNS002','BCN001','DTR004',750000,'2023-02-11','QRIS'),
('DNS003','BCN002','DTR002',1000000,'2023-03-15','Transfer'),
('DNS004','BCN003','DTR003',300000,'2023-02-01','OVO'),
('DNS005','BCN004','DTR005',1250000,'2023-04-30','Transfer'),
('DNS006','BCN005','DTR006',450000,'2023-05-15','QRIS'),
('DNS007','BCN002','DTR007',600000,'2023-03-18','Transfer'),
('DNS008','BCN003','DTR008',850000,'2023-04-01','OVO'),
('DNS009','BCN001','DTR009',200000,'2023-02-15','QRIS'),
('DNS010','BCN005','DTR010',300000,'2023-05-20','DANA'),
('DNS011','BCN004','DTR011',700000,'2023-04-29','Transfer'),
('DNS012','BCN003','DTR012',950000,'2023-02-05','QRIS'),
('DNS013','BCN002','DTR001',1200000,'2023-03-21','Transfer'),
('DNS014','BCN005','DTR004',400000,'2023-05-23','OVO')
")
## [1] 14

7. Select : Digunakan untuk memilih table dari database.

### Melihat nilai tabel data pada database
# Tabel Bencana
tampilkan.bencana <- dbGetQuery(server, "SELECT * FROM BENCANA;")
print(tampilkan.bencana)

# Tabel Donatur
tampilkan.donatur <- dbGetQuery(server, "SELECT * FROM DONATUR;")
print(tampilkan.donatur)

# Tabel Donasi
tampilkan.donasi <- dbGetQuery(server, "SELECT * FROM DONASI;")
print(tampilkan.donasi)

8. Update : Digunakan untuk mengubah/memperbarui data di tabel database.

#UPDATE BENCANA
update_bencana <- "
UPDATE BENCANA
SET status = 'Selesai'
WHERE id_bencana = 'BCN005';
"
print(update_bencana)

#UPDATE DONATUR
update_donatur <- "
UPDATE DONATUR
SET nohp = '081299999'
WHERE id_donatur = 'DTR012';
"
print(update_donatur)

#UPDATE DONASI
update_donasi <- "
UPDATE DONASI
SET nominal = 1000000
WHERE id_donasi = 'DNS010';
"
print(update_donasi)

9. Where : Digunakan untuk memfilter data pada perintah Select

## menampilkan bencana yang masih “Aktif”:
# Filter BENCANA dengan WHERE
bencana_aktif <- dbGetQuery(server, "
SELECT * 
FROM BENCANA
WHERE status = 'Aktif';
")
print(bencana_aktif)

## menampilkan donatur dengan nomor HP tertentu:
# Filter DONATUR dengan WHERE
donatur_hp <- dbGetQuery(server, "
SELECT * 
FROM DONATUR
WHERE nohp = '0812123123';
")
print(donatur_hp)

## menampilkan donasi untuk bencana tertentu atau nominal lebih dari 1 juta:
# Filter DONASI dengan WHERE
donasi_besar <- dbGetQuery(server, "
SELECT * 
FROM DONASI
WHERE id_bencana = 'BCN002' AND nominal > 1000000;
")
print(donasi_besar)

10. Order By, Desc dan Asc : Digunakan untuk mengurutkan Data

# Tabel Bencana
#ASC
bencana_asc <- "SELECT * FROM BENCANA ORDER BY tanggal ASC"
print(bencana_asc)

#DESC
bencana_desc <- "SELECT * FROM BENCANA ORDER BY tanggal DESC"
print(bencana_desc)

# Tabel Donatur
#ASC
donatur_asc <- "SELECT * FROM DONATUR ORDER BY nama ASC"
print(donatur_asc)

#DESC
donatur_desc <- "SELECT * FROM DONATUR ORDER BY nama DESC"
print(donatur_desc)

# Tabel Donasi
#ASC
donasi_asc <- "SELECT * FROM DONASI ORDER BY nominal ASC"
print(donasi_asc)

#DESC
donasi_desc <- "SELECT * FROM DONASI ORDER BY nominal DESC"
print(donasi_desc)

11. Join : Digunakan untuk Menggabungkan Tabel Bencana dan Donasi

# INNER JOIN
query_inner <- "
SELECT DONASI.id_donasi, DONASI.nominal, BENCANA.nama_bencana
FROM DONASI
INNER JOIN BENCANA
ON DONASI.id_bencana = BENCANA.id_bencana;
"
print(query_inner)

# LEFT JOIN
query_left <- "
SELECT DONASI.id_donasi, DONASI.nominal, BENCANA.nama_bencana
FROM DONASI
LEFT JOIN BENCANA
ON DONASI.id_bencana = BENCANA.id_bencana;
"
print(query_left)

# RIGHT JOIN
query_right <- "
SELECT DONASI.id_donasi, DONASI.nominal, BENCANA.nama_bencana
FROM DONASI
RIGHT JOIN BENCANA
ON DONASI.id_bencana = BENCANA.id_bencana;
"
print(query_right)

# FULL OUTER JOIN
query_full_outer <- "
SELECT DONASI.id_donasi, DONASI.nominal, BENCANA.nama_bencana
FROM DONASI
LEFT JOIN BENCANA
ON DONASI.id_bencana = BENCANA.id_bencana

UNION

SELECT DONASI.id_donasi, DONASI.nominal, BENCANA.nama_bencana
FROM DONASI
RIGHT JOIN BENCANA
ON DONASI.id_bencana = BENCANA.id_bencana;
"
print(query_full_outer)

Analisis Donasi

#Total donasi per bencana
total_bencana <- dbGetQuery(server, "
SELECT B.nama_bencana, SUM(D.nominal) AS total_donasi
FROM DONASI D
JOIN BENCANA B ON D.id_bencana = B.id_bencana
GROUP BY B.nama_bencana
ORDER BY total_donasi DESC;
")
print(total_bencana)

#Total donasi per metode pembayaran
total_metode <- dbGetQuery(server, "
SELECT metode, SUM(nominal) AS total
FROM DONASI
GROUP BY metode
ORDER BY total DESC;
")
print(total_metode)

#Donatur paling dermawan
donatur_top <- dbGetQuery(server, "
SELECT D.id_donatur, N.nama, SUM(D.nominal) as total
FROM DONASI D
JOIN DONATUR N ON D.id_donatur=N.id_donatur
GROUP BY D.id_donatur
ORDER BY total DESC;
")
print(donatur_top)

STUDY KASUS

Topik:

Sistem Donasi dan Penggalangan Dana Online untuk Bencana Alam

Deskripsi:

Membuat sistem basis data untuk mengelola data donasi online, termasuk data bencana dan donatur.

A.Tabel yang Digunakan

1.Tabel Bencana

  a) ID Bencana (sebagai PRIMARY KEY)
  b) Nama_Bencana
  c) Lokasi
  d) Tanggal
  e) Status 

2.Tabel Donatur

  a) id_donatur (sebagai PRIMARY KEY)
  b) nama
  c) email
  d) nohp

3.Tabel Donasi

  a) id_donasi (sebagai PRIMARY KEY)
  b) id_bencana (sebagai FOREIGN KEY → BENCANA)
  c) id_donatur (sebagai FOREIGN KEY → DONATUR)
  d) nominal
  e) tanggal
  f) metode (Transfer/QRIS/OVO/DANA)

4. Tabel Bencana Setelah Update

Pada bagian ini ditampilkan data dari tabel BENCANA setelah dilakukan proses UPDATE pada salah satu record, yaitu mengubah status bencana tertentu.Perintah UPDATE digunakan untuk memperbarui data pada tabel berdasarkan kondisi tertentu pada klausa WHERE. Pada contoh di atas, status bencana dengan id_bencana = ‘BCN005’ diubah menjadi Selesai. Perubahan tersebut kemudian ditampilkan kembali menggunakan perintah SELECT sehingga hasil update dapat diverifikasi.

## [1] 1

5. Tabel Donatur Setelah Update

Tujuan penampilan tabel ini adalah untuk menunjukkan perubahan data setelah perintah UPDATE dilakukan pada tabel DONATUR—khususnya pada kolom nomor handphone. Dengan melihat hasil tabel setelah update, dapat dipastikan bahwa perubahan data berhasil diterapkan dan tersimpan ke dalam database. Proses ini penting untuk memvalidasi bahwa manipulasi data berjalan sesuai instruksi dan tidak menimbulkan error pada struktur tabel.

## [1] 1

6. Tabel Donasi Setelah Update

Bagian ini menampilkan kondisi tabel DONASI sesudah dilakukan update terhadap salah satu record transaksi, misalnya perubahan metode pembayaran atau nominal donasi tertentu. Melalui tampilan hasil tabel, terlihat bahwa perubahan telah diterapkan dan data yang tersimpan merupakan data terbaru setelah proses update. Ini bertujuan untuk memastikan integritas data tetap terjaga dan update yang dilakukan sesuai dengan kebutuhan pencatatan transaksi donasi.

## [1] 1

7. FILTER Tabel Bencana

Bagian ini menampilkan hasil penyaringan data bencana berdasarkan kondisi tertentu, misalnya status “Aktif”. Proses filter membantu memfokuskan informasi pada bencana yang masih berlangsung sehingga lebih mudah dianalisis untuk keperluan penanganan atau penyaluran donasi. Hasil filter juga berguna dalam pelaporan situasi terkini tanpa harus melihat seluruh data bencana.

8. FILTER Tabel Donatur

Tabel ini menunjukkan hasil penyaringan data donatur yang memenuhi suatu kriteria tertentu, seperti nama donatur atau nomor identitas spesifik. Tujuan filter ini adalah mempercepat penelusuran informasi donatur, misalnya ketika ingin menghubungi donatur tertentu atau memeriksa riwayat donasi yang terkait dengan orang yang sama.

9. FILTER Tabel Donasi

Pada bagian ini dilakukan penyaringan transaksi donasi berdasarkan kriteria tertentu, seperti id_bencana atau metode pembayaran. Melalui hasil filter, dapat diketahui donasi mana yang berasal dari donatur atau bencana tertentu sehingga memudahkan proses tracking transaksi dan audit penyaluran dana yang lebih transparan.

10. Mengurutkan Tabel Bencana dengan ASC dan DESC

Pada tahap ini dilakukan pengurutan data bencana berdasarkan kolom tertentu. Proses sorting membantu melihat urutan kejadian bencana, baik dari waktu paling awal hingga terbaru atau sebaliknya. Dengan demikian pengguna dapat mempelajari pola kejadian dan status bencana secara lebih sistematis sesuai kebutuhan analisis.

11. Mengurutkan Tabel Donatur dengan ASC dan DESC

Pengurutan donatur membantu menampilkan data berdasarkan alfabet nama atau nomor identitas tertentu. Penyajian data yang terurut memudahkan pencarian, pengecekan kontak, serta evaluasi aktivitas donatur dalam proses penggalangan dana secara keseluruhan.

12. Mengurutkan Tabel Donasi dengan ASC dan DESC

Pada tahap ini dilakukan proses pengurutan data pada tabel DONASI berdasarkan kolom nominal secara naik (ASC) dan menurun (DESC) sehingga donasi dengan jumlah terbesar muncul pada urutan teratas. Tujuan pengurutan ini adalah untuk memudahkan identifikasi kontribusi terbesar dari setiap donatur terhadap penanganan bencana, serta melihat pola distribusi bantuan berdasarkan nilai dana yang diberikan.

13. Inner Join

Inner Join menampilkan data donasi yang memiliki kecocokan id_bencana pada kedua tabel. Hanya data yang berpasangan yang muncul. Analisis ini digunakan untuk mengetahui total transaksi donasi yang benar-benar terhubung dengan bencana tertentu, sehingga informasi lebih relevan dan fokus.

14. Left Join

Left Join menampilkan semua data pada tabel donasi, meskipun ada data bencana yang tidak memiliki pasangan. Analisis ini memungkinkan kita melihat seluruh data transaksi, termasuk transaksi yang belum memiliki relasi lengkap dengan informasi bencana.

15. Right Join

Right Join menampilkan seluruh data pada tabel bencana, termasuk bencana yang belum memiliki donasi. Dengan cara ini, dapat diketahui bencana mana yang belum tersentuh bantuan sehingga bisa menjadi prioritas dalam penyaluran donasi berikutnya.

16. Full Outer Join

Full Outer Join menggabungkan seluruh data baik dari tabel donasi maupun bencana. Teknik ini digunakan untuk melihat keseluruhan gambaran relasi donor dan bencana, termasuk data yang tidak memiliki pasangan. Analisis seperti ini berguna untuk evaluasi menyeluruh dalam pengelolaan donasi.

B. Analisis Donasi

1. Total donasi per bencana

Bagian ini menampilkan jumlah dana yang diterima masing-masing bencana. Data ini berguna untuk mengetahui bencana mana yang memperoleh bantuan paling besar, sekaligus mengidentifikasi bencana yang mungkin masih membutuhkan tambahan dukungan.

2. Total donasi per metode pembayaran

Analisis ini menunjukkan distribusi transaksi berdasarkan metode pembayaran, seperti transfer, QRIS, OVO, atau DANA. Informasi ini penting untuk mengevaluasi metode pembayaran mana yang paling banyak digunakan, sehingga dapat ditingkatkan pada proses penggalangan berikutnya.

3. Donatur paling dermawan

Bagian ini menampilkan rangking donatur berdasarkan total nominal donasi. Informasi ini dapat digunakan untuk memberikan apresiasi, membangun hubungan yang lebih baik dengan donatur utama, serta mempelajari pola kontribusi pendonor pada kegiatan bantuan kebencanaan.

SEKIAN TERIMAKASIH