Files
D1041231071_UAS-Tugas_WebGI…/db_scripts/buat_tabel.sql
T

117 lines
4.6 KiB
SQL

-- ============================================================
-- 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;