PETUNJUK PENGERJAAN
1. Jawaban ditulis langsung di berkas soal ini (file .docx). Isilah NPM, Nama, dan Kelas
pada bagian header.
2. Kuis 2 berupa soal SQL yang dikerjakan pada psql (terminal) PostgreSQL. Peserta
diharapkan mengerjakan Kuis 2 pada server PostgreSQL melalui server Kawung.
3. Petunjuk koneksi ke server PostgreSQL DB (melalui server Kawung) dapat dilihat pada
Dokumen Tutorial 1.
4. Jika terdapat kendala koneksi ke server Postgres DB di Kawung, peserta diperbolehkan
untuk menggunakan PostgreSQL DB di lokal komputer masing-masing. Pastikan nama
database yang digunakan sama dengan nama akun SSO. Petunjuk menginstall dan
menggunakan psql PostgreSQL pada lokal komputer dapat dilihat pada tutorial ini.
5. Import DDL schema pada ‘DDL Script.sql’ ke server Postgres DB Kawung maupun di
lokal komputer.
6. Untuk pengumpulan berkas jawaban, konversi terlebih dahulu berkas word menjadi
pdf. Simpan dengan format penamaan “Kelas_NPM.pdf”, sebagai contoh:
E_12345678910.pdf.
7. Berkas pdf dikumpulkan melalui slot pengumpulan yang telah disediakan di Scele.
8. Apabila masih ada masalah terkait koneksi, segera menghubungi dosen/asdos.
===========================================================================
Kelas: D
Nama : Geoffrey Tyndall
Soal Kuis 2
Dengan menggunakan skema database PacilBisa, kerjakan soal berikut ini.
1. Berdasarkan regulasi yang berlaku setiap pengumpulan uang dan barang sumbangan harus
memiliki izin dari otoritas yang berwenang. Untuk memfasilitasi pihak otoritas dari
Kementerian Sosial dalam mengawasi proses penggalangan dana di PacilBisa, sistem
menyimpan data pengguna PENGAWAS_LEGAL. Seorang PENGAWAS_LEGAL ditunjuk untuk
mengawasi satu CAMPAIGN penggalangan dana atau bantuan di PacilBisa.
Buatlah sebuah relasi PENGAWAS_LEGAL dengan ketentuan sebagai berikut.
PENGAWAS LEGAL
Nama Atribut Tipe Atribut Keterangan
1
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
3. Tampilkan username dan nama lengkap pengguna yang pernah menjadi penggalang
bantuan untuk campaign berjudul 'bantu korban bencana alam' dan 'bantu pasien sakit'
sekaligus. (pengguna tersebut pernah menggalang campaign untuk keduanya).
SELECT P.username, P.nama_lengkap
FROM PENGGUNA P
WHERE P.username in (SELECT penggalang_bantuan FROM campaign WHERE judul = 'bantu
korban bencana alam')
AND P.username in (SELECT penggalang_bantuan FROM campaign WHERE judul = 'bantu
pasien sakit');
2
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
5. Tampilkan nominal bantuan dan no telepon dari donatur yg memberikan donasi uang lebih
dari 1 juta rupiah pada satu transaksi. Tampilkan hanya nomor telepon yang berbeda dan
terurut berdasarkan jumlah donasi dimana jumlah terbesar ditampilkan lebih dulu.
SELECT DISTINCT DUN.nominal, D.no_telp FROM DONATUR D
JOIN DONASI DON ON D.Username=DON.donatur
JOIN DONASI_UANG DUN ON DUN.id_donasi=DON.id_donasi
WHERE nominal >= 1000000
ORDER BY nominal DESC;
3
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
6. Untuk setiap campaign, tampilkan judul campaign beserta total nominal donasi uang
terkumpul. Tampilkan hanya judul campaign yang total nominal donasi uangnya lebih dari
atau sama dengan 1000000.
SELECT DON.campaign, SUM(D.nominal) AS total_nominal
FROM CAMPAIGN C
JOIN DONASI DON ON DON.campaign = C.kode
JOIN DONASI_UANG D ON D.id_donasi = DON.id_donasi
GROUP BY DON.campaign
HAVING SUM(D.nominal) >= 1000000;
7. Tampilkan nama ekspedisi beserta nomor resi pengiriman yang pernah ekspedisi tersebut
tangani. Jika ekspedisi belum pernah melakukan pengiriman, nama ekspedisi tetap
ditampilkan namun nomor resinya diisi null.
Tampilkan hasilnya terurut secara alfabetis berdasarkan nama ekspedisi.
-- nomor 7
SELECT E.nama_ekspedisi, STRING_AGG(P.no_resi, ',') AS nomor_resi
FROM EKSPEDISI E
LEFT JOIN PENGIRIMAN P ON E.kode_ekspedisi = P.kode_ekspedisi
4
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
GROUP BY E.kode_ekspedisi
ORDER BY E.nama_ekspedisi ASC;
8. Buatlah sebuah view bernama campaign_view yang berisi judul campaign yang jenis
donasinya sama dengan jenis donasi campaign yang digalang oleh 'Curry Hildrew' . Setelah
view dibuat, tampilkan isi campaign_view tersebut.
(catatan: judul campaign yang dilakukan 'Curry Hildrew' tidak perlu ditampilkan)
CREATE VIEW CAMPAIGN_VIEW AS
SELECT judul FROM campaign
WHERE jenis_donasi IN (
SELECT DISTINCT jenis_donasi FROM CAMPAIGN C, PENGGUNA P
WHERE C.penggalang_bantuan = P.username
AND P.nama_lengkap = 'Curry Hildrew'
);
5
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
9.
Penggalang bantuan ingin melakukan pencairan dana uang dari suatu campaign. Namun
admin perlu memastikan nominal dana yang masuk masih tersedia, karena dikhawatirkan
penggalang bantuan sudah melakukan pencairan dana. Untuk itu setiap pengajuan pencairan
dana perlu dilakukan pengecekan jumlah donasi uang tersisa yang belum dicairkan.
Buatlah stored function untuk menghitung jumlah donasi uang sisa yang belum dicairkan oleh
suatu campaign (beri nama function: HitungAvailableUang). Hal yang dilakukan:
- Hitunglah terlebih dahulu donasi uang yang sudah masuk berdasarkan kode campaign
yang diberikan pada saat insert Pencairan Dana. Untuk itu perlu menghitung jumlah
nominal uang yang sudah masuk berdasarkan nominal dari receipt pencairan dana
yang ada.
- Hitunglah jumlah nominal uang yang sudah dicairkan berdasarkan kode campaign
yang sama, dengan menghitung jumlah nominal uang yang sudah dicairkan
berdasarkan nominal dari receipt pencairan dana yang ada.
- Apabila nominal pencairan dana yang diminta (insert) lebih besar dari jumlah donasi
uang sisa yang belum dicairkan, maka tampilkan warning “Campaign % tidak dapat
melakukan penarikan dana lagi”.
Buatlah trigger (beri nama CekValidPencairan) untuk memproses permintaan pencairan dana
(insert) sehingga perlu memanggil HitungAvailableUang.
10.
Saat melakukan pencairan dana, informasi yang dibutuhkan adalah jumlah dana yang ingin
dicairkan dan tanggal pencairan. PacilBisa akan mengirimkan kode verifikasi melalui nomor
ponsel penggalang bantuan untuk memastikan bahwa permintaan pencairan dana valid.
Permohonan pencairan dana akan diverifikasi oleh Admin. Selama proses verifikasi,
6
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall
permohonan pencairan dana akan berstatus “Sedang Diproses”. Setelah berhasil diverifikasi,
status pencairan dana akan berubah menjadi “Berhasil” dan PacilBisa akan mengirimkan
receipt pencairan dana kepada penggalang bantuan yang menunjukkan bahwa dana
campaign telah berhasil dicairkan. Receipt pencairan dana tersebut berisi informasi berupa
nomor receipt, waktu transaksi, jumlah dana yang dicairkan, dan deskripsi.
- Dapatkan terlebih dahulu nominal uang yang akan diproses dengan pencarian
berdasarkan parameter penggalang bantuan username, kode campaign yang dikirim
dan status ‘sedang diproses’.
- Update status dari ‘sedang diproses’ menjadi ‘Berhasil’
- Buatlah receipt pencairan dana yang disimpan ke tabel RECEIPT_PENCAIRAN_DANA
dengan no_receipt berisi ‘rpd-’ + noUrut dan nilai nominal sesuai nominal dari
permintaan pencairan dana.
- Sebagai bonus (5 poin), jika waktu_receipt mengambil waktu sistem sekarang /
NOW().
atau
7
NPM : 1906350704
Kelas: D
Nama : Geoffrey Tyndall