-- ============================================================ -- SuperLink Web 后台管理系统 - v1.0.16 数据库结构变更脚本 -- 对应需求文档《修改说明》: -- 1) 所有数据表时间字段调整为"年-月-日"(DATETIME -> DATE) -- 2) companies / persons 增加 source_channel、source_detail -- 3) social_accounts 增加 is_defult(1常用 / 0不常用备用) -- 4) 数据字典:certification_types 改名为 date_dict_certificate, -- 新增 date_dict_country / date_dict_area / date_dict_industry / source_channels -- 字典数据见:sql/dict_seed.sql(由官方 Excel 生成,需一并执行) -- 执行方式:先执行本文件,再执行 sql/dict_seed.sql。 -- 提示:原库业务表(companies/persons/social_accounts 等)不在仓库中, -- 时间字段批量转换建议使用 tools/migrate_time_to_date.php 自动处理。 -- ============================================================ SET NAMES utf8mb4; -- ------------------------------------------------------------ -- 1) 时间字段调整(DATETIME -> DATE) -- 以下为各业务表已知时间字段的手工 ALTER 示例(请按实际库结构核对列名): -- companies.created_at / updated_at / established_date -- persons.created_at / updated_at -- social_accounts.created_at -- company_needs.created_at -- company_documents.publish_date / created_at -- company_certifications.issue_date / expiry_date / created_at -- company_relations.established_date / created_at -- person_work_experiences.start_date / end_date / created_at -- company_products.created_at -- media_commercial_attributes.created_at -- channels.created_at / updated_at -- system_users.last_login_time / created_at / updated_at -- system_roles.created_at -- system_logs.created_at -- -- 示例(MySQL 8.0.13+ 支持 DEFAULT (CURRENT_DATE);5.7 请去掉默认值改为 NULL 后由程序写入): -- ALTER TABLE companies MODIFY COLUMN created_at DATE NULL DEFAULT (CURRENT_DATE); -- ALTER TABLE companies MODIFY COLUMN updated_at DATE NULL DEFAULT (CURRENT_DATE); -- 批量转换推荐直接运行:php tools/migrate_time_to_date.php (自动遍历 information_schema) -- ------------------------------------------------------------ -- 2) companies / persons 增加来源字段 -- ------------------------------------------------------------ ALTER TABLE `companies` ADD COLUMN `source_channel` VARCHAR(50) NULL DEFAULT NULL COMMENT '来源渠道(字典:source_channels,如展会/SNS/竞价广告)' AFTER `website`, ADD COLUMN `source_detail` VARCHAR(255) NULL DEFAULT NULL COMMENT '来源详情(如:华南工博会)' AFTER `source_channel`; ALTER TABLE `persons` ADD COLUMN `source_channel` VARCHAR(50) NULL DEFAULT NULL COMMENT '来源渠道(字典:source_channels)' AFTER `work_location`, ADD COLUMN `source_detail` VARCHAR(255) NULL DEFAULT NULL COMMENT '来源详情' AFTER `source_channel`; -- ------------------------------------------------------------ -- 3) social_accounts 增加 is_defult(1常用 / 0不常用、备用) -- ------------------------------------------------------------ ALTER TABLE `social_accounts` ADD COLUMN `is_defult` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否常用:1常用,0不常用/备用' AFTER `is_primary`; -- ------------------------------------------------------------ -- 4) 数据字典 -- ------------------------------------------------------------ -- 4.1 certification_types 改名为 date_dict_certificate(保留原数据,随后用 dict_seed.sql 覆盖为官方枚举) RENAME TABLE `certification_types` TO `date_dict_certificate`; ALTER TABLE `date_dict_certificate` ADD COLUMN `code` VARCHAR(50) NULL DEFAULT NULL COMMENT '证书类型枚举编码' AFTER `id`; -- 4.2 国家地区编码字典 DROP TABLE IF EXISTS `date_dict_country`; CREATE TABLE `date_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='国家地区编码字典'; -- 4.3 行政区划编码字典(省/市/区县三级,parent_code 关联) DROP TABLE IF EXISTS `date_dict_area`; CREATE TABLE `date_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 '上级行政区划编码(省级为NULL)', `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='行政区划编码字典'; -- 4.4 招标行业分类字典(parent_code 预留大类/细分层级) DROP TABLE IF EXISTS `date_dict_industry`; CREATE TABLE `date_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 '上级行业编码(大类为NULL)', `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='招标行业分类字典'; -- 4.5 证书类型枚举字典 ALTER TABLE `date_dict_certificate` MODIFY COLUMN `code` VARCHAR(50) NULL DEFAULT NULL COMMENT '证书类型枚举编码', ADD UNIQUE KEY `uk_code` (`code`); -- 4.6 来源渠道字典(source_channel 枚举,参考 certification_types 结构) DROP TABLE IF EXISTS `source_channels`; CREATE TABLE `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); -- ------------------------------------------------------------ -- 字典数据(date_dict_country / date_dict_area / date_dict_industry / date_dict_certificate) -- 请执行:sql/dict_seed.sql -- ------------------------------------------------------------ -- ============================================================ -- 附:时间字段批量转换工具使用说明 -- 在部署机上执行:php tools/migrate_time_to_date.php -- 该脚本会自动遍历 mysuperlink 库中所有 DATETIME/TIMESTAMP 字段并转换为 DATE, -- 即满足"所有数据表时间字段调整为年-月-日"的需求,无需手工逐个核对。 -- ============================================================