feat: sql
This commit is contained in:
+228
@@ -0,0 +1,228 @@
|
||||
-- 用户表(若项目使用 Django auth,可忽略或与 auth_user 对应)
|
||||
DROP TABLE IF EXISTS account;
|
||||
CREATE TABLE account
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(150) NOT NULL UNIQUE,
|
||||
password VARCHAR(128) NOT NULL,
|
||||
email VARCHAR(254),
|
||||
full_name VARCHAR(200),
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
is_staff TINYINT(1) NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT ='系统用户/认证信息';
|
||||
|
||||
-- 部门表
|
||||
DROP TABLE IF EXISTS departments;
|
||||
CREATE TABLE departments
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
code VARCHAR(50),
|
||||
parent_id BIGINT UNSIGNED,
|
||||
description TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_departments_parent FOREIGN KEY (parent_id) REFERENCES departments (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='组织/部门';
|
||||
|
||||
-- 人员表(可映射到 Django 的 profile)
|
||||
DROP TABLE IF EXISTS personnel;
|
||||
CREATE TABLE personnel
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id BIGINT UNSIGNED, -- 关联 account 表(可为空)
|
||||
employee_no VARCHAR(64) UNIQUE,
|
||||
name VARCHAR(100) NOT NULL,
|
||||
department_id BIGINT UNSIGNED,
|
||||
phone VARCHAR(50),
|
||||
email VARCHAR(254),
|
||||
role VARCHAR(100),
|
||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_personnel_user FOREIGN KEY (user_id) REFERENCES account (id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_personnel_department FOREIGN KEY (department_id) REFERENCES departments (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='人员信息';
|
||||
|
||||
-- 物品类别
|
||||
DROP TABLE IF EXISTS categories;
|
||||
CREATE TABLE categories
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(150) NOT NULL,
|
||||
parent_id BIGINT UNSIGNED,
|
||||
description TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_categories_parent FOREIGN KEY (parent_id) REFERENCES categories (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='物品类别';
|
||||
|
||||
-- 物品(物品主表)
|
||||
DROP TABLE IF EXISTS items;
|
||||
CREATE TABLE items
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
code VARCHAR(100) NOT NULL UNIQUE, -- 物品编号/资产编号
|
||||
name VARCHAR(200) NOT NULL,
|
||||
category_id BIGINT UNSIGNED,
|
||||
model VARCHAR(150),
|
||||
brand VARCHAR(150),
|
||||
location VARCHAR(200),
|
||||
total_quantity INT NOT NULL DEFAULT 0,
|
||||
available_quantity INT NOT NULL DEFAULT 0,
|
||||
unit VARCHAR(30) DEFAULT '件',
|
||||
price DECIMAL(12, 2) DEFAULT NULL,
|
||||
purchase_date DATE DEFAULT NULL,
|
||||
supplier VARCHAR(200) DEFAULT NULL,
|
||||
status VARCHAR(50) DEFAULT 'normal', -- 如 normal/disabled/lost/repair
|
||||
description TEXT,
|
||||
image_path VARCHAR(500),
|
||||
created_by BIGINT UNSIGNED,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_items_category FOREIGN KEY (category_id) REFERENCES categories (id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_items_creator FOREIGN KEY (created_by) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
INDEX (name),
|
||||
INDEX (code)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='物品基本信息';
|
||||
|
||||
-- 物品库存/流水(每次入库/出库/调整都记录)
|
||||
DROP TABLE IF EXISTS item_transactions;
|
||||
CREATE TABLE item_transactions
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
item_id BIGINT UNSIGNED NOT NULL,
|
||||
trans_type ENUM ('IN','OUT','ADJUST','TRANSFER') NOT NULL,
|
||||
quantity INT NOT NULL,
|
||||
from_location VARCHAR(200),
|
||||
to_location VARCHAR(200),
|
||||
related_id BIGINT UNSIGNED, -- 可关联采购单/借用记录/调拨单 id
|
||||
operator_id BIGINT UNSIGNED, -- personnel 操作者
|
||||
note TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_trans_item FOREIGN KEY (item_id) REFERENCES items (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_trans_operator FOREIGN KEY (operator_id) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
INDEX (item_id),
|
||||
INDEX (trans_type)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='物品出入库与调整流水';
|
||||
|
||||
-- 借用记录(借/还)
|
||||
DROP TABLE IF EXISTS borrow_records;
|
||||
CREATE TABLE borrow_records
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
item_id BIGINT UNSIGNED NOT NULL,
|
||||
borrower_id BIGINT UNSIGNED NOT NULL, -- personnel id
|
||||
quantity INT NOT NULL DEFAULT 1,
|
||||
borrow_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
due_date DATETIME DEFAULT NULL,
|
||||
return_date DATETIME DEFAULT NULL,
|
||||
status ENUM ('BORROWED','RETURNED','OVERDUE','CANCELED') NOT NULL DEFAULT 'BORROWED',
|
||||
approver_id BIGINT UNSIGNED DEFAULT NULL,
|
||||
note TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_borrow_item FOREIGN KEY (item_id) REFERENCES items (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_borrow_borrower FOREIGN KEY (borrower_id) REFERENCES personnel (id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_borrow_approver FOREIGN KEY (approver_id) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
INDEX (borrower_id),
|
||||
INDEX (status)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='借用/归还记录';
|
||||
|
||||
-- 备忘/便签
|
||||
DROP TABLE IF EXISTS memos;
|
||||
CREATE TABLE memos
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
title VARCHAR(200),
|
||||
content TEXT,
|
||||
author_id BIGINT UNSIGNED,
|
||||
related_item_id BIGINT UNSIGNED,
|
||||
is_public TINYINT(1) NOT NULL DEFAULT 0,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_memo_author FOREIGN KEY (author_id) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_memo_item FOREIGN KEY (related_item_id) REFERENCES items (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='备忘/备注';
|
||||
|
||||
-- 财务记录(采购/报销等)
|
||||
DROP TABLE IF EXISTS finance_records;
|
||||
CREATE TABLE finance_records
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
record_no VARCHAR(100) UNIQUE,
|
||||
type ENUM ('PURCHASE','REFUND','REPAIR','DEPRECIATION','OTHER') NOT NULL,
|
||||
related_item_id BIGINT UNSIGNED,
|
||||
amount DECIMAL(14, 2) NOT NULL DEFAULT 0.00,
|
||||
currency VARCHAR(10) DEFAULT 'CNY',
|
||||
vendor VARCHAR(200),
|
||||
occurred_at DATETIME,
|
||||
recorded_by BIGINT UNSIGNED,
|
||||
note TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_finance_item FOREIGN KEY (related_item_id) REFERENCES items (id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_finance_user FOREIGN KEY (recorded_by) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
INDEX (record_no)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='财务相关记录';
|
||||
|
||||
-- 邮件通知规则/历史
|
||||
DROP TABLE IF EXISTS email_notices;
|
||||
CREATE TABLE email_notices
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(200),
|
||||
target_emails TEXT, -- 以逗号分隔或 JSON 数组
|
||||
subject VARCHAR(300),
|
||||
body TEXT,
|
||||
enabled TINYINT(1) NOT NULL DEFAULT 1,
|
||||
schedule_cron VARCHAR(100), -- 若使用定时任务
|
||||
last_sent_at DATETIME,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='邮件通知规则/历史';
|
||||
|
||||
-- 评价/反馈(evaluation 模块对应)
|
||||
DROP TABLE IF EXISTS evaluations;
|
||||
CREATE TABLE evaluations
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
related_item_id BIGINT UNSIGNED,
|
||||
evaluator_id BIGINT UNSIGNED,
|
||||
score TINYINT UNSIGNED, -- 1-5
|
||||
comment TEXT,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_evaluation_item FOREIGN KEY (related_item_id) REFERENCES items (id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_evaluation_user FOREIGN KEY (evaluator_id) REFERENCES personnel (id) ON DELETE SET NULL
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='物品/服务评价';
|
||||
|
||||
-- 附件表(文件存储路径)
|
||||
DROP TABLE IF EXISTS attachments;
|
||||
CREATE TABLE attachments
|
||||
(
|
||||
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
related_table VARCHAR(100), -- 指示关联表,如 'items','memos'
|
||||
related_id BIGINT UNSIGNED, -- 关联记录 ID
|
||||
file_name VARCHAR(300),
|
||||
file_path VARCHAR(1000),
|
||||
file_size BIGINT UNSIGNED,
|
||||
content_type VARCHAR(200),
|
||||
uploaded_by BIGINT UNSIGNED,
|
||||
uploaded_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT fk_attachments_user FOREIGN KEY (uploaded_by) REFERENCES personnel (id) ON DELETE SET NULL,
|
||||
INDEX (related_table, related_id)
|
||||
) ENGINE = InnoDB
|
||||
DEFAULT CHARSET = utf8mb4 COMMENT ='文件附件存储索引表';
|
||||
Reference in New Issue
Block a user