Files
superlink/sql/schema_v1.0.51_base.sql
T

526 lines
30 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- SuperLink 基准建库脚本(Fresh Install Base Schema) v1.0.51
-- 用途:全新部署时一次性建立全部业务表(当前形态,含历次迁移结果)。
-- 由仓库"增量迁移缺失基准 schema"这一现状补建:主业务表定义从
-- api 代码字段白名单 + INSERT/SELECT 语句反推,字典/属性/计划等表
-- 直接采用迁移文件中的 CREATE TABLE 原文。
-- 约定:v1.0.16 后所有业务表时间字段为 DATE;id 一律 INT UNSIGNED AUTO_INCREMENT;
-- 字符集 utf8mb4 / 排序 utf8mb4_unicode_ci。
-- 执行顺序:本文件 → dict_seed.sql → 系统初始数据(admin)。
-- ============================================================
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ------------------------------------------------------------
-- 0) 数据字典(定义见 migration_v1.0.16 / v1.0.18,数据由 dict_seed.sql 注入)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `data_dict_country` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '国家/地区编码',
`name` VARCHAR(100) NOT NULL COMMENT '国家/地区中文名',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='国家地区编码字典';
CREATE TABLE IF NOT EXISTS `data_dict_area` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '行政区划编码',
`name` VARCHAR(100) NOT NULL COMMENT '行政区划名称',
`parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行政区划编码',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent` (`parent_code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='行政区划编码字典';
CREATE TABLE IF NOT EXISTS `data_dict_industry` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '行业编码',
`name` VARCHAR(100) NOT NULL COMMENT '行业名称',
`parent_code` VARCHAR(50) DEFAULT NULL COMMENT '上级行业编码',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_parent` (`parent_code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='招标行业分类字典';
CREATE TABLE IF NOT EXISTS `data_dict_certificate` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NULL DEFAULT NULL COMMENT '证书类型枚举编码',
`name` VARCHAR(100) NOT NULL COMMENT '证书类型名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='证书类型枚举字典';
CREATE TABLE IF NOT EXISTS `data_dict_company_type` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`code` VARCHAR(50) NULL DEFAULT NULL COMMENT '企业类型编码',
`name` VARCHAR(100) NOT NULL COMMENT '企业类型名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_code` (`code`),
KEY `idx_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业类型字典(对应 companies.legal_form)';
CREATE TABLE IF NOT EXISTS `source_channels` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
`name` VARCHAR(50) NOT NULL COMMENT '渠道名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='来源渠道字典';
-- 来源渠道默认数据
INSERT INTO `source_channels` (`name`, `sort_order`) VALUES
('展会', 1), ('SNS/社交媒体', 2), ('竞价广告', 3), ('搜索引擎自然流量', 4),
('行业媒体/门户', 5), ('转介绍', 6), ('电话销售', 7), ('邮件营销', 8),
('地推', 9), ('代理商/渠道', 10), ('官网咨询', 11), ('其他', 99);
-- 企业类型字典默认数据
INSERT INTO `data_dict_company_type` (`code`, `name`, `sort_order`) VALUES
('llc', '有限责任公司', 1), ('joint_stock', '股份有限公司', 2), ('partnership', '合伙企业', 3),
('sole_proprietorship', '个人独资企业', 4), ('state_owned', '国有企业', 5), ('collective', '集体所有制企业', 6),
('foreign_invested', '外商投资企业', 7), ('joint_venture', '中外合资企业', 8), ('other', '其他', 99);
-- ------------------------------------------------------------
-- 1) 客户主体:企业
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `companies` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`display_name` VARCHAR(191) NOT NULL DEFAULT '' COMMENT '显示名称',
`name_zh` VARCHAR(191) DEFAULT NULL COMMENT '中文名',
`business_role` VARCHAR(50) DEFAULT NULL COMMENT '业务类型',
`country` VARCHAR(100) DEFAULT NULL COMMENT '国家/地区',
`registration_number` VARCHAR(100) DEFAULT NULL COMMENT '统一社会信用代码/注册号',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`legal_form` VARCHAR(50) DEFAULT NULL COMMENT '企业类型(公司)',
`legal_representative` VARCHAR(100) DEFAULT NULL COMMENT '法定代表人',
`business_scope` TEXT DEFAULT NULL COMMENT '经营范围',
`established_date` DATE DEFAULT NULL COMMENT '成立日期',
`registered_capital` VARCHAR(50) DEFAULT NULL COMMENT '注册资本',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`industry_subdivision` VARCHAR(100) DEFAULT NULL COMMENT '行业细分',
`latest_employee_count` INT DEFAULT NULL COMMENT '最新员工数',
`latest_annual_revenue` VARCHAR(50) DEFAULT NULL COMMENT '年营收',
`is_listed` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否上市 0/1',
`stock_code` VARCHAR(30) DEFAULT NULL COMMENT '股票代码',
`website` VARCHAR(255) DEFAULT NULL COMMENT '官网',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度不达标标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_source_channel` (`source_channel`),
KEY `idx_name_zh` (`name_zh`),
KEY `idx_industry` (`industry`),
KEY `idx_created_at` (`created_at`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业表';
-- ------------------------------------------------------------
-- 2) 客户主体:人员
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `persons` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`union_id` VARCHAR(64) DEFAULT NULL COMMENT '外部/统一ID(去重线索)',
`full_name` VARCHAR(100) DEFAULT NULL COMMENT '姓名',
`gender` VARCHAR(20) DEFAULT NULL COMMENT '性别(男/女/未知)',
`nationality` VARCHAR(50) DEFAULT NULL COMMENT '国籍',
`id_type` VARCHAR(30) DEFAULT NULL COMMENT '证件类型',
`id_number` VARCHAR(100) DEFAULT NULL COMMENT '身份证号码',
`education` VARCHAR(30) DEFAULT NULL COMMENT '学历',
`graduated_from` VARCHAR(191) DEFAULT NULL COMMENT '毕业院校',
`hometown` VARCHAR(100) DEFAULT NULL COMMENT '家乡',
`work_location` VARCHAR(100) DEFAULT NULL COMMENT '工作所在地',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度不达标标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_full_name` (`full_name`),
KEY `idx_source_channel` (`source_channel`),
KEY `idx_work_location` (`work_location`),
KEY `idx_incomplete` (`is_incomplete`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员表';
-- ------------------------------------------------------------
-- 3) 社媒/联系方式(多态归属:owner_type='company'|'person',platform 可为 phone/email/社媒名)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `social_accounts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`owner_type` VARCHAR(20) NOT NULL COMMENT '归属类型 company/person',
`owner_id` INT UNSIGNED NOT NULL COMMENT '归属主体ID',
`platform` VARCHAR(30) NOT NULL COMMENT '平台:phone/email/wechat/weibo/douyin/...',
`account_id` VARCHAR(191) NOT NULL COMMENT '账号号/手机/邮箱',
`profile_url` VARCHAR(500) DEFAULT NULL COMMENT '主页链接',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_primary` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否常用 1/0',
`is_defult` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否常用(备用字段)1/0',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_incomplete`TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_owner` (`owner_type`, `owner_id`),
KEY `idx_platform` (`platform`),
KEY `idx_account` (`account_id`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='社媒账号/联系方式表';
-- ------------------------------------------------------------
-- 4) 媒体商业属性(一人/一账号的多条商业评估)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `media_commercial_attributes` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`social_account_id` INT UNSIGNED NOT NULL COMMENT '关联 social_accounts.id',
`account_level` VARCHAR(50) DEFAULT NULL COMMENT '账号等级',
`content_categories` VARCHAR(255) DEFAULT NULL COMMENT '内容领域',
`follower_count` INT DEFAULT NULL COMMENT '粉丝数',
`avg_read_count` INT DEFAULT NULL COMMENT '平均阅读',
`certification_type` VARCHAR(50) DEFAULT NULL COMMENT '认证类型',
`special_requirements` TEXT DEFAULT NULL COMMENT '特殊要求',
`media_remark` TEXT DEFAULT NULL COMMENT '评估备注',
`is_incomplete` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '完整度标记',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_social_account` (`social_account_id`),
KEY `idx_incomplete` (`is_incomplete`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='媒体商业属性表';
-- ------------------------------------------------------------
-- 5) 需求(企业需求线索)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_needs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`contact_person` VARCHAR(100) DEFAULT NULL COMMENT '联系人',
`contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话',
`contact_email` VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱',
`need_category` VARCHAR(100) DEFAULT NULL COMMENT '需求类别',
`target_product_category` VARCHAR(100) DEFAULT NULL COMMENT '目标产品品类',
`application_scenario` VARCHAR(255) DEFAULT NULL COMMENT '应用场景',
`description` TEXT DEFAULT NULL COMMENT '需求描述',
`status` VARCHAR(30) DEFAULT NULL COMMENT '状态',
`is_valid` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_category` (`need_category`),
KEY `idx_is_valid` (`is_valid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='需求表';
-- ------------------------------------------------------------
-- 6) 人员工作履历
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `person_work_experiences` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`person_id` INT UNSIGNED NOT NULL COMMENT '关联人员',
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '任职企业',
`position` VARCHAR(191) DEFAULT NULL COMMENT '职位',
`department` VARCHAR(100) DEFAULT NULL COMMENT '部门',
`job_level` VARCHAR(50) DEFAULT NULL COMMENT '职级',
`start_date` DATE DEFAULT NULL COMMENT '开始时间',
`end_date` DATE DEFAULT NULL COMMENT '结束时间',
`is_current` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否现任 1/0',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 1/0',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_person` (`person_id`),
KEY `idx_company` (`company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='人员工作履历表';
-- ------------------------------------------------------------
-- 7) 企业产品(类别 + 定位 + 系列)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`category_name` VARCHAR(100) NOT NULL COMMENT '产品类别名',
`category_description` VARCHAR(255) DEFAULT NULL COMMENT '类别说明',
`positioning` TEXT DEFAULT NULL COMMENT '产品基本定位(商业定位介绍)',
`series` VARCHAR(200) DEFAULT NULL COMMENT '包含系列',
`is_core` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否核心产品',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_core` (`is_core`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业产品表';
-- 产品参数 EAV(定义见 migration_v1.0.18)
CREATE TABLE IF NOT EXISTS `company_products_attr` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`industry` VARCHAR(100) NOT NULL,
`attr_name` VARCHAR(50) NOT NULL,
`attr_type` ENUM('string','number','boolean','date') NOT NULL DEFAULT 'string',
`unit` VARCHAR(20) DEFAULT NULL,
`sort_order` INT NOT NULL DEFAULT 0,
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_industry_attr` (`industry`, `attr_name`),
KEY `idx_industry` (`industry`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数属性定义表(EAV)';
CREATE TABLE IF NOT EXISTS `company_products_attr_value` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` INT UNSIGNED NOT NULL,
`attr_id` INT UNSIGNED NOT NULL,
`value_string` TEXT DEFAULT NULL,
`value_number` DECIMAL(20,4) DEFAULT NULL,
`value_boolean` TINYINT(1) DEFAULT NULL,
`value_date` DATE DEFAULT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_product_attr` (`product_id`, `attr_id`),
KEY `idx_product` (`product_id`),
KEY `idx_attr` (`attr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='产品参数值表(EAV)';
-- ------------------------------------------------------------
-- 8) 企业文档
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_documents` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`doc_name` VARCHAR(255) NOT NULL COMMENT '文档名称',
`storage_path` VARCHAR(500) DEFAULT NULL COMMENT '存储路径',
`file_type` VARCHAR(30) DEFAULT NULL COMMENT '文件类型(pdf/word/xlsx/图片)',
`is_current` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否现行 1/0',
`document_source` VARCHAR(100) DEFAULT NULL COMMENT '文档来源',
`tags` VARCHAR(255) DEFAULT NULL COMMENT '标签',
`publish_date` DATE DEFAULT NULL COMMENT '发布日期',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_file_type` (`file_type`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业文档表';
-- ------------------------------------------------------------
-- 9) 财务与资质
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `company_financials` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`fiscal_year` INT NOT NULL COMMENT '财年',
`employee_count` INT DEFAULT NULL,
`total_revenue` DECIMAL(20,2) DEFAULT NULL,
`net_profit` DECIMAL(20,2) DEFAULT NULL,
`total_assets` DECIMAL(20,2) DEFAULT NULL,
`total_liabilities` DECIMAL(20,2) DEFAULT NULL,
`owner_equity` DECIMAL(20,2) DEFAULT NULL,
`gross_margin` DECIMAL(10,4) DEFAULT NULL,
`net_margin` DECIMAL(10,4) DEFAULT NULL,
`debt_ratio` DECIMAL(10,4) DEFAULT NULL,
`financial_report_url` VARCHAR(500) DEFAULT NULL,
`data_source` VARCHAR(100) DEFAULT '手动录入',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_company_year` (`company_id`, `fiscal_year`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业年度财务明细表';
CREATE TABLE IF NOT EXISTS `company_certifications` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED NOT NULL COMMENT '关联企业',
`certification_type_id` INT UNSIGNED DEFAULT NULL COMMENT '证书类型(字典)',
`certificate_number` VARCHAR(100) DEFAULT NULL COMMENT '证书编号',
`level` VARCHAR(50) DEFAULT NULL COMMENT '级别',
`issuing_authority` VARCHAR(200) DEFAULT NULL COMMENT '颁证机构',
`issue_date` DATE DEFAULT NULL COMMENT '发证日期',
`expiry_date` DATE DEFAULT NULL COMMENT '有效期至',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_cert_type` (`certification_type_id`),
CONSTRAINT `fk_company_cert_dict` FOREIGN KEY (`certification_type_id`)
REFERENCES `data_dict_certificate` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业资质认证表';
CREATE TABLE IF NOT EXISTS `company_relations` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '企业A',
`related_company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业B',
`related_company_name` VARCHAR(191) DEFAULT NULL COMMENT '关联企业名称',
`relation_type` VARCHAR(50) DEFAULT NULL COMMENT '关系类型',
`established_date` DATE DEFAULT NULL COMMENT '关系建立日期',
`note` VARCHAR(255) DEFAULT NULL COMMENT '备注',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`created_at` DATE DEFAULT NULL COMMENT '创建日期',
`updated_at` DATE DEFAULT NULL COMMENT '更新日期',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_related` (`related_company_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='企业关联关系表';
-- ------------------------------------------------------------
-- 10) 硬数据碎片(preliminary_data,v1.0.48 重构后形态)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `preliminary_data` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`source_type` VARCHAR(20) DEFAULT NULL COMMENT '碎片类型 company/person/product/need/mixed',
`company_name` VARCHAR(191) DEFAULT NULL COMMENT '企业名(核心)',
`person_name` VARCHAR(100) DEFAULT NULL COMMENT '联系人(核心)',
`contact_phone` VARCHAR(50) DEFAULT NULL COMMENT '联系电话(核心)',
`contact_email` VARCHAR(100) DEFAULT NULL COMMENT '联系邮箱(核心)',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '行业',
`registration_number` VARCHAR(100) DEFAULT NULL COMMENT '注册号(重要)',
`business_role` VARCHAR(50) DEFAULT NULL COMMENT '业务类型(重要)',
`country` VARCHAR(100) DEFAULT NULL COMMENT '国家/地区(重要)',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址(重要)',
`work_location` VARCHAR(100) DEFAULT NULL COMMENT '工作所在地(重要)',
`id_number` VARCHAR(100) DEFAULT NULL COMMENT '身份证号码(重要)',
`platform` VARCHAR(50) DEFAULT NULL COMMENT '社媒平台(核心)',
`account_id` VARCHAR(200) DEFAULT NULL COMMENT '社媒账号ID(核心)',
`profile_url` VARCHAR(500) DEFAULT NULL COMMENT '主页链接(重要)',
`source_channel` VARCHAR(50) DEFAULT NULL COMMENT '来源渠道',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`converted_type` VARCHAR(20) DEFAULT NULL COMMENT '转换目标类型 companies/persons/...',
`converted_id` VARCHAR(64) DEFAULT NULL COMMENT '转换后目标表ID(非空=已转换/已处理)',
`recorded_by` INT UNSIGNED DEFAULT NULL COMMENT '录入用户',
`follow_person` VARCHAR(50) DEFAULT NULL COMMENT '跟进人',
`label` VARCHAR(50) DEFAULT NULL COMMENT '标签',
`remark` TEXT DEFAULT NULL COMMENT '备注',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '录入时间',
`updated_at` DATETIME DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`processed_at` DATETIME DEFAULT NULL COMMENT '处理时间',
PRIMARY KEY (`id`),
KEY `idx_source_type` (`source_type`),
KEY `idx_converted` (`converted_id`),
KEY `idx_is_active` (`is_active`),
KEY `idx_channel` (`source_channel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='硬数据碎片表';
-- ------------------------------------------------------------
-- 11) 渠道新增计划(定义见 migration_v1.0.18,补 cost 列)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `channel_plans` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`channel_type` VARCHAR(50) NOT NULL COMMENT '渠道类别(= source_channel 枚举)',
`source_detail` VARCHAR(255) DEFAULT NULL COMMENT '来源详情',
`occurrence_address` VARCHAR(255) DEFAULT NULL COMMENT '发生/举办地址',
`industry` VARCHAR(100) DEFAULT NULL COMMENT '所属行业',
`cost` DECIMAL(12,2) DEFAULT NULL COMMENT '计划成本/投入',
`start_date` DATE DEFAULT NULL COMMENT '时间窗口开始',
`end_date` DATE DEFAULT NULL COMMENT '时间窗口结束',
`remark` VARCHAR(255) DEFAULT NULL COMMENT '备注说明',
`status` ENUM('待启动','已执行','错过') NOT NULL DEFAULT '待启动' COMMENT '状态反馈',
`is_active` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '启用状态',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_channel_type` (`channel_type`),
KEY `idx_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='渠道新增计划表';
-- ------------------------------------------------------------
-- 12) 系统:用户 / 角色 / 日志 / 登录尝试 / 迁移版本
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `system_users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL COMMENT '登录账号',
`password` VARCHAR(190) NOT NULL COMMENT '密码(bcrypt)',
`real_name` VARCHAR(100) DEFAULT NULL COMMENT '真实姓名',
`role_id` INT UNSIGNED DEFAULT NULL COMMENT '角色',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`last_login_time` DATETIME DEFAULT NULL COMMENT '最后登录时间',
`last_login_ip` VARCHAR(45) DEFAULT NULL COMMENT '最后登录IP',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_username` (`username`),
KEY `idx_role` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表';
CREATE TABLE IF NOT EXISTS `system_roles` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`role_name` VARCHAR(50) NOT NULL COMMENT '角色名',
`permissions` TEXT DEFAULT NULL COMMENT '权限集(JSON 数组)',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用 0/1',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统角色表';
CREATE TABLE IF NOT EXISTS `system_logs` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT UNSIGNED DEFAULT NULL COMMENT '操作用户ID',
`username` VARCHAR(50) DEFAULT NULL COMMENT '操作账号',
`action` VARCHAR(50) DEFAULT NULL COMMENT '操作动作',
`module` VARCHAR(50) DEFAULT NULL COMMENT '操作模块',
`target_table` VARCHAR(50) DEFAULT NULL COMMENT '目标表',
`target_id` INT UNSIGNED DEFAULT NULL COMMENT '目标ID',
`content` TEXT DEFAULT NULL COMMENT '操作内容(JSON)',
`ip` VARCHAR(45) DEFAULT NULL COMMENT '来源IP',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_user` (`user_id`),
KEY `idx_module` (`module`),
KEY `idx_created` (`created_at`),
KEY `idx_target` (`target_table`, `target_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统操作日志表';
CREATE TABLE IF NOT EXISTS `system_login_attempts` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL DEFAULT '',
`ip` VARCHAR(45) NOT NULL DEFAULT '',
`success` TINYINT NOT NULL DEFAULT 0,
`attempt_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_ip_user_time` (`ip`, `username`, `attempt_time`),
KEY `idx_attempt_time` (`attempt_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='登录尝试记录(限流/防爆破)';
CREATE TABLE IF NOT EXISTS `schema_versions` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`version` VARCHAR(64) NOT NULL,
`applied_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`checksum` CHAR(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_version` (`version`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据库迁移版本表';
-- ------------------------------------------------------------
-- 13) 文档链接(competitor_data / 归档)
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS `document_links` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`company_id` INT UNSIGNED DEFAULT NULL COMMENT '关联企业',
`doc_name` VARCHAR(255) DEFAULT NULL COMMENT '文档名称',
`url` VARCHAR(500) DEFAULT NULL COMMENT '链接',
`file_type` VARCHAR(30) DEFAULT NULL COMMENT '类型',
`source` VARCHAR(100) DEFAULT NULL COMMENT '来源',
`publish_date` DATE DEFAULT NULL COMMENT '发布日期',
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '有效 0/1',
PRIMARY KEY (`id`),
KEY `idx_company` (`company_id`),
KEY `idx_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文档链接表';
SET FOREIGN_KEY_CHECKS = 1;