first commit
This commit is contained in:
@@ -0,0 +1,264 @@
|
||||
-- ============================================================
|
||||
-- GeoSosial Database Schema
|
||||
-- Sistem Informasi Sosial Kota Pontianak
|
||||
-- ============================================================
|
||||
|
||||
CREATE DATABASE IF NOT EXISTS geososial CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
USE geososial;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: users (autentikasi)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(50) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
role ENUM('admin','petugas','walikota','viewer') NOT NULL DEFAULT 'viewer',
|
||||
jabatan VARCHAR(100),
|
||||
can_edit TINYINT(1) NOT NULL DEFAULT 0,
|
||||
is_admin TINYINT(1) NOT NULL DEFAULT 0,
|
||||
is_wali TINYINT(1) NOT NULL DEFAULT 0,
|
||||
aktif TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: kelurahan (master data)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS kelurahan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(100) NOT NULL,
|
||||
kecamatan VARCHAR(100) NOT NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: rumah_ibadah
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS rumah_ibadah (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(150) NOT NULL,
|
||||
tipe ENUM('masjid','gereja','pura','vihara','klenteng') NOT NULL,
|
||||
ikon VARCHAR(10) DEFAULT '🕌',
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
kapasitas INT DEFAULT 0,
|
||||
kelurahan_id INT,
|
||||
alamat TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: warga (data kepala keluarga)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS warga (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(150) NOT NULL,
|
||||
nik VARCHAR(16),
|
||||
kelurahan_id INT,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
kategori ENUM('sangat_miskin','miskin','hampir_miskin') NOT NULL,
|
||||
jumlah_anggota INT DEFAULT 1,
|
||||
penghasilan BIGINT DEFAULT 0,
|
||||
tgl_lahir DATE,
|
||||
pendidikan ENUM('tidak_sekolah','sd','smp','sma','d3','s1','s2','') DEFAULT '',
|
||||
keterangan TEXT,
|
||||
status ENUM('aktif','nonaktif') DEFAULT 'aktif',
|
||||
pelapor VARCHAR(150),
|
||||
no_laporan VARCHAR(20),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: anggota_keluarga
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS anggota_keluarga (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
warga_id INT NOT NULL,
|
||||
nama VARCHAR(150) NOT NULL,
|
||||
usia INT DEFAULT 0,
|
||||
hubungan VARCHAR(50) DEFAULT 'Anak',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: riwayat_penyakit (per anggota keluarga)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS riwayat_penyakit (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
anggota_id INT NOT NULL,
|
||||
penyakit ENUM('hipertensi','diabetes','tbc','asma','stroke','jantung','odgj','stunting','kanker') NOT NULL,
|
||||
FOREIGN KEY (anggota_id) REFERENCES anggota_keluarga(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: histori_bantuan
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS histori_bantuan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
warga_id INT NOT NULL,
|
||||
tanggal DATE NOT NULL,
|
||||
jenis VARCHAR(50) NOT NULL,
|
||||
nominal BIGINT DEFAULT 0,
|
||||
sumber_dana VARCHAR(100),
|
||||
keterangan TEXT,
|
||||
created_by INT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: laporan (dari masyarakat)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS laporan (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
no_laporan VARCHAR(20) NOT NULL UNIQUE,
|
||||
nama_pelapor VARCHAR(100),
|
||||
hp_pelapor VARCHAR(20),
|
||||
nama_dilaporkan VARCHAR(150) NOT NULL,
|
||||
nik VARCHAR(16),
|
||||
kelurahan_id INT,
|
||||
kategori ENUM('sangat_miskin','miskin','hampir_miskin') NOT NULL,
|
||||
jumlah_anggota INT DEFAULT 0,
|
||||
penghasilan BIGINT DEFAULT 0,
|
||||
keterangan TEXT NOT NULL,
|
||||
lat DECIMAL(10,7),
|
||||
lng DECIMAL(10,7),
|
||||
status ENUM('menunggu','disetujui','ditolak') DEFAULT 'menunggu',
|
||||
warga_id INT COMMENT 'warga_id jika laporan disetujui',
|
||||
approved_by INT,
|
||||
tgl_laporan DATE NOT NULL,
|
||||
tgl_proses TIMESTAMP NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (kelurahan_id) REFERENCES kelurahan(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (warga_id) REFERENCES warga(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (approved_by) REFERENCES users(id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- SEED DATA: users
|
||||
-- ============================================================
|
||||
INSERT INTO users (username, password, role, jabatan, can_edit, is_admin, is_wali) VALUES
|
||||
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin', 'Kadis Sosial', 1, 1, 0),
|
||||
('petugas', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'petugas', 'Staf Verifikasi', 1, 0, 0),
|
||||
('walikota', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'walikota', 'Walikota Pontianak', 0, 0, 1),
|
||||
('viewer', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'viewer', 'Pemangku Kepentingan', 0, 0, 0);
|
||||
|
||||
-- NOTE: Password hash di atas adalah hash bcrypt dari kata "password"
|
||||
-- Ubah password melalui phpMyAdmin atau script update_password.php
|
||||
-- Password asli: admin=admin123, petugas=petugas123, walikota=wali2024, viewer=viewer123
|
||||
-- (Hash akan diupdate otomatis saat pertama login via generate_passwords.php)
|
||||
|
||||
-- ============================================================
|
||||
-- SEED DATA: kelurahan (6 kecamatan, 24 kelurahan)
|
||||
-- ============================================================
|
||||
INSERT INTO kelurahan (nama, kecamatan) VALUES
|
||||
-- Pontianak Kota
|
||||
('Kel. Tengah', 'Pontianak Kota'),
|
||||
('Kel. Darat Sekip', 'Pontianak Kota'),
|
||||
('Kel. Sungai Bangkong', 'Pontianak Kota'),
|
||||
('Kel. Mariana', 'Pontianak Kota'),
|
||||
('Kel. Sungai Jawi', 'Pontianak Kota'),
|
||||
-- Pontianak Selatan
|
||||
('Kel. Parit Tokaya', 'Pontianak Selatan'),
|
||||
('Kel. Benua Melayu Darat', 'Pontianak Selatan'),
|
||||
('Kel. Benua Melayu Laut', 'Pontianak Selatan'),
|
||||
('Kel. Kota Baru', 'Pontianak Selatan'),
|
||||
-- Pontianak Barat
|
||||
('Kel. Sungai Beliung', 'Pontianak Barat'),
|
||||
('Kel. Pal Lima', 'Pontianak Barat'),
|
||||
('Kel. Akcaya', 'Pontianak Barat'),
|
||||
('Kel. Sungai Jawi Luar', 'Pontianak Barat'),
|
||||
-- Pontianak Utara
|
||||
('Kel. Siantan Hulu', 'Pontianak Utara'),
|
||||
('Kel. Batu Layang', 'Pontianak Utara'),
|
||||
('Kel. Saigon', 'Pontianak Utara'),
|
||||
('Kel. Siantan Hilir', 'Pontianak Utara'),
|
||||
-- Pontianak Timur
|
||||
('Kel. Tanjung Hulu', 'Pontianak Timur'),
|
||||
('Kel. Banjar Serasan', 'Pontianak Timur'),
|
||||
('Kel. Dalam Bugis', 'Pontianak Timur'),
|
||||
-- Pontianak Tenggara
|
||||
('Kel. Bangka Belitung Darat', 'Pontianak Tenggara'),
|
||||
('Kel. Bangka Belitung Laut', 'Pontianak Tenggara'),
|
||||
('Kel. Bansir Laut', 'Pontianak Tenggara'),
|
||||
('Kel. Bansir Darat', 'Pontianak Tenggara');
|
||||
|
||||
-- ============================================================
|
||||
-- SEED DATA: rumah_ibadah
|
||||
-- ============================================================
|
||||
INSERT INTO rumah_ibadah (nama, tipe, ikon, lat, lng, kapasitas, kelurahan_id, alamat) VALUES
|
||||
('Masjid Al-Ikhlas', 'masjid', '🕌', -0.0180000, 109.3320000, 150, 4, 'Jl. Mariana, Pontianak Kota'),
|
||||
('Masjid Raya Mujahidin', 'masjid', '🕌', -0.0428000, 109.3373000, 500, 12, 'Jl. Jend. Ahmad Yani, Pontianak Selatan'),
|
||||
('Masjid Jami Sultan', 'masjid', '🕌', -0.0400000, 109.3440000, 300, 20, 'Jl. Tanjungpura, Pontianak Timur'),
|
||||
('Masjid Nurul Hidayah', 'masjid', '🕌', -0.0100000, 109.3360000, 100, 14, 'Jl. Siantan Hulu, Pontianak Utara'),
|
||||
('Gereja GPIB Immanuel', 'gereja', '⛪', -0.0130000, 109.3480000, 200, 14, 'Jl. Sisingamangaraja, Pontianak Utara'),
|
||||
('Gereja Bethel Indonesia','gereja', '⛪', -0.0300000, 109.3370000, 180, 6, 'Jl. Parit Tokaya, Pontianak Selatan'),
|
||||
('Gereja Katedral', 'gereja', '⛪', -0.0350000, 109.3620000, 350, 15, 'Jl. Diponegoro, Pontianak Utara'),
|
||||
('Pura Girinatha', 'pura', '🛕', -0.0220000, 109.3550000, 80, 3, 'Jl. Sungai Bangkong, Pontianak Kota'),
|
||||
('Vihara Bodhisatva', 'vihara', '🏛️', -0.0080000, 109.3400000, 60, 14, 'Jl. Siantan, Pontianak Utara'),
|
||||
('Klenteng Tua Pek Kong', 'klenteng', '🏯', -0.0260000, 109.3420000, 70, 1, 'Jl. Diponegoro, Pontianak Kota');
|
||||
|
||||
-- ============================================================
|
||||
-- VIEWS berguna
|
||||
-- ============================================================
|
||||
CREATE OR REPLACE VIEW v_warga_lengkap AS
|
||||
SELECT
|
||||
w.id, w.nama, w.nik, w.lat, w.lng, w.kategori,
|
||||
w.jumlah_anggota, w.penghasilan, w.tgl_lahir, w.pendidikan,
|
||||
w.keterangan, w.status, w.pelapor, w.no_laporan, w.created_at,
|
||||
k.nama AS kelurahan, k.kecamatan,
|
||||
(SELECT COUNT(*) FROM histori_bantuan hb WHERE hb.warga_id = w.id) AS total_bantuan,
|
||||
(SELECT COALESCE(SUM(hb2.nominal),0) FROM histori_bantuan hb2 WHERE hb2.warga_id = w.id) AS total_nominal_bantuan
|
||||
FROM warga w
|
||||
LEFT JOIN kelurahan k ON w.kelurahan_id = k.id;
|
||||
|
||||
CREATE OR REPLACE VIEW v_laporan_lengkap AS
|
||||
SELECT
|
||||
l.id, l.no_laporan, l.nama_pelapor, l.hp_pelapor,
|
||||
l.nama_dilaporkan, l.nik, l.kategori, l.jumlah_anggota,
|
||||
l.penghasilan, l.keterangan, l.lat, l.lng, l.status,
|
||||
l.tgl_laporan, l.created_at,
|
||||
k.nama AS kelurahan, k.kecamatan
|
||||
FROM laporan l
|
||||
LEFT JOIN kelurahan k ON l.kelurahan_id = k.id;
|
||||
|
||||
-- ============================================================
|
||||
-- TABEL: fasilitas_umum (opsional)
|
||||
-- ============================================================
|
||||
CREATE TABLE IF NOT EXISTS fasilitas_umum (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
nama VARCHAR(150) NOT NULL,
|
||||
kategori VARCHAR(50) NOT NULL,
|
||||
lat DECIMAL(10,7) NOT NULL,
|
||||
lng DECIMAL(10,7) NOT NULL,
|
||||
alamat TEXT,
|
||||
keterangan TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
-- ============================================================
|
||||
-- SEED DATA: fasilitas_umum
|
||||
-- ============================================================
|
||||
INSERT INTO fasilitas_umum (nama, kategori, lat, lng, alamat, keterangan) VALUES
|
||||
-- Kesehatan
|
||||
('RSUD Dr. Soedarso', 'kesehatan', -0.0461000, 109.3458000, 'Jl. Dr. Soedarso, Pontianak Tenggara', 'Rumah Sakit Umum Daerah Provinsi Kalbar'),
|
||||
('Puskesmas Parit Tokaya', 'kesehatan', -0.0396000, 109.3364000, 'Jl. Paris II, Pontianak Selatan', 'Pelayanan Kesehatan Tingkat Pertama'),
|
||||
('RS Katolik Antonius', 'kesehatan', -0.0336000, 109.3242000, 'Jl. K.H. Wahid Hasyim, Pontianak Kota', 'Rumah Sakit Swasta Tipe B'),
|
||||
-- Pendidikan
|
||||
('Universitas Tanjungpura', 'pendidikan', -0.0622000, 109.3468000, 'Jl. Prof. Dr. H. Hadari Nawawi, Pontianak Tenggara', 'Perguruan Tinggi Negeri Utama Kalbar'),
|
||||
('SMA Negeri 1 Pontianak', 'pendidikan', -0.0354000, 109.3328000, 'Jl. Anjungan, Pontianak Kota', 'Sekolah Menengah Atas Negeri'),
|
||||
('SMP Negeri 1 Pontianak', 'pendidikan', -0.0248000, 109.3344000, 'Jl. Jend. Urip Sumoharjo, Pontianak Kota', 'Sekolah Menengah Pertama Negeri'),
|
||||
-- Pasar Tradisional
|
||||
('Pasar Flamboyan', 'pasar', -0.0381000, 109.3394000, 'Jl. Pahlawan, Pontianak Selatan', 'Pasar Tradisional Terbesar di Kota Pontianak'),
|
||||
('Pasar Mawar', 'pasar', -0.0279000, 109.3387000, 'Jl. Cokroaminoto, Pontianak Kota', 'Pasar Tradisional Sayur & Kebutuhan Pokok'),
|
||||
('Pasar Kemuning', 'pasar', -0.0456000, 109.3218000, 'Jl. Prof. M. Yamin, Pontianak Kota', 'Pasar Rakyat Modern Kelurahan Kota Baru'),
|
||||
-- Kantor Kelurahan
|
||||
('Kantor Lurah Akcaya', 'kelurahan', -0.0352000, 109.3236000, 'Jl. Sutan Syahrir, Pontianak Selatan', 'Pelayanan Publik Kelurahan Akcaya'),
|
||||
('Kantor Lurah Parit Tokaya', 'kelurahan', -0.0478000, 109.3415000, 'Jl. Paris I, Pontianak Selatan', 'Pelayanan Publik Kelurahan Parit Tokaya'),
|
||||
('Kantor Lurah Benua Melayu Darat', 'kelurahan', -0.0345000, 109.3444000, 'Jl. Gajah Mada, Pontianak Selatan', 'Pelayanan Publik Kelurahan BMD');
|
||||
Reference in New Issue
Block a user