Update database.sql

This commit is contained in:
2026-06-12 01:07:52 +00:00
parent e8371028c2
commit e099eeb793
+236 -152
View File
@@ -1,152 +1,236 @@
-- ============================================================ -- ============================================================
-- database.sql — WebGIS Poverty Mapping v2 -- database_fix.sql
-- Tiara Chontesa — D0141231070 -- WebGIS Poverty Mapping - UAS SIG Tiara
-- ============================================================ -- Versi sudah diperbaiki untuk Coolify
-- PENTING:
CREATE DATABASE IF NOT EXISTS db_bantuan -- 1. Tidak memakai CREATE DATABASE.
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 2. Tidak memakai USE db_poverty_mapping / USE db_bantuan.
USE db_bantuan; -- 3. Akan memakai database aktif dari Coolify.
-- 4. File ini akan reset tabel utama.
-- ──────────────────────────────────────── -- ============================================================
-- USERS (3 role: admin, relawan, pengurus, pemerintah)
-- ──────────────────────────────────────── SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY, DROP TABLE IF EXISTS bantuan_tersalur;
nama_lengkap VARCHAR(150) NOT NULL, DROP TABLE IF EXISTS bencana_terdampak;
username VARCHAR(80) NOT NULL UNIQUE, DROP TABLE IF EXISTS bencana;
email VARCHAR(150) NOT NULL UNIQUE, DROP TABLE IF EXISTS rumah_miskin;
password VARCHAR(255) NOT NULL, DROP TABLE IF EXISTS rumah_ibadah;
role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan', DROP TABLE IF EXISTS users;
foto VARCHAR(255) DEFAULT NULL,
aktif TINYINT(1) NOT NULL DEFAULT 1, SET FOREIGN_KEY_CHECKS = 1;
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL -- ============================================================
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- USERS
-- Role: admin, relawan, pengurus, pemerintah
-- Seed: admin default (password: admin123) -- Password demo semua akun: password
INSERT INTO users (nama_lengkap, username, email, password, role) VALUES -- ============================================================
('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin'); CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
-- ──────────────────────────────────────── nama_lengkap VARCHAR(150) NOT NULL,
-- RUMAH IBADAH username VARCHAR(80) NOT NULL UNIQUE,
-- ──────────────────────────────────────── email VARCHAR(150) NOT NULL UNIQUE,
CREATE TABLE IF NOT EXISTS rumah_ibadah ( password VARCHAR(255) NOT NULL,
id INT AUTO_INCREMENT PRIMARY KEY, role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan',
nama_ibadah VARCHAR(150) NOT NULL, foto VARCHAR(255) DEFAULT NULL,
kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid', aktif TINYINT(1) NOT NULL DEFAULT 1,
alamat VARCHAR(255) DEFAULT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
nama_pengurus VARCHAR(100) DEFAULT NULL, last_login TIMESTAMP NULL
no_telp VARCHAR(20) DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
kuota_bantuan INT NOT NULL DEFAULT 20,
radius_m INT NOT NULL DEFAULT 300, INSERT INTO users (nama_lengkap, username, email, password, role, aktif) VALUES
lat DOUBLE NOT NULL, ('Administrator', 'admin', 'admin@webgis.id', 'password', 'admin', 1),
lng DOUBLE NOT NULL, ('Pemerintah Demo', 'pemerintah', 'pemerintah@webgis.id', 'password', 'pemerintah', 1),
dibuat_oleh INT DEFAULT NULL, ('Pengurus Rumah Ibadah Demo', 'pengurus', 'pengurus@webgis.id', 'password', 'pengurus', 1),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, ('Relawan Demo', 'relawan', 'relawan@webgis.id', 'password', 'relawan', 1);
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL -- ============================================================
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- RUMAH IBADAH
-- ============================================================
-- ──────────────────────────────────────── CREATE TABLE rumah_ibadah (
-- RUMAH MISKIN / KPM id INT AUTO_INCREMENT PRIMARY KEY,
-- ──────────────────────────────────────── nama_ibadah VARCHAR(150) NOT NULL,
CREATE TABLE IF NOT EXISTS rumah_miskin ( kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid',
id INT AUTO_INCREMENT PRIMARY KEY, alamat VARCHAR(255) DEFAULT NULL,
nama_kepala_keluarga VARCHAR(150) NOT NULL, nama_pengurus VARCHAR(100) DEFAULT NULL,
nik VARCHAR(16) DEFAULT NULL, no_telp VARCHAR(20) DEFAULT NULL,
tanggal_lahir DATE DEFAULT NULL, kuota_bantuan INT NOT NULL DEFAULT 20,
jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki', radius_m INT NOT NULL DEFAULT 300,
jumlah_tanggungan TINYINT DEFAULT 0, lat DOUBLE NOT NULL,
pendapatan_bulanan BIGINT DEFAULT 0, lng DOUBLE NOT NULL,
pekerjaan VARCHAR(100) DEFAULT NULL, dibuat_oleh INT DEFAULT NULL,
kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
no_telp VARCHAR(20) DEFAULT NULL, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
rt_rw VARCHAR(20) DEFAULT NULL, CONSTRAINT fk_ibadah_user
kelurahan VARCHAR(100) DEFAULT NULL, FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
kecamatan VARCHAR(100) DEFAULT NULL, ON DELETE SET NULL
keterangan TEXT DEFAULT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu',
prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi (terdampak bencana)', -- ============================================================
lat DOUBLE NOT NULL, -- RUMAH MISKIN / KPM
lng DOUBLE NOT NULL, -- ============================================================
didata_oleh INT DEFAULT NULL, CREATE TABLE rumah_miskin (
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, id INT AUTO_INCREMENT PRIMARY KEY,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, nama_kepala_keluarga VARCHAR(150) NOT NULL,
FOREIGN KEY (didata_oleh) REFERENCES users(id) ON DELETE SET NULL nik VARCHAR(16) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; tanggal_lahir DATE DEFAULT NULL,
jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki',
-- ──────────────────────────────────────── jumlah_tanggungan TINYINT DEFAULT 0,
-- BENCANA pendapatan_bulanan BIGINT DEFAULT 0,
-- ──────────────────────────────────────── pekerjaan VARCHAR(100) DEFAULT NULL,
CREATE TABLE IF NOT EXISTS bencana ( kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak',
id INT AUTO_INCREMENT PRIMARY KEY, no_telp VARCHAR(20) DEFAULT NULL,
nama_bencana VARCHAR(150) NOT NULL, rt_rw VARCHAR(20) DEFAULT NULL,
jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir', kelurahan VARCHAR(100) DEFAULT NULL,
tanggal DATE NOT NULL, kecamatan VARCHAR(100) DEFAULT NULL,
lokasi VARCHAR(255) DEFAULT NULL, keterangan TEXT DEFAULT NULL,
deskripsi TEXT DEFAULT NULL, status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu',
status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif', prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi atau terdampak bencana',
lat DOUBLE DEFAULT NULL, lat DOUBLE NOT NULL,
lng DOUBLE DEFAULT NULL, lng DOUBLE NOT NULL,
radius_m INT DEFAULT 500, didata_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,
FOREIGN KEY (dibuat_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;
-- WARGA TERDAMPAK BENCANA (relasi N:M)
-- ──────────────────────────────────────── -- ============================================================
CREATE TABLE IF NOT EXISTS bencana_terdampak ( -- BENCANA
id INT AUTO_INCREMENT PRIMARY KEY, -- ============================================================
bencana_id INT NOT NULL, CREATE TABLE bencana (
warga_id INT NOT NULL, id INT AUTO_INCREMENT PRIMARY KEY,
tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang', nama_bencana VARCHAR(150) NOT NULL,
keterangan TEXT DEFAULT NULL, jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir',
ditandai_oleh INT DEFAULT NULL, tanggal DATE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, lokasi VARCHAR(255) DEFAULT NULL,
UNIQUE KEY unik_bencana_warga (bencana_id, warga_id), deskripsi TEXT DEFAULT NULL,
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE CASCADE, status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif',
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, lat DOUBLE DEFAULT NULL,
FOREIGN KEY (ditandai_oleh) REFERENCES users(id) ON DELETE SET NULL lng DOUBLE DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; radius_m INT DEFAULT 500,
dibuat_oleh INT DEFAULT NULL,
-- ──────────────────────────────────────── created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- BANTUAN TERSALUR CONSTRAINT fk_bencana_user
-- ──────────────────────────────────────── FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
USE db_poverty_mapping; ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS bantuan_tersalur (
id INT AUTO_INCREMENT PRIMARY KEY, -- ============================================================
warga_id INT NOT NULL, -- WARGA TERDAMPAK BENCANA
ibadah_id INT DEFAULT NULL, -- ============================================================
bencana_id INT DEFAULT NULL, CREATE TABLE bencana_terdampak (
jenis_bantuan VARCHAR(150) NOT NULL, id INT AUTO_INCREMENT PRIMARY KEY,
jumlah VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000', bencana_id INT NOT NULL,
tanggal DATE NOT NULL, warga_id INT NOT NULL,
petugas VARCHAR(150) DEFAULT NULL, tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang',
keterangan TEXT DEFAULT NULL, keterangan TEXT DEFAULT NULL,
disalurkan_oleh INT DEFAULT NULL, ditandai_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan', UNIQUE KEY unik_bencana_warga (bencana_id, warga_id),
status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu', CONSTRAINT fk_terdampak_bencana
nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL, FOREIGN KEY (bencana_id) REFERENCES bencana(id)
catatan_konfirmasi TEXT DEFAULT NULL, ON DELETE CASCADE,
dikonfirmasi_oleh INT DEFAULT NULL, CONSTRAINT fk_terdampak_warga
tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL, -- <-- Tanda koma di sini tadinya ketinggalan FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id)
ON DELETE CASCADE,
-- DEKLARASI HUBUNGAN RELASI (FOREIGN KEY) CONSTRAINT fk_terdampak_user
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE, FOREIGN KEY (ditandai_oleh) REFERENCES users(id)
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL, ON DELETE SET NULL
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE SET NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- ============================================================
-- BANTUAN TERSALUR
-- ──────────────────────────────────────── -- Perbaikan utama ada di tabel ini.
-- INDEX -- Tidak ada USE db_poverty_mapping lagi.
-- ──────────────────────────────────────── -- ============================================================
CREATE INDEX idx_miskin_coords ON rumah_miskin (lat, lng); CREATE TABLE bantuan_tersalur (
CREATE INDEX idx_ibadah_coords ON rumah_ibadah (lat, lng); id INT AUTO_INCREMENT PRIMARY KEY,
CREATE INDEX idx_miskin_status ON rumah_miskin (status_bantuan); warga_id INT NOT NULL,
CREATE INDEX idx_miskin_prioritas ON rumah_miskin (prioritas); ibadah_id INT DEFAULT NULL,
CREATE INDEX idx_bencana_status ON bencana (status); bencana_id INT DEFAULT NULL,
jenis_bantuan VARCHAR(150) NOT NULL,
jumlah VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000',
tanggal DATE NOT NULL,
petugas VARCHAR(150) DEFAULT NULL,
keterangan TEXT DEFAULT NULL,
disalurkan_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan',
status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu',
nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL,
catatan_konfirmasi TEXT DEFAULT NULL,
dikonfirmasi_oleh INT DEFAULT NULL,
tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL,
waktu_konfirmasi TIMESTAMP NULL DEFAULT NULL,
CONSTRAINT fk_bantuan_warga
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id)
ON DELETE CASCADE,
CONSTRAINT fk_bantuan_ibadah
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id)
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
-- ============================================================
CREATE INDEX idx_miskin_coords ON rumah_miskin (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_prioritas ON rumah_miskin (prioritas);
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
-- ============================================================