-- ============================================================ -- WebGIS Pontianak - Struktur Database -- ============================================================ -- Jalankan file ini terlebih dahulu sebelum menjalankan seed data. CREATE DATABASE IF NOT EXISTS webgis_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE webgis_db; -- ============================================================ -- 1. Users -- ============================================================ 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', 'user') NOT NULL DEFAULT 'user', nama_lengkap VARCHAR(100) DEFAULT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ -- 2. Data Spasial -- ============================================================ CREATE TABLE IF NOT EXISTS spbu ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(100) NOT NULL, deskripsi TEXT, buka_24_jam TINYINT(1) NOT NULL DEFAULT 0, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_spbu_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS rumah_ibadah ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(100) NOT NULL, agama VARCHAR(50) NOT NULL, radius_bantuan_meter INT NOT NULL DEFAULT 1000, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_rumah_ibadah_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS jalan ( id INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(100) NOT NULL, jenis_jalan VARCHAR(50) DEFAULT NULL, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_jalan_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS kavling ( id INT AUTO_INCREMENT PRIMARY KEY, nama_pemilik VARCHAR(100) NOT NULL, status_kepemilikan VARCHAR(50) NOT NULL, luas DECIMAL(10,2) DEFAULT NULL, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_kavling_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS kawasan_kumuh ( id INT AUTO_INCREMENT PRIMARY KEY, nama_kawasan VARCHAR(100) NOT NULL, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_kawasan_kumuh_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS warga_miskin ( id INT AUTO_INCREMENT PRIMARY KEY, nama_kk VARCHAR(100) NOT NULL, penghasilan DECIMAL(15,2) NOT NULL, jumlah_tanggungan INT NOT NULL, geom GEOMETRY NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, SPATIAL INDEX idx_warga_miskin_geom (geom) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- ============================================================ -- 3. Data Interaksi Pengguna -- ============================================================ CREATE TABLE IF NOT EXISTS laporan_warga ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, kategori VARCHAR(50) NOT NULL, deskripsi TEXT NOT NULL, geometry POINT NOT NULL, status ENUM('menunggu', 'diproses', 'selesai', 'ditolak') NOT NULL DEFAULT 'menunggu', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, INDEX idx_laporan_user_id (user_id), SPATIAL INDEX idx_laporan_geometry (geometry), CONSTRAINT fk_laporan_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE IF NOT EXISTS ulasan_fasilitas ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, fasilitas_tipe ENUM('spbu', 'rumah_ibadah') NOT NULL, fasilitas_id INT NOT NULL, rating TINYINT NOT NULL, komentar TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, INDEX idx_ulasan_user_id (user_id), INDEX idx_ulasan_fasilitas (fasilitas_tipe, fasilitas_id), CONSTRAINT fk_ulasan_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, CONSTRAINT chk_ulasan_rating CHECK (rating BETWEEN 1 AND 5) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;