-- Tạo bảng users (Tài khoản)
CREATE TABLE users (
id UUID PRIMARY KEY,
username VARCHAR(255) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(255) NOT NULL,
role ENUM('developer', 'admin') DEFAULT 'developer',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng password_resets (Khôi phục mật khẩu)
CREATE TABLE password_resets (
id UUID PRIMARY KEY,
user_id UUID,
reset_token VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Tạo bảng databases (Cơ sở dữ liệu)
CREATE TABLE databases (
id UUID PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL,
host VARCHAR(255) NOT NULL,
port INT NOT NULL,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng access_rights (Quyền truy cập)
CREATE TABLE access_rights (
id UUID PRIMARY KEY,
user_id UUID,
database_id UUID,
role ENUM('read', 'write', 'admin') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (database_id) REFERENCES databases(id) ON DELETE CASCADE
);
-- Tạo bảng projects (Dự án)
CREATE TABLE projects (
id UUID PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL,
description TEXT,
database_id UUID,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (database_id) REFERENCES databases(id) ON DELETE SET NULL
);
-- Tạo bảng project_access (Quyền truy cập dự án)
CREATE TABLE project_access (
id UUID PRIMARY KEY,
project_id UUID,
user_id UUID,
role ENUM('read', 'write', 'admin') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Tạo bảng system_config (Cấu hình hệ thống)
CREATE TABLE system_config (
id UUID PRIMARY KEY,
config_name VARCHAR(255) UNIQUE NOT NULL,
config_value TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng logs (Lịch sử hoạt động)
CREATE TABLE logs (
id UUID PRIMARY KEY,
user_id UUID,
action TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- Tạo bảng reports (Báo cáo và thống kê)
CREATE TABLE reports (
id UUID PRIMARY KEY,
report_type ENUM('usage', 'access') NOT NULL,
data JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Tạo bảng faqs (Câu hỏi thường gặp)
CREATE TABLE faqs (
id UUID PRIMARY KEY,
question TEXT NOT NULL,
answer TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng contacts (Liên hệ hỗ trợ)
CREATE TABLE contacts (
id UUID PRIMARY KEY,
user_id UUID,
subject VARCHAR(255) NOT NULL,
message TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status ENUM('open', 'closed') DEFAULT 'open',
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL
);
-- Tạo bảng about (Về chúng tôi)
CREATE TABLE about (
id UUID PRIMARY KEY,
company_name VARCHAR(255) NOT NULL,
history TEXT,
vision TEXT,
mission TEXT,
team TEXT,
recruitment TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng documentation (Tài liệu hướng dẫn)
CREATE TABLE documentation (
id UUID PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Tạo bảng users (Tài khoản) CREATE TABLE users ( id UUID PRIMARY KEY, username VARCHAR(255) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, full_name VARCHAR(255) NOT NULL, role ENUM('developer', 'admin') DEFAULT 'developer', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
-- Tạo bảng password_resets (Khôi phục mật khẩu) CREATE TABLE password_resets ( id UUID PRIMARY KEY, user_id UUID, reset_token VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, expires_at TIMESTAMP NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
-- Tạo bảng databases (Cơ sở dữ liệu) CREATE TABLE databases ( id UUID PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL, host VARCHAR(255) NOT NULL, port INT NOT NULL, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
-- Tạo bảng access_rights (Quyền truy cập) CREATE TABLE access_rights ( id UUID PRIMARY KEY, user_id UUID, database_id UUID, role ENUM('read', 'write', 'admin') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (database_id) REFERENCES databases(id) ON DELETE CASCADE );
-- Tạo bảng projects (Dự án) CREATE TABLE projects ( id UUID PRIMARY KEY, name VARCHAR(255) UNIQUE NOT NULL, description TEXT, database_id UUID, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (database_id) REFERENCES databases(id) ON DELETE SET NULL );
-- Tạo bảng project_access (Quyền truy cập dự án) CREATE TABLE project_access ( id UUID PRIMARY KEY, project_id UUID, user_id UUID, role ENUM('read', 'write', 'admin') NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
-- Tạo bảng system_config (Cấu hình hệ thống) CREATE TABLE system_config ( id UUID PRIMARY KEY, config_name VARCHAR(255) UNIQUE NOT NULL, config_value TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
-- Tạo bảng logs (Lịch sử hoạt động) CREATE TABLE logs ( id UUID PRIMARY KEY, user_id UUID, action TEXT NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE );
-- Tạo bảng reports (Báo cáo và thống kê) CREATE TABLE reports ( id UUID PRIMARY KEY, report_type ENUM('usage', 'access') NOT NULL, data JSON NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-- Tạo bảng faqs (Câu hỏi thường gặp) CREATE TABLE faqs ( id UUID PRIMARY KEY, question TEXT NOT NULL, answer TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
-- Tạo bảng contacts (Liên hệ hỗ trợ) CREATE TABLE contacts ( id UUID PRIMARY KEY, user_id UUID, subject VARCHAR(255) NOT NULL, message TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, status ENUM('open', 'closed') DEFAULT 'open', FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL );
-- Tạo bảng about (Về chúng tôi) CREATE TABLE about ( id UUID PRIMARY KEY, company_name VARCHAR(255) NOT NULL, history TEXT, vision TEXT, mission TEXT, team TEXT, recruitment TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
-- Tạo bảng documentation (Tài liệu hướng dẫn) CREATE TABLE documentation ( id UUID PRIMARY KEY, title VARCHAR(255) NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );