Files
VolunteerManage-for-byw/server/src/db/schema.sql
T
2026-10-07 01:04:55 +08:00

82 lines
2.6 KiB
SQL

CREATE TABLE IF NOT EXISTS work_groups (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE
);
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
class TEXT NOT NULL,
name TEXT NOT NULL,
volunteer_no TEXT,
group_id INTEGER,
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE SET NULL,
UNIQUE(class, name)
);
CREATE TABLE IF NOT EXISTS user_groups (
user_id INTEGER NOT NULL,
group_id INTEGER NOT NULL,
PRIMARY KEY (user_id, group_id),
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS activities (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
start_time TEXT NOT NULL,
end_time TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours'))
);
CREATE TABLE IF NOT EXISTS activity_groups (
activity_id INTEGER NOT NULL,
group_id INTEGER NOT NULL,
PRIMARY KEY (activity_id, group_id),
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
FOREIGN KEY (group_id) REFERENCES work_groups(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS hours (
id INTEGER PRIMARY KEY AUTOINCREMENT,
activity_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
hours REAL NOT NULL DEFAULT 0,
exported_hours REAL NOT NULL DEFAULT 0,
remark TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours')),
FOREIGN KEY (activity_id) REFERENCES activities(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS admins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours'))
);
CREATE TABLE IF NOT EXISTS four_hour_exports (
id INTEGER PRIMARY KEY AUTOINCREMENT,
status TEXT NOT NULL DEFAULT 'active',
admin_username TEXT,
eligible_count INTEGER NOT NULL DEFAULT 0,
eligible_hours_total REAL NOT NULL DEFAULT 0,
items_updated INTEGER NOT NULL DEFAULT 0,
plan_json TEXT,
note TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now','+8 hours')),
voided_at TEXT
);
CREATE TABLE IF NOT EXISTS four_hour_export_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
export_id INTEGER NOT NULL,
hour_id INTEGER NOT NULL,
delta REAL NOT NULL,
FOREIGN KEY (export_id) REFERENCES four_hour_exports(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS idx_fhe_items_export ON four_hour_export_items(export_id);
CREATE INDEX IF NOT EXISTS idx_fhe_items_hour ON four_hour_export_items(hour_id);