Files

227 lines
9.8 KiB
MySQL
Raw Permalink Normal View History

2025-07-22 11:30:53 +08:00
create database traceabilityCode;
use traceabilityCode;
-- 用户表
CREATE TABLE users (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_account VARCHAR(255) NOT NULL COMMENT '用户账号',
username VARCHAR(50) UNIQUE NOT NULL COMMENT '用户名',
password VARCHAR(255) NOT NULL COMMENT '密码(加密)',
email VARCHAR(100) COMMENT '邮箱',
phone VARCHAR(20) COMMENT '手机号',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
last_login_time DATETIME COMMENT '最后登录时间',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
isDelete TINYINT DEFAULT 0 comment '逻辑删除'
);
-- 角色表(优化后)
CREATE TABLE roles (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL COMMENT '角色名称',
code VARCHAR(50) UNIQUE NOT NULL COMMENT '角色编码',
description TEXT COMMENT '角色描述',
permissions JSON COMMENT '角色权限配置,如:["user:read", "user:write", "product:manage"]',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 用户角色关联表
CREATE TABLE user_roles (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
role_id BIGINT NOT NULL,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uk_user_role (user_id, role_id)
);
-- 产品表
CREATE TABLE products (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '产品名称',
category_id BIGINT COMMENT '分类ID',
sku VARCHAR(50) UNIQUE COMMENT '产品编码',
status TINYINT DEFAULT 1 COMMENT '状态',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 属性定义表(定义每种产品可能有的属性)
CREATE TABLE product_attributes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
category_id BIGINT COMMENT '适用的产品分类',
name VARCHAR(50) NOT NULL COMMENT '属性名称',
code VARCHAR(50) NOT NULL COMMENT '属性编码',
data_type ENUM('text', 'number', 'date', 'select') COMMENT '数据类型',
is_required TINYINT DEFAULT 0 COMMENT '是否必填',
options JSON COMMENT '选项值(用于下拉选择)',
section ENUM('raw_material', 'production', 'storage', 'inspection') COMMENT '所属板块'
);
-- 产品属性值表(存储具体的属性值)
CREATE TABLE product_attribute_values (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
product_id BIGINT NOT NULL COMMENT '产品ID',
attribute_id BIGINT NOT NULL COMMENT '属性ID',
value TEXT COMMENT '属性值',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_product_attribute (product_id, attribute_id)
);
-- 直播管理表
CREATE TABLE live_streams (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
stream_name VARCHAR(100) NOT NULL COMMENT '流名称',
stream_key VARCHAR(255) UNIQUE NOT NULL COMMENT '流密钥',
push_url VARCHAR(500) COMMENT '推流地址',
play_url VARCHAR(500) COMMENT '播放地址',
platform VARCHAR(50) COMMENT '平台',
account_id BIGINT COMMENT '关联账号ID',
status TINYINT DEFAULT 0 COMMENT '状态:0-离线,1-在线',
quality JSON COMMENT '画质配置',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 直播记录表
CREATE TABLE live_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
stream_id BIGINT NOT NULL,
start_time DATETIME NOT NULL COMMENT '开始时间',
end_time DATETIME COMMENT '结束时间',
duration INT COMMENT '直播时长(秒)',
viewer_count INT DEFAULT 0 COMMENT '观看人数',
peak_viewer INT DEFAULT 0 COMMENT '峰值观看人数',
status ENUM('live', 'ended', 'error') DEFAULT 'live',
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 素材分类表
CREATE TABLE material_categories (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '分类名称',
type ENUM('image', 'video', 'document', 'other') NOT NULL COMMENT '素材类型',
parent_id BIGINT DEFAULT 0 COMMENT '父分类ID',
sort_order INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 视频表
CREATE TABLE videos (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200) NOT NULL COMMENT '视频标题',
description TEXT COMMENT '视频描述',
file_path VARCHAR(500) NOT NULL COMMENT '视频文件路径',
file_url VARCHAR(500) COMMENT '播放URL',
thumbnail VARCHAR(500) COMMENT '缩略图',
duration INT COMMENT '时长(秒)',
file_size BIGINT COMMENT '文件大小',
resolution VARCHAR(20) COMMENT '分辨率',
format VARCHAR(20) COMMENT '视频格式',
bitrate INT COMMENT '码率',
fps INT COMMENT '帧率',
category_id BIGINT COMMENT '分类ID',
tags JSON COMMENT '标签',
view_count INT DEFAULT 0 COMMENT '播放次数',
status TINYINT DEFAULT 1 COMMENT '状态:0-处理中,1-正常,2-失败',
user_id BIGINT COMMENT '上传用户',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 扫码记录表
CREATE TABLE qr_codes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '二维码名称',
code VARCHAR(100) UNIQUE NOT NULL COMMENT '二维码标识',
content TEXT NOT NULL COMMENT '二维码内容',
type ENUM('url', 'text', 'product', 'live') NOT NULL COMMENT '类型',
related_id BIGINT COMMENT '关联对象ID',
qr_image VARCHAR(500) COMMENT '二维码图片',
expire_time DATETIME COMMENT '过期时间',
scan_limit INT DEFAULT 0 COMMENT '扫描次数限制,0为无限制',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
user_id BIGINT COMMENT '创建用户',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 扫码统计表
CREATE TABLE qr_scan_statistics (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
qr_code_id BIGINT NOT NULL,
date DATE NOT NULL COMMENT '统计日期',
scan_count INT DEFAULT 0 COMMENT '扫描次数',
unique_scan_count INT DEFAULT 0 COMMENT '独立扫描次数',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 操作日志表
CREATE TABLE operation_logs (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT COMMENT '操作用户ID',
username VARCHAR(50) COMMENT '用户名',
operation VARCHAR(100) NOT NULL COMMENT '操作类型',
method VARCHAR(10) COMMENT '请求方法',
path VARCHAR(200) COMMENT '请求路径',
ip_address VARCHAR(45) COMMENT 'IP地址',
user_agent TEXT COMMENT '用户代理',
request_params JSON COMMENT '请求参数',
response_data JSON COMMENT '响应数据',
execution_time INT COMMENT '执行时间(毫秒)',
status TINYINT DEFAULT 1 COMMENT '状态:0-失败,1-成功',
error_message TEXT COMMENT '错误信息',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_time (user_id, created_at),
INDEX idx_operation_time (operation, created_at)
);
-- 溯源码生成表
CREATE TABLE traceability_codes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(100) UNIQUE NOT NULL COMMENT '溯源码',
product_id BIGINT NOT NULL COMMENT '关联产品',
batch_no VARCHAR(50) COMMENT '批次号',
production_date DATE COMMENT '生产日期',
expire_date DATE COMMENT '过期日期',
status ENUM('active', 'used', 'expired') DEFAULT 'active',
scan_count INT DEFAULT 0 COMMENT '扫描次数',
last_scan_time DATETIME COMMENT '最后扫码时间',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 二维码表(修改后)
CREATE TABLE qr_codes (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT '二维码名称',
code VARCHAR(100) UNIQUE NOT NULL COMMENT '二维码标识',
content TEXT NOT NULL COMMENT '二维码内容',
type ENUM('url', 'text', 'product', 'live') NOT NULL COMMENT '类型',
related_id BIGINT COMMENT '关联对象ID',
traceability_code_id BIGINT COMMENT '关联溯源码ID',
qr_image VARCHAR(500) COMMENT '二维码图片',
expire_time DATETIME COMMENT '过期时间',
scan_limit INT DEFAULT 0 COMMENT '扫描次数限制,0为无限制',
scan_count INT DEFAULT 0 COMMENT '总扫码次数',
unique_scan_count INT DEFAULT 0 COMMENT '独立用户扫码次数',
last_scan_time DATETIME COMMENT '最后扫码时间',
status TINYINT DEFAULT 1 COMMENT '状态:0-禁用,1-启用',
user_id BIGINT COMMENT '创建用户',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- 扫码记录表
CREATE TABLE scan_records (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
qr_code_id BIGINT NOT NULL COMMENT '二维码ID',
scan_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '扫码时间',
ip_address VARCHAR(45) COMMENT '扫码IP地址',
user_agent TEXT COMMENT '用户代理信息',
location JSON COMMENT 'GPS位置信息 {"lat": 39.9042, "lng": 116.4074, "address": "北京市朝阳区"}',
device_info JSON COMMENT '设备信息 {"os": "iOS", "browser": "Safari", "version": "14.0"}',
session_id VARCHAR(100) COMMENT '会话ID',
referrer VARCHAR(500) COMMENT '来源页面',
scan_source ENUM('wechat', 'alipay', 'browser', 'app') COMMENT '扫码来源',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_qr_time (qr_code_id, scan_time),
INDEX idx_session (session_id),
INDEX idx_ip_time (ip_address, scan_time)
);