数据库设计
数据库概述
本资产管理系统采用关系型数据库设计,基于PostgreSQL 13+构建,支持MySQL 8.0+和MariaDB 10.6+兼容。数据库设计遵循第三范式,确保数据一致性和完整性,支持高并发访问和复杂查询。
数据库关系图
1. 核心实体关系图
erDiagram
Asset ||--o{ Image : "has many"
Asset ||--o{ Video : "has many"
Asset ||--o{ Attachment : "has many"
Asset }o--|| Category : "belongs to"
Asset }o--|| Organization : "belongs to"
Asset }o--o{ Tag : "has many"
Asset {
int id PK
string name
string spec
string model
int value
int depreciation
string vendor
datetime purchased_at
int status
string code
string coords
string address
int organization_id FK
int category_id FK
}
Category {
int id PK
string name
string label
string code
int tid
}
Organization {
int id PK
string name
int parent_id FK
}
Image {
int id PK
int asset_id FK
string image
string title
int file_size
int width
int height
}
Video {
int id PK
int asset_id FK
string video
string title
string video_format
int duration
int width
int height
}
Attachment {
int id PK
int asset_id FK
string attachment
string title
string file_type
int file_size
}
Tag {
int id PK
string name
string label
string color
}
2. 业务流程关系图
erDiagram
Asset ||--o{ Lease : "has many"
Asset ||--o{ Borrow : "has many"
Asset ||--o{ Transfer : "has many"
Asset ||--o{ MaintenanceApplication : "has many"
Asset ||--o{ MaintenancePlan : "has many"
Asset ||--o{ MaintenanceRecord : "has many"
Asset ||--o{ DisposalApplication : "has many"
Organization ||--o{ Transfer : "from/to"
Asset {
int id PK
string name
int status
int organization_id FK
}
Lease {
int id PK
int asset_id FK
string lessee_name
string lessee_company
datetime lease_start_date
datetime lease_end_date
int status
}
Borrow {
int id PK
int asset_id FK
string borrower_name
string borrower_department
datetime borrow_start_date
datetime borrow_end_date
int status
}
Transfer {
int id PK
int asset_id FK
int from_organization_id FK
int to_organization_id FK
text transfer_reason
int status
}
MaintenanceApplication {
int id PK
int asset_id FK
string applicant_name
string maintenance_type
int priority
text description
int status
}
MaintenancePlan {
int id PK
int asset_id FK
string plan_name
string plan_type
string frequency
datetime next_maintenance_date
int status
}
MaintenanceRecord {
int id PK
int asset_id FK
int maintenance_application_id FK
int maintenance_plan_id FK
datetime maintenance_date
string maintenance_type
text maintenance_result
}
DisposalApplication {
int id PK
int asset_id FK
string application_number
string applicant_name
text disposal_reason
string disposal_method
int status
}
3. 维护管理关系图
erDiagram
MaintenanceApplication ||--o{ MaintenanceRecord : "generates"
MaintenancePlan ||--o{ MaintenanceRecord : "generates"
Asset ||--o{ MaintenanceApplication : "has many"
Asset ||--o{ MaintenancePlan : "has many"
Asset ||--o{ MaintenanceRecord : "has many"
MaintenanceApplication {
int id PK
int asset_id FK
string applicant_name
string applicant_department
string maintenance_type
int priority
text description
datetime expected_date
int maintenance_cost
int status
}
MaintenancePlan {
int id PK
int asset_id FK
string plan_name
string plan_type
string frequency
datetime next_maintenance_date
datetime last_maintenance_date
text maintenance_items
string responsible_person
int status
}
MaintenanceRecord {
int id PK
int asset_id FK
int maintenance_application_id FK
int maintenance_plan_id FK
datetime maintenance_date
string maintenance_type
string maintenance_person
text maintenance_items
text maintenance_result
int maintenance_cost
}
4. 采购管理关系图
erDiagram
PurchaseContract ||--o{ PurchaseAcceptance : "has many"
User ||--o{ PurchasePlan : "creates"
User ||--o{ PurchaseContract : "creates"
PurchasePlan {
int id PK
string plan_name
int plan_year
int plan_quarter
int total_budget
int used_budget
int status
int created_by FK
}
PurchaseContract {
int id PK
string contract_number
string contract_name
string supplier_name
string supplier_contact
int contract_amount
datetime contract_date
datetime delivery_date
text payment_terms
int status
int created_by FK
}
PurchaseAcceptance {
int id PK
int contract_id FK
string acceptance_number
datetime acceptance_date
string acceptance_person
text acceptance_result
int status
}
User {
int id PK
string username
string email
string first_name
string last_name
}
5. 处置管理关系图
erDiagram
DisposalApplication ||--o{ DisposalAppraisal : "has many"
Asset ||--o{ DisposalApplication : "has many"
DisposalApplication {
int id PK
int asset_id FK
string application_number
string applicant_name
string applicant_department
text disposal_reason
string disposal_method
datetime disposal_date
int disposal_value
int status
}
DisposalAppraisal {
int id PK
int application_id FK
string appraiser_name
datetime appraisal_date
int appraisal_value
string appraisal_method
text appraisal_result
int status
}
6. 用户权限关系图
erDiagram
User ||--o{ UserRole : "has many"
User ||--o{ AuditLog : "creates"
Role ||--o{ UserRole : "assigned to"
Role ||--o{ RolePermission : "has many"
Permission ||--o{ RolePermission : "granted to"
Organization ||--o{ User : "contains"
User {
int id PK
string username
string email
string first_name
string last_name
string phone
int organization_id FK
boolean is_active
}
Role {
int id PK
string name
string label
text description
boolean is_system
}
Permission {
int id PK
string name
string label
text description
string resource
string action
}
UserRole {
int user_id FK
int role_id FK
}
RolePermission {
int role_id FK
int permission_id FK
}
AuditLog {
int id PK
int user_id FK
string entity_type
int entity_id
string action
json old_values
json new_values
}
7. 组织架构关系图
erDiagram
Organization ||--o{ Organization : "parent-child"
Organization ||--o{ Asset : "owns"
Organization ||--o{ User : "contains"
Organization ||--o{ Transfer : "from/to"
Organization {
int id PK
string name
int parent_id FK
datetime created_at
}
Asset {
int id PK
string name
string code
int status
int organization_id FK
}
User {
int id PK
string username
string email
string first_name
string last_name
int organization_id FK
}
Transfer {
int id PK
int asset_id FK
int from_organization_id FK
int to_organization_id FK
text transfer_reason
int status
}
核心表结构
1. 资产表 (asset)
CREATE TABLE asset (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '资产名称',
spec VARCHAR(255) COMMENT '规格型号',
model VARCHAR(255) COMMENT '型号',
value INTEGER COMMENT '资产价值(分)',
depreciation INTEGER COMMENT '累计折旧(分)',
vendor VARCHAR(255) COMMENT '供应商',
purchased_at TIMESTAMP COMMENT '采购日期',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
status SMALLINT DEFAULT 0 COMMENT '状态:0新增,10闲置,20在用,30报废,40维修',
code VARCHAR(48) COMMENT '资产编码',
coords VARCHAR(255) COMMENT '坐标信息',
address VARCHAR(255) COMMENT '地址',
cert VARCHAR(255) COMMENT '证书编号',
url VARCHAR(255) COMMENT '相关链接',
note TEXT COMMENT '备注',
organization_id INTEGER NOT NULL COMMENT '所属组织ID',
category_id INTEGER NOT NULL COMMENT '分类ID',
INDEX idx_asset_organization (organization_id),
INDEX idx_asset_category (category_id),
INDEX idx_asset_status (status),
INDEX idx_asset_code (code),
INDEX idx_asset_created_at (created_at),
FOREIGN KEY (organization_id) REFERENCES organization(id),
FOREIGN KEY (category_id) REFERENCES category(id)
);
2. 分类表 (category)
CREATE TABLE category (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '分类名称',
label VARCHAR(255) NOT NULL COMMENT '分类标签',
code VARCHAR(6) UNIQUE NOT NULL COMMENT '分类编码',
tid SMALLINT DEFAULT 1 COMMENT '类型ID:1有形资产,2无形资产',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_category_tid (tid),
INDEX idx_category_code (code),
CONSTRAINT chk_category_code CHECK (code ~ '^[A-Z]+$')
);
3. 组织表 (organization)
CREATE TABLE organization (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL COMMENT '组织名称',
parent_id INTEGER COMMENT '父组织ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_organization_parent (parent_id),
FOREIGN KEY (parent_id) REFERENCES organization(id)
);
4. 用户表 (user)
CREATE TABLE user (
id SERIAL PRIMARY KEY,
username VARCHAR(180) UNIQUE NOT NULL COMMENT '用户名',
email VARCHAR(255) UNIQUE NOT NULL COMMENT '邮箱',
password VARCHAR(255) NOT NULL COMMENT '密码哈希',
first_name VARCHAR(255) COMMENT '名字',
last_name VARCHAR(255) COMMENT '姓氏',
phone VARCHAR(20) COMMENT '电话',
organization_id INTEGER COMMENT '所属组织ID',
is_active BOOLEAN DEFAULT TRUE COMMENT '是否激活',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
last_login_at TIMESTAMP COMMENT '最后登录时间',
INDEX idx_user_organization (organization_id),
INDEX idx_user_email (email),
INDEX idx_user_active (is_active),
FOREIGN KEY (organization_id) REFERENCES organization(id)
);
5. 标签表 (tag)
CREATE TABLE tag (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '标签名称',
label VARCHAR(255) NOT NULL COMMENT '标签显示名称',
color VARCHAR(7) DEFAULT '#007bff' COMMENT '标签颜色',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_tag_name (name)
);
多媒体表结构
6. 图片表 (image)
CREATE TABLE image (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
image VARCHAR(255) NOT NULL COMMENT '图片文件名',
title VARCHAR(255) COMMENT '图片标题',
description TEXT COMMENT '图片描述',
file_size INTEGER COMMENT '文件大小(字节)',
width INTEGER COMMENT '图片宽度',
height INTEGER COMMENT '图片高度',
mime_type VARCHAR(100) COMMENT 'MIME类型',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_image_asset (asset_id),
INDEX idx_image_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
7. 视频表 (video)
CREATE TABLE video (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
video VARCHAR(255) NOT NULL COMMENT '视频文件名',
title VARCHAR(255) COMMENT '视频标题',
description TEXT COMMENT '视频描述',
video_format VARCHAR(50) COMMENT '视频格式',
file_size INTEGER COMMENT '文件大小(字节)',
duration INTEGER COMMENT '视频时长(秒)',
width INTEGER COMMENT '视频宽度',
height INTEGER COMMENT '视频高度',
thumbnail VARCHAR(255) COMMENT '缩略图文件名',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_video_asset (asset_id),
INDEX idx_video_format (video_format),
INDEX idx_video_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
8. 附件表 (attachment)
CREATE TABLE attachment (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
attachment VARCHAR(255) NOT NULL COMMENT '附件文件名',
title VARCHAR(255) COMMENT '附件标题',
description TEXT COMMENT '附件描述',
file_type VARCHAR(100) COMMENT '文件类型',
file_size INTEGER COMMENT '文件大小(字节)',
mime_type VARCHAR(100) COMMENT 'MIME类型',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_attachment_asset (asset_id),
INDEX idx_attachment_file_type (file_type),
INDEX idx_attachment_created_at (created_at),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE
);
业务流程表结构
9. 租赁表 (lease)
CREATE TABLE lease (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
lessee_name VARCHAR(255) NOT NULL COMMENT '承租人姓名',
lessee_company VARCHAR(255) COMMENT '承租人公司',
lessee_contact VARCHAR(255) COMMENT '联系人',
lessee_phone VARCHAR(255) COMMENT '联系电话',
lessee_email VARCHAR(255) COMMENT '联系邮箱',
lessee_address VARCHAR(255) COMMENT '联系地址',
lease_start_date TIMESTAMP NOT NULL COMMENT '租赁开始日期',
lease_end_date TIMESTAMP NOT NULL COMMENT '租赁结束日期',
actual_return_date TIMESTAMP COMMENT '实际归还日期',
monthly_rent INTEGER COMMENT '月租金(分)',
security_deposit INTEGER COMMENT '押金(分)',
lease_terms TEXT COMMENT '租赁条款',
purpose TEXT COMMENT '租赁用途',
notes TEXT COMMENT '备注',
location VARCHAR(255) COMMENT '租赁位置',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20租赁中,30已到期,40已归还,50已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_lease_asset (asset_id),
INDEX idx_lease_status (status),
INDEX idx_lease_dates (lease_start_date, lease_end_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
10. 借用表 (borrow)
CREATE TABLE borrow (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
borrower_name VARCHAR(255) NOT NULL COMMENT '借用人姓名',
borrower_department VARCHAR(255) COMMENT '借用人部门',
borrower_contact VARCHAR(255) COMMENT '联系方式',
borrow_start_date TIMESTAMP NOT NULL COMMENT '借用开始日期',
borrow_end_date TIMESTAMP NOT NULL COMMENT '借用结束日期',
actual_return_date TIMESTAMP COMMENT '实际归还日期',
purpose TEXT COMMENT '借用用途',
notes TEXT COMMENT '备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20借用中,30已归还,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_borrow_asset (asset_id),
INDEX idx_borrow_status (status),
INDEX idx_borrow_dates (borrow_start_date, borrow_end_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
11. 调拨表 (transfer)
CREATE TABLE transfer (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
from_organization_id INTEGER COMMENT '调出组织ID',
to_organization_id INTEGER NOT NULL COMMENT '调入组织ID',
transfer_reason TEXT COMMENT '调拨原因',
transfer_date TIMESTAMP NOT NULL COMMENT '调拨日期',
actual_transfer_date TIMESTAMP COMMENT '实际调拨日期',
notes TEXT COMMENT '备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20调拨中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_transfer_asset (asset_id),
INDEX idx_transfer_from_org (from_organization_id),
INDEX idx_transfer_to_org (to_organization_id),
INDEX idx_transfer_status (status),
FOREIGN KEY (asset_id) REFERENCES asset(id),
FOREIGN KEY (from_organization_id) REFERENCES organization(id),
FOREIGN KEY (to_organization_id) REFERENCES organization(id)
);
维护管理表结构
12. 维护申请表 (maintenance_application)
CREATE TABLE maintenance_application (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
applicant_name VARCHAR(255) NOT NULL COMMENT '申请人姓名',
applicant_department VARCHAR(255) COMMENT '申请人部门',
applicant_contact VARCHAR(255) COMMENT '联系方式',
maintenance_type VARCHAR(100) COMMENT '维护类型',
priority SMALLINT DEFAULT 1 COMMENT '优先级:1低,2中,3高,4紧急',
description TEXT NOT NULL COMMENT '问题描述',
expected_date TIMESTAMP COMMENT '期望维护日期',
actual_date TIMESTAMP COMMENT '实际维护日期',
maintenance_cost INTEGER COMMENT '维护费用(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20进行中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_maintenance_asset (asset_id),
INDEX idx_maintenance_status (status),
INDEX idx_maintenance_priority (priority),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
13. 维护计划表 (maintenance_plan)
CREATE TABLE maintenance_plan (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
plan_name VARCHAR(255) NOT NULL COMMENT '计划名称',
plan_type VARCHAR(100) COMMENT '计划类型',
frequency VARCHAR(50) COMMENT '维护频率',
next_maintenance_date TIMESTAMP COMMENT '下次维护日期',
last_maintenance_date TIMESTAMP COMMENT '上次维护日期',
maintenance_items TEXT COMMENT '维护项目',
responsible_person VARCHAR(255) COMMENT '负责人',
status SMALLINT DEFAULT 1 COMMENT '状态:0停用,1启用',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_plan_asset (asset_id),
INDEX idx_plan_status (status),
INDEX idx_plan_next_date (next_maintenance_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
14. 维护记录表 (maintenance_record)
CREATE TABLE maintenance_record (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
maintenance_application_id INTEGER COMMENT '维护申请ID',
maintenance_plan_id INTEGER COMMENT '维护计划ID',
maintenance_date TIMESTAMP NOT NULL COMMENT '维护日期',
maintenance_type VARCHAR(100) COMMENT '维护类型',
maintenance_person VARCHAR(255) COMMENT '维护人员',
maintenance_items TEXT COMMENT '维护项目',
maintenance_result TEXT COMMENT '维护结果',
maintenance_cost INTEGER COMMENT '维护费用(分)',
notes TEXT COMMENT '备注',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_record_asset (asset_id),
INDEX idx_record_application (maintenance_application_id),
INDEX idx_record_plan (maintenance_plan_id),
INDEX idx_record_date (maintenance_date),
FOREIGN KEY (asset_id) REFERENCES asset(id),
FOREIGN KEY (maintenance_application_id) REFERENCES maintenance_application(id),
FOREIGN KEY (maintenance_plan_id) REFERENCES maintenance_plan(id)
);
采购管理表结构
15. 采购计划表 (purchase_plan)
CREATE TABLE purchase_plan (
id SERIAL PRIMARY KEY,
plan_name VARCHAR(255) NOT NULL COMMENT '计划名称',
plan_year INTEGER NOT NULL COMMENT '计划年度',
plan_quarter INTEGER COMMENT '计划季度',
total_budget INTEGER COMMENT '总预算(分)',
used_budget INTEGER DEFAULT 0 COMMENT '已用预算(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0草稿,1待审批,2已批准,3执行中,4已完成',
created_by INTEGER COMMENT '创建人ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_plan_year (plan_year),
INDEX idx_plan_status (status),
INDEX idx_plan_created_by (created_by),
FOREIGN KEY (created_by) REFERENCES user(id)
);
16. 采购合同表 (purchase_contract)
CREATE TABLE purchase_contract (
id SERIAL PRIMARY KEY,
contract_number VARCHAR(255) UNIQUE NOT NULL COMMENT '合同编号',
contract_name VARCHAR(255) NOT NULL COMMENT '合同名称',
supplier_name VARCHAR(255) NOT NULL COMMENT '供应商名称',
supplier_contact VARCHAR(255) COMMENT '供应商联系方式',
contract_amount INTEGER NOT NULL COMMENT '合同金额(分)',
contract_date TIMESTAMP NOT NULL COMMENT '合同日期',
delivery_date TIMESTAMP COMMENT '交付日期',
payment_terms TEXT COMMENT '付款条款',
contract_terms TEXT COMMENT '合同条款',
status SMALLINT DEFAULT 0 COMMENT '状态:0草稿,1待审批,2已批准,3执行中,4已完成,5已取消',
created_by INTEGER COMMENT '创建人ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_contract_number (contract_number),
INDEX idx_contract_status (status),
INDEX idx_contract_supplier (supplier_name),
INDEX idx_contract_date (contract_date),
FOREIGN KEY (created_by) REFERENCES user(id)
);
17. 采购验收表 (purchase_acceptance)
CREATE TABLE purchase_acceptance (
id SERIAL PRIMARY KEY,
contract_id INTEGER NOT NULL COMMENT '合同ID',
acceptance_number VARCHAR(255) UNIQUE NOT NULL COMMENT '验收编号',
acceptance_date TIMESTAMP NOT NULL COMMENT '验收日期',
acceptance_person VARCHAR(255) COMMENT '验收人员',
acceptance_result TEXT COMMENT '验收结果',
acceptance_notes TEXT COMMENT '验收备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待验收,1验收通过,2验收不通过',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_acceptance_contract (contract_id),
INDEX idx_acceptance_status (status),
INDEX idx_acceptance_date (acceptance_date),
FOREIGN KEY (contract_id) REFERENCES purchase_contract(id)
);
处置管理表结构
18. 处置申请表 (disposal_application)
CREATE TABLE disposal_application (
id SERIAL PRIMARY KEY,
asset_id INTEGER NOT NULL COMMENT '资产ID',
application_number VARCHAR(255) UNIQUE NOT NULL COMMENT '申请编号',
applicant_name VARCHAR(255) NOT NULL COMMENT '申请人姓名',
applicant_department VARCHAR(255) COMMENT '申请人部门',
applicant_contact VARCHAR(255) COMMENT '联系方式',
disposal_reason TEXT NOT NULL COMMENT '处置原因',
disposal_method VARCHAR(100) COMMENT '处置方式',
disposal_date TIMESTAMP COMMENT '处置日期',
disposal_value INTEGER COMMENT '处置价值(分)',
status SMALLINT DEFAULT 0 COMMENT '状态:0待审批,10已批准,20处置中,30已完成,40已取消',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_disposal_asset (asset_id),
INDEX idx_disposal_status (status),
INDEX idx_disposal_date (disposal_date),
FOREIGN KEY (asset_id) REFERENCES asset(id)
);
19. 处置评估表 (disposal_appraisal)
CREATE TABLE disposal_appraisal (
id SERIAL PRIMARY KEY,
application_id INTEGER NOT NULL COMMENT '申请ID',
appraiser_name VARCHAR(255) NOT NULL COMMENT '评估人姓名',
appraisal_date TIMESTAMP NOT NULL COMMENT '评估日期',
appraisal_value INTEGER COMMENT '评估价值(分)',
appraisal_method VARCHAR(100) COMMENT '评估方法',
appraisal_result TEXT COMMENT '评估结果',
appraisal_notes TEXT COMMENT '评估备注',
status SMALLINT DEFAULT 0 COMMENT '状态:0待评估,1评估完成,2评估不通过',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_appraisal_application (application_id),
INDEX idx_appraisal_status (status),
INDEX idx_appraisal_date (appraisal_date),
FOREIGN KEY (application_id) REFERENCES disposal_application(id)
);
关联表结构
20. 资产标签关联表 (asset_tag)
CREATE TABLE asset_tag (
asset_id INTEGER NOT NULL COMMENT '资产ID',
tag_id INTEGER NOT NULL COMMENT '标签ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (asset_id, tag_id),
INDEX idx_asset_tag_asset (asset_id),
INDEX idx_asset_tag_tag (tag_id),
FOREIGN KEY (asset_id) REFERENCES asset(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE
);
系统管理表结构
21. 角色表 (role)
CREATE TABLE role (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '角色名称',
label VARCHAR(255) NOT NULL COMMENT '角色显示名称',
description TEXT COMMENT '角色描述',
is_system BOOLEAN DEFAULT FALSE COMMENT '是否系统角色',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_role_name (name),
INDEX idx_role_system (is_system)
);
22. 权限表 (permission)
CREATE TABLE permission (
id SERIAL PRIMARY KEY,
name VARCHAR(255) UNIQUE NOT NULL COMMENT '权限名称',
label VARCHAR(255) NOT NULL COMMENT '权限显示名称',
description TEXT COMMENT '权限描述',
resource VARCHAR(255) COMMENT '资源名称',
action VARCHAR(255) COMMENT '操作名称',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_permission_name (name),
INDEX idx_permission_resource (resource)
);
23. 用户角色关联表 (user_role)
CREATE TABLE user_role (
user_id INTEGER NOT NULL COMMENT '用户ID',
role_id INTEGER NOT NULL COMMENT '角色ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (user_id, role_id),
INDEX idx_user_role_user (user_id),
INDEX idx_user_role_role (role_id),
FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE,
FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE
);
24. 角色权限关联表 (role_permission)
CREATE TABLE role_permission (
role_id INTEGER NOT NULL COMMENT '角色ID',
permission_id INTEGER NOT NULL COMMENT '权限ID',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (role_id, permission_id),
INDEX idx_role_permission_role (role_id),
INDEX idx_role_permission_permission (permission_id),
FOREIGN KEY (role_id) REFERENCES role(id) ON DELETE CASCADE,
FOREIGN KEY (permission_id) REFERENCES permission(id) ON DELETE CASCADE
);
审计日志表结构
25. 审计日志表 (audit_log)
CREATE TABLE audit_log (
id SERIAL PRIMARY KEY,
user_id INTEGER COMMENT '用户ID',
entity_type VARCHAR(255) NOT NULL COMMENT '实体类型',
entity_id INTEGER NOT NULL COMMENT '实体ID',
action VARCHAR(50) NOT NULL COMMENT '操作类型',
old_values JSON COMMENT '旧值',
new_values JSON COMMENT '新值',
ip_address VARCHAR(45) COMMENT 'IP地址',
user_agent TEXT COMMENT '用户代理',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_audit_user (user_id),
INDEX idx_audit_entity (entity_type, entity_id),
INDEX idx_audit_action (action),
INDEX idx_audit_created_at (created_at),
FOREIGN KEY (user_id) REFERENCES user(id)
);
数据库索引策略
主要索引
- 主键索引: 所有表的主键自动创建
- 外键索引: 所有外键字段创建索引
- 状态索引: 业务状态字段创建索引
- 时间索引: 创建时间、更新时间字段创建索引
- 业务索引: 编码、名称等业务字段创建索引
复合索引
- 查询优化: 根据常用查询组合创建复合索引
- 排序优化: 支持排序的字段组合创建索引
- 过滤优化: 多条件查询的字段组合创建索引
数据完整性约束
外键约束
- 级联删除: 子表记录随父表删除
- 级联更新: 父表主键更新时子表同步更新
- 限制删除: 有子表记录时禁止删除父表记录
检查约束
- 数据范围: 数值字段的范围检查
- 格式验证: 字符串字段的格式检查
- 枚举值: 状态字段的枚举值检查
唯一约束
- 业务唯一: 编码、名称等业务字段唯一性
- 系统唯一: 用户名、邮箱等系统字段唯一性
总结
本数据库设计采用关系型数据库设计原则,通过合理的表结构设计、索引策略、约束机制,确保了数据的一致性、完整性和查询性能。支持资产全生命周期管理、多媒体档案管理、业务流程管理等核心功能,为系统的高效运行提供了坚实的数据基础。