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
-- Tiara Chontesa — D0141231070
-- ============================================================
CREATE DATABASE IF NOT EXISTS db_bantuan
CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_bantuan;
-- ────────────────────────────────────────
-- USERS (3 role: admin, relawan, pengurus, pemerintah)
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_lengkap VARCHAR(150) NOT NULL,
username VARCHAR(80) NOT NULL UNIQUE,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan',
foto VARCHAR(255) DEFAULT NULL,
aktif TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Seed: admin default (password: admin123)
INSERT INTO users (nama_lengkap, username, email, password, role) VALUES
('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');
-- ────────────────────────────────────────
-- RUMAH IBADAH
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_ibadah VARCHAR(150) NOT NULL,
kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid',
alamat VARCHAR(255) DEFAULT NULL,
nama_pengurus VARCHAR(100) DEFAULT NULL,
no_telp VARCHAR(20) DEFAULT NULL,
kuota_bantuan INT NOT NULL DEFAULT 20,
radius_m INT NOT NULL DEFAULT 300,
lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL,
dibuat_oleh INT DEFAULT NULL,
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
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ────────────────────────────────────────
-- RUMAH MISKIN / KPM
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS rumah_miskin (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_kepala_keluarga VARCHAR(150) NOT NULL,
nik VARCHAR(16) DEFAULT NULL,
tanggal_lahir DATE DEFAULT NULL,
jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki',
jumlah_tanggungan TINYINT DEFAULT 0,
pendapatan_bulanan BIGINT DEFAULT 0,
pekerjaan VARCHAR(100) DEFAULT NULL,
kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak',
no_telp VARCHAR(20) DEFAULT NULL,
rt_rw VARCHAR(20) DEFAULT NULL,
kelurahan VARCHAR(100) DEFAULT NULL,
kecamatan VARCHAR(100) DEFAULT NULL,
keterangan TEXT DEFAULT NULL,
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,
lng DOUBLE NOT NULL,
didata_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (didata_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ────────────────────────────────────────
-- BENCANA
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS bencana (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_bencana VARCHAR(150) NOT NULL,
jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir',
tanggal DATE NOT NULL,
lokasi VARCHAR(255) DEFAULT NULL,
deskripsi TEXT DEFAULT NULL,
status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif',
lat DOUBLE DEFAULT NULL,
lng DOUBLE DEFAULT NULL,
radius_m INT DEFAULT 500,
dibuat_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (dibuat_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ────────────────────────────────────────
-- WARGA TERDAMPAK BENCANA (relasi N:M)
-- ────────────────────────────────────────
CREATE TABLE IF NOT EXISTS bencana_terdampak (
id INT AUTO_INCREMENT PRIMARY KEY,
bencana_id INT NOT NULL,
warga_id INT NOT NULL,
tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang',
keterangan TEXT DEFAULT NULL,
ditandai_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unik_bencana_warga (bencana_id, warga_id),
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE CASCADE,
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE,
FOREIGN KEY (ditandai_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ────────────────────────────────────────
-- BANTUAN TERSALUR
-- ────────────────────────────────────────
USE db_poverty_mapping;
CREATE TABLE IF NOT EXISTS bantuan_tersalur (
id INT AUTO_INCREMENT PRIMARY KEY,
warga_id INT NOT NULL,
ibadah_id INT DEFAULT NULL,
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, -- <-- Tanda koma di sini tadinya ketinggalan
-- DEKLARASI HUBUNGAN RELASI (FOREIGN KEY)
FOREIGN KEY (warga_id) REFERENCES rumah_miskin(id) ON DELETE CASCADE,
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL,
FOREIGN KEY (bencana_id) REFERENCES bencana(id) ON DELETE SET NULL,
FOREIGN KEY (disalurkan_oleh) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_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);
-- ============================================================
-- database_fix.sql
-- 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.
-- ============================================================
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS bantuan_tersalur;
DROP TABLE IF EXISTS bencana_terdampak;
DROP TABLE IF EXISTS bencana;
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,
nama_lengkap VARCHAR(150) NOT NULL,
username VARCHAR(80) NOT NULL UNIQUE,
email VARCHAR(150) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role ENUM('admin','relawan','pengurus','pemerintah') NOT NULL DEFAULT 'relawan',
foto VARCHAR(255) DEFAULT NULL,
aktif TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_login TIMESTAMP NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO users (nama_lengkap, username, email, password, role, aktif) VALUES
('Administrator', 'admin', 'admin@webgis.id', 'password', 'admin', 1),
('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
-- ============================================================
CREATE TABLE rumah_ibadah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_ibadah VARCHAR(150) NOT NULL,
kategori ENUM('Masjid','Musholla','Gereja','Pura','Vihara','Klenteng','Lainnya') NOT NULL DEFAULT 'Masjid',
alamat VARCHAR(255) DEFAULT NULL,
nama_pengurus VARCHAR(100) DEFAULT NULL,
no_telp VARCHAR(20) DEFAULT NULL,
kuota_bantuan INT NOT NULL DEFAULT 20,
radius_m INT NOT NULL DEFAULT 300,
lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL,
dibuat_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_ibadah_user
FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- RUMAH MISKIN / KPM
-- ============================================================
CREATE TABLE rumah_miskin (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_kepala_keluarga VARCHAR(150) NOT NULL,
nik VARCHAR(16) DEFAULT NULL,
tanggal_lahir DATE DEFAULT NULL,
jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki',
jumlah_tanggungan TINYINT DEFAULT 0,
pendapatan_bulanan BIGINT DEFAULT 0,
pekerjaan VARCHAR(100) DEFAULT NULL,
kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak',
no_telp VARCHAR(20) DEFAULT NULL,
rt_rw VARCHAR(20) DEFAULT NULL,
kelurahan VARCHAR(100) DEFAULT NULL,
kecamatan VARCHAR(100) DEFAULT NULL,
keterangan TEXT DEFAULT NULL,
status_bantuan ENUM('Belum Terbantu','Terjangkau','Sudah Menerima') NOT NULL DEFAULT 'Belum Terbantu',
prioritas TINYINT(1) DEFAULT 0 COMMENT '1 = prioritas tinggi atau terdampak bencana',
lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL,
didata_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
CONSTRAINT fk_miskin_user
FOREIGN KEY (didata_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- BENCANA
-- ============================================================
CREATE TABLE bencana (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_bencana VARCHAR(150) NOT NULL,
jenis ENUM('Banjir','Kebakaran','Gempa Bumi','Longsor','Angin Puting Beliung','Lainnya') NOT NULL DEFAULT 'Banjir',
tanggal DATE NOT NULL,
lokasi VARCHAR(255) DEFAULT NULL,
deskripsi TEXT DEFAULT NULL,
status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif',
lat DOUBLE DEFAULT NULL,
lng DOUBLE DEFAULT NULL,
radius_m INT DEFAULT 500,
dibuat_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_bencana_user
FOREIGN KEY (dibuat_oleh) REFERENCES users(id)
ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- ============================================================
-- WARGA TERDAMPAK BENCANA
-- ============================================================
CREATE TABLE bencana_terdampak (
id INT AUTO_INCREMENT PRIMARY KEY,
bencana_id INT NOT NULL,
warga_id INT NOT NULL,
tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang',
keterangan TEXT DEFAULT NULL,
ditandai_oleh INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY unik_bencana_warga (bencana_id, warga_id),
CONSTRAINT fk_terdampak_bencana
FOREIGN KEY (bencana_id) REFERENCES bencana(id)
ON DELETE CASCADE,
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
-- Perbaikan utama ada di tabel ini.
-- Tidak ada USE db_poverty_mapping lagi.
-- ============================================================
CREATE TABLE bantuan_tersalur (
id INT AUTO_INCREMENT PRIMARY KEY,
warga_id INT NOT NULL,
ibadah_id INT DEFAULT NULL,
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
-- ============================================================