Update database.sql

This commit is contained in:
2026-06-12 01:07:52 +00:00
parent e8371028c2
commit e099eeb793
+215 -131
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:
-- 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;
id INT AUTO_INCREMENT PRIMARY KEY, DROP TABLE IF EXISTS rumah_ibadah;
nama_lengkap VARCHAR(150) NOT NULL, DROP TABLE IF EXISTS users;
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) SET FOREIGN_KEY_CHECKS = 1;
INSERT INTO users (nama_lengkap, username, email, password, role) VALUES
('Administrator', 'admin', 'admin@webgis.id', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin');
-- ──────────────────────────────────────── -- ============================================================
-- 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 -- 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',
alamat VARCHAR(255) DEFAULT NULL, alamat VARCHAR(255) DEFAULT NULL,
nama_pengurus VARCHAR(100) DEFAULT NULL, nama_pengurus VARCHAR(100) DEFAULT NULL,
no_telp VARCHAR(20) DEFAULT NULL, no_telp VARCHAR(20) DEFAULT NULL,
kuota_bantuan INT NOT NULL DEFAULT 20, kuota_bantuan INT NOT NULL DEFAULT 20,
radius_m INT NOT NULL DEFAULT 300, radius_m INT NOT NULL DEFAULT 300,
lat DOUBLE NOT NULL, lat DOUBLE NOT NULL,
lng DOUBLE NOT NULL, lng DOUBLE NOT NULL,
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,
tanggal_lahir DATE DEFAULT NULL, tanggal_lahir DATE DEFAULT NULL,
jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki', jenis_kelamin ENUM('Laki-laki','Perempuan') DEFAULT 'Laki-laki',
jumlah_tanggungan TINYINT DEFAULT 0, jumlah_tanggungan TINYINT DEFAULT 0,
pendapatan_bulanan BIGINT DEFAULT 0, pendapatan_bulanan BIGINT DEFAULT 0,
pekerjaan VARCHAR(100) DEFAULT NULL, pekerjaan VARCHAR(100) DEFAULT NULL,
kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak', kondisi_rumah ENUM('Layak','Tidak Layak','Sangat Tidak Layak') NOT NULL DEFAULT 'Tidak Layak',
no_telp VARCHAR(20) DEFAULT NULL, no_telp VARCHAR(20) DEFAULT NULL,
rt_rw VARCHAR(20) DEFAULT NULL, rt_rw VARCHAR(20) DEFAULT NULL,
kelurahan VARCHAR(100) DEFAULT NULL, kelurahan VARCHAR(100) DEFAULT NULL,
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',
tanggal DATE NOT NULL, tanggal DATE NOT NULL,
lokasi VARCHAR(255) DEFAULT NULL, lokasi VARCHAR(255) DEFAULT NULL,
deskripsi TEXT DEFAULT NULL, deskripsi TEXT DEFAULT NULL,
status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif', status ENUM('Aktif','Selesai') NOT NULL DEFAULT 'Aktif',
lat DOUBLE DEFAULT NULL, lat DOUBLE DEFAULT NULL,
lng DOUBLE DEFAULT NULL, lng DOUBLE DEFAULT NULL,
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,
tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang', tingkat ENUM('Ringan','Sedang','Berat') DEFAULT 'Sedang',
keterangan TEXT DEFAULT NULL, keterangan TEXT DEFAULT NULL,
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 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,
CREATE TABLE IF NOT EXISTS bantuan_tersalur ( status ENUM('Pending','Tersalurkan') NOT NULL DEFAULT 'Tersalurkan',
id INT AUTO_INCREMENT PRIMARY KEY, status_konfirmasi ENUM('Menunggu','Dikonfirmasi','Ditolak') NOT NULL DEFAULT 'Menunggu',
warga_id INT NOT NULL, nama_penerima_konfirmasi VARCHAR(150) DEFAULT NULL,
ibadah_id INT DEFAULT NULL, catatan_konfirmasi TEXT DEFAULT NULL,
bencana_id INT DEFAULT NULL, dikonfirmasi_oleh INT DEFAULT NULL,
jenis_bantuan VARCHAR(150) NOT NULL, tgl_konfirmasi TIMESTAMP NULL DEFAULT NULL,
jumlah VARCHAR(100) DEFAULT NULL COMMENT 'mis: 50kg beras, Rp500.000', waktu_konfirmasi TIMESTAMP NULL DEFAULT NULL,
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) 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
-- ============================================================