diff --git a/database.sql b/database.sql new file mode 100644 index 0000000..393bb84 --- /dev/null +++ b/database.sql @@ -0,0 +1,142 @@ +-- ============================================================ +-- 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); \ No newline at end of file