Update database.sql

This commit is contained in:
2026-06-12 01:07:52 +00:00
parent e8371028c2
commit e099eeb793
+135 -51
View File
@@ -1,16 +1,31 @@
-- ============================================================ -- ============================================================
-- database.sql — WebGIS Poverty Mapping v2 -- database_fix.sql
-- Tiara Chontesa — D0141231070 -- WebGIS Poverty Mapping - UAS SIG Tiara
-- Versi sudah diperbaiki untuk Coolify
-- PENTING:
-- 1. Tidak memakai CREATE DATABASE.
-- 2. Tidak memakai USE db_poverty_mapping / USE db_bantuan.
-- 3. Akan memakai database aktif dari Coolify.
-- 4. File ini akan reset tabel utama.
-- ============================================================ -- ============================================================
CREATE DATABASE IF NOT EXISTS db_bantuan SET FOREIGN_KEY_CHECKS = 0;
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_bantuan;
-- ──────────────────────────────────────── DROP TABLE IF EXISTS bantuan_tersalur;
-- USERS (3 role: admin, relawan, pengurus, pemerintah) DROP TABLE IF EXISTS bencana_terdampak;
-- ──────────────────────────────────────── DROP TABLE IF EXISTS bencana;
CREATE TABLE IF NOT EXISTS users ( DROP TABLE IF EXISTS rumah_miskin;
DROP TABLE IF EXISTS rumah_ibadah;
DROP TABLE IF EXISTS users;
SET FOREIGN_KEY_CHECKS = 1;
-- ============================================================
-- USERS
-- Role: admin, relawan, pengurus, pemerintah
-- Password demo semua akun: password
-- ============================================================
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
nama_lengkap VARCHAR(150) NOT NULL, nama_lengkap VARCHAR(150) NOT NULL,
username VARCHAR(80) NOT NULL UNIQUE, username VARCHAR(80) NOT NULL UNIQUE,
@@ -21,16 +36,18 @@ CREATE TABLE IF NOT EXISTS users (
aktif TINYINT(1) NOT NULL DEFAULT 1, aktif TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL last_login TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Seed: admin default (password: admin123) INSERT INTO users (nama_lengkap, username, email, password, role, aktif) VALUES
INSERT INTO users (nama_lengkap, username, email, password, role) VALUES ('Administrator', 'admin', 'admin@webgis.id', 'password', 'admin', 1),
('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin'); ('Pemerintah Demo', 'pemerintah', 'pemerintah@webgis.id', 'password', 'pemerintah', 1),
('Pengurus Rumah Ibadah Demo', 'pengurus', 'pengurus@webgis.id', 'password', 'pengurus', 1),
('Relawan Demo', 'relawan', 'relawan@webgis.id', 'password', 'relawan', 1);
-- ──────────────────────────────────────── -- ============================================================
-- RUMAH IBADAH -- RUMAH IBADAH
-- ──────────────────────────────────────── -- ============================================================
CREATE TABLE IF NOT EXISTS rumah_ibadah ( CREATE TABLE rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
nama_ibadah VARCHAR(150) NOT NULL, nama_ibadah VARCHAR(150) NOT NULL,
kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid', kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid',
@@ -44,13 +61,15 @@ CREATE TABLE IF NOT EXISTS rumah_ibadah (
dibuat_oleh INT DEFAULT NULL, dibuat_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL CONSTRAINT fk_ibadah_user
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ──────────────────────────────────────── -- ============================================================
-- RUMAH MISKIN / KPM -- RUMAH MISKIN / KPM
-- ──────────────────────────────────────── -- ============================================================
CREATE TABLE IF NOT EXISTS rumah_miskin ( CREATE TABLE rumah_miskin (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
nama_kepala_keluarga VARCHAR(150) NOT NULL, nama_kepala_keluarga VARCHAR(150) NOT NULL,
nik VARCHAR(16) DEFAULT NULL, nik VARCHAR(16) DEFAULT NULL,
@@ -66,19 +85,21 @@ CREATE TABLE IF NOT EXISTS rumah_miskin (
kecamatan VARCHAR(100) DEFAULT NULL, kecamatan VARCHAR(100) DEFAULT NULL,
keterangan TEXT DEFAULT NULL, keterangan TEXT DEFAULT NULL,
status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu', status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu',
prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi (terdampak bencana)', prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi atau terdampak bencana',
lat DOUBLE NOT NULL, lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL, lng DOUBLE NOT NULL,
didata_oleh INT DEFAULT NULL, didata_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (didata_oleh) REFERENCES users(id) ON DELETE SET NULL CONSTRAINT fk_miskin_user
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; FOREIGN KEY (didata_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ──────────────────────────────────────── -- ============================================================
-- BENCANA -- BENCANA
-- ──────────────────────────────────────── -- ============================================================
CREATE TABLE IF NOT EXISTS bencana ( CREATE TABLE bencana (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
nama_bencana VARCHAR(150) NOT NULL, nama_bencana VARCHAR(150) NOT NULL,
jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir', jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir',
@@ -91,13 +112,15 @@ CREATE TABLE IF NOT EXISTS bencana (
radius_m INT DEFAULT 500, radius_m INT DEFAULT 500,
dibuat_oleh INT DEFAULT NULL, dibuat_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL CONSTRAINT fk_bencana_user
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ──────────────────────────────────────── -- ============================================================
-- WARGA TERDAMPAK BENCANA (relasi N:M) -- WARGA TERDAMPAK BENCANA
-- ──────────────────────────────────────── -- ============================================================
CREATE TABLE IF NOT EXISTS bencana_terdampak ( CREATE TABLE bencana_terdampak (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
bencana_id INT NOT NULL, bencana_id INT NOT NULL,
warga_id INT NOT NULL, warga_id INT NOT NULL,
@@ -106,17 +129,23 @@ CREATE TABLE IF NOT EXISTS bencana_terdampak (
ditandai_oleh INT DEFAULT NULL, ditandai_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unik_bencana_warga (bencana_id, warga_id), UNIQUE KEY unik_bencana_warga (bencana_id, warga_id),
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE CASCADE, CONSTRAINT fk_terdampak_bencana
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, FOREIGN KEY (bencana_id) REFERENCES bencana(id)
FOREIGN KEY (ditandai_oleh) REFERENCES users(id) ON DELETE SET NULL ON DELETE CASCADE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CONSTRAINT fk_terdampak_warga
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id)
ON DELETE CASCADE,
CONSTRAINT fk_terdampak_user
FOREIGN KEY (ditandai_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ──────────────────────────────────────── -- ============================================================
-- BANTUAN TERSALUR -- BANTUAN TERSALUR
-- ──────────────────────────────────────── -- Perbaikan utama ada di tabel ini.
USE db_poverty_mapping; -- Tidak ada USE db_poverty_mapping lagi.
-- ============================================================
CREATE TABLE IF NOT EXISTS bantuan_tersalur ( CREATE TABLE bantuan_tersalur (
id INT AUTO_INCREMENT PRIMARY KEY, id INT AUTO_INCREMENT PRIMARY KEY,
warga_id INT NOT NULL, warga_id INT NOT NULL,
ibadah_id INT DEFAULT NULL, ibadah_id INT DEFAULT NULL,
@@ -128,25 +157,80 @@ CREATE TABLE IF NOT EXISTS bantuan_tersalur (
keterangan TEXT DEFAULT NULL, keterangan TEXT DEFAULT NULL,
disalurkan_oleh INT DEFAULT NULL, disalurkan_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan', status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan',
status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu', status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu',
nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL, nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL,
catatan_konfirmasi TEXT DEFAULT NULL, catatan_konfirmasi TEXT DEFAULT NULL,
dikonfirmasi_oleh INT DEFAULT NULL, dikonfirmasi_oleh INT DEFAULT NULL,
tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL, -- <-- Tanda koma di sini tadinya ketinggalan tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL,
waktu_konfirmasi TIMESTAMP NULL DEFAULT NULL,
-- DEKLARASI HUBUNGAN RELASI (FOREIGN KEY) CONSTRAINT fk_bantuan_warga
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id)
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL, ON DELETE CASCADE,
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE SET NULL, CONSTRAINT fk_bantuan_ibadah
FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) ON DELETE SET NULL FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; ON DELETE SET NULL,
CONSTRAINT fk_bantuan_bencana
FOREIGN KEY (bencana_id) REFERENCES bencana(id)
ON DELETE SET NULL,
CONSTRAINT fk_bantuan_user
FOREIGN KEY (disalurkan_oleh) REFERENCES users(id)
ON DELETE SET NULL,
CONSTRAINT fk_bantuan_konfirmasi_user
FOREIGN KEY (dikonfirmasi_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ──────────────────────────────────────── -- ============================================================
-- INDEX -- INDEX
-- ──────────────────────────────────────── -- ============================================================
CREATE INDEX idx_miskin_coords ON rumah_miskin (lat, lng); CREATE INDEX idx_miskin_coords ON rumah_miskin (lat, lng);
CREATE INDEX idx_ibadah_coords ON rumah_ibadah (lat, lng); CREATE INDEX idx_ibadah_coords ON rumah_ibadah (lat, lng);
CREATE INDEX idx_miskin_status ON rumah_miskin (status_bantuan); CREATE INDEX idx_miskin_status ON rumah_miskin (status_bantuan);
CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas); CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas);
CREATE INDEX idx_bencana_status ON bencana (status); CREATE INDEX idx_bencana_status ON bencana (status);
CREATE INDEX idx_bantuan_status_konfirmasi ON bantuan_tersalur (status_konfirmasi);
CREATE INDEX idx_bantuan_warga ON bantuan_tersalur (warga_id);
-- ============================================================
-- DATA DUMMY RINGAN SUPAYA DASHBOARD TIDAK KOSONG
-- ============================================================
INSERT INTO rumah_ibadah
(nama_ibadah, kategori, alamat, nama_pengurus, no_telp, kuota_bantuan, radius_m, lat, lng, dibuat_oleh)
VALUES
('Masjid Raya Mujahidin', 'Masjid', 'Jl. Jenderal Ahmad Yani, Pontianak', 'Pengurus Demo', '081234567890', 50, 500, -0.0554, 109.3465, 3),
('Masjid Jami Sultan Syarif Abdurrahman', 'Masjid', 'Pontianak Timur', 'Pengurus Demo', '081234567891', 40, 500, -0.0239, 109.3446, 3);
INSERT INTO rumah_miskin
(nama_kepala_keluarga, nik, tanggal_lahir, jenis_kelamin, jumlah_tanggungan, pendapatan_bulanan, pekerjaan, kondisi_rumah, no_telp, rt_rw, kelurahan, kecamatan, keterangan, status_bantuan, prioritas, lat, lng, didata_oleh)
VALUES
('Budi Santoso', '6171010101010001', '1978-01-10', 'Laki-laki', 4, 800000, 'Buruh Harian', 'Tidak Layak', '081200000001', 'RT 01/RW 02', 'Sungai Jawi', 'Pontianak Kota', 'Data dummy untuk testing', 'Belum Terbantu', 0, -0.0412, 109.3210, 4),
('Siti Aminah', '6171010101010002', '1982-05-12', 'Perempuan', 3, 650000, 'Pedagang Kecil', 'Sangat Tidak Layak', '081200000002', 'RT 03/RW 01', 'Benua Melayu Darat', 'Pontianak Selatan', 'Data dummy untuk testing', 'Belum Terbantu', 1, -0.0550, 109.3450, 4),
('Rahmat Hidayat', '6171010101010003', '1975-09-22', 'Laki-laki', 5, 900000, 'Tidak Tetap', 'Tidak Layak', '081200000003', 'RT 02/RW 04', 'Siantan Hulu', 'Pontianak Utara', 'Data dummy untuk testing', 'Terjangkau', 0, -0.0060, 109.3300, 4);
INSERT INTO bencana
(nama_bencana, jenis, tanggal, lokasi, deskripsi, status, lat, lng, radius_m, dibuat_oleh)
VALUES
('Banjir Rob Pontianak', 'Banjir', CURDATE(), 'Pontianak Utara', 'Data dummy bencana untuk pengujian sistem', 'Aktif', -0.0060, 109.3300, 700, 2);
INSERT INTO bencana_terdampak
(bencana_id, warga_id, tingkat, keterangan, ditandai_oleh)
VALUES
(1, 2, 'Sedang', 'Terdampak banjir rob', 4);
INSERT INTO bantuan_tersalur
(warga_id, ibadah_id, bencana_id, jenis_bantuan, jumlah, tanggal, petugas, keterangan, disalurkan_oleh, status, status_konfirmasi)
VALUES
(1, 1, NULL, 'Paket Sembako', '1 paket', CURDATE(), 'Relawan Demo', 'Data dummy bantuan', 4, 'Tersalurkan', 'Menunggu'),
(3, 2, NULL, 'Beras', '10 kg', CURDATE(), 'Relawan Demo', 'Data dummy bantuan', 4, 'Tersalurkan', 'Dikonfirmasi');
-- ============================================================
-- SELESAI
-- Akun demo:
-- admin / password
-- pemerintah / password
-- pengurus / password
-- relawan / password
-- ============================================================