Files
UAS_SIG/database.sql
T
2026-06-10 07:55:22 +00:00

142 lines
8.1 KiB
SQL

-- ============================================================
-- 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
-- ────────────────────────────────────────
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,
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;
-- ────────────────────────────────────────
-- 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);