Files
license-manager/backend/migrations/003_create_authorization_codes_table.sql

64 lines
3.4 KiB
SQL

-- 授权码表结构
-- 基于授权模块属性设计创建
-- MySQL版本
-- 创建授权码表
CREATE TABLE authorization_codes (
-- 基础信息属性
id VARCHAR(36) PRIMARY KEY DEFAULT (UUID()),
code VARCHAR(1000) NOT NULL UNIQUE COMMENT '唯一授权码,软件身份凭证(支持自包含配置)',
customer_id VARCHAR(36) NOT NULL COMMENT '关联客户ID',
created_by VARCHAR(36) NOT NULL COMMENT '创建人ID',
software_id VARCHAR(50) COMMENT '目标软件产品ID',
description TEXT COMMENT '授权码描述',
-- 授权核心属性
start_date DATETIME(3) NOT NULL COMMENT '授权开始时间',
end_date DATETIME(3) NOT NULL COMMENT '授权结束时间',
deployment_type VARCHAR(20) NOT NULL DEFAULT 'standalone' COMMENT '部署类型: standalone单机版/cloud云端版/hybrid混合版',
encryption_type VARCHAR(20) DEFAULT 'standard' COMMENT '加密类型: standard标准加密/advanced高级加密',
software_version VARCHAR(50) COMMENT '支持的软件版本范围',
-- 激活控制属性
max_activations INT NOT NULL DEFAULT 1 COMMENT '最大许可证数量',
-- 状态管理属性
is_locked BOOLEAN NOT NULL DEFAULT FALSE COMMENT '是否被锁定',
lock_reason TEXT COMMENT '锁定原因,自定义文本输入',
locked_at DATETIME(3) NULL COMMENT '锁定时间',
locked_by VARCHAR(36) COMMENT '锁定操作人',
-- 通用功能控制属性
feature_config JSON COMMENT '功能配置,软件产品基础功能',
usage_limits JSON COMMENT '使用量限制,如用户数、API调用次数等',
custom_parameters JSON COMMENT '自定义参数,软件特定功能或用户定制功能',
-- 时间字段 (使用DATETIME(3)匹配Go的time.Time和GORM的精度要求)
created_at DATETIME(3) NOT NULL,
updated_at DATETIME(3) NOT NULL,
-- 外键约束
FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='授权码表 - 业务配置容器';
-- 创建索引
CREATE INDEX idx_authorization_codes_code ON authorization_codes(code);
CREATE INDEX idx_authorization_codes_customer_id ON authorization_codes(customer_id);
CREATE INDEX idx_authorization_codes_software_id ON authorization_codes(software_id);
CREATE INDEX idx_authorization_codes_deployment_type ON authorization_codes(deployment_type);
CREATE INDEX idx_authorization_codes_start_date ON authorization_codes(start_date);
CREATE INDEX idx_authorization_codes_end_date ON authorization_codes(end_date);
CREATE INDEX idx_authorization_codes_created_by ON authorization_codes(created_by);
CREATE INDEX idx_authorization_codes_created_at ON authorization_codes(created_at);
CREATE INDEX idx_authorization_codes_is_locked ON authorization_codes(is_locked);
CREATE INDEX idx_authorization_codes_locked_at ON authorization_codes(locked_at);
-- 复合索引用于常见查询
CREATE INDEX idx_authorization_codes_customer_status ON authorization_codes(customer_id, start_date, end_date);
CREATE INDEX idx_authorization_codes_software_status ON authorization_codes(software_id, deployment_type);
-- 注意:时间戳由Go应用程序管理,不依赖数据库默认值
-- 状态字段(status)是虚字段,通过应用逻辑计算得出:
-- normal正常: 当前时间在start_date和end_date之间且is_locked=false
-- locked已锁定: is_locked=true
-- expired已过期: 当前时间超过end_date