-- ---------------------------- -- 城市公司档案模块:城市主数据 + 城市公司档案 -- -- 目标库 hugray-account(库名含连字符,任何引用都必须用反引号)。 -- 两张表都是新建,故用 CREATE TABLE IF NOT EXISTS,脚本可重复执行。 -- 演示数据另见 hugray_city_company_demo_20261012.sql。 -- -- 【与 account_user.city 的关系——改城市数据前必读】 -- 会员表的 city 存的是城市名称文本,本次只把「城市筛选下拉的数据源」换成 account_city, -- 会员表不动、存量数据不迁移。因此 account_city.city_name 必须与 account_user.city 的存量文本 -- 逐字对齐(存「杭州」而不是「杭州市」),否则会员列表按城市筛选会筛不出人。 -- 城市名按「全国唯一」处理:会员表只存市名,同名的两个城市会让筛选口径产生歧义。 -- -- 【枚举取值】沿用本库约定,直接存值、不建 sys_dict_type,前端维护同名常量: -- 状态 status :0正常 1禁用 -- 删除标志 del_flag :0存在 2删除 -- ---------------------------- USE `hugray-account`; -- ---------- 1. account_city:城市主数据 ---------- -- province 只作展示与录入(新增时省市二级联动选择),筛选与业务关联一律走 city_name。 -- 不加 UNIQUE(city_name):逻辑删除的残留行会永久占用唯一键,「同名至多一条」只能应用层保证 -- (与 account_certification、account_user.username 同一个坑)。 CREATE TABLE IF NOT EXISTS `account_city` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '城市编号', `province` varchar(32) NOT NULL DEFAULT '' COMMENT '所属省份(二级联动选择所得,存全称,如「广东省」)', `city_name` varchar(32) NOT NULL COMMENT '城市名称(与 account_user.city 的存量文本逐字对齐)', `sort_no` int(11) DEFAULT 0 COMMENT '排序(升序,越小越靠前)', `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1禁用)', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_account_city_name` (`city_name`), KEY `idx_account_city_status` (`status`) ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COMMENT='城市主数据表(会员列表城市筛选与城市公司档案共用)'; -- ---------- 2. account_city_company:城市公司档案 ---------- -- 一个城市至多一条档案(1:1)。同城市重复建档由服务层拦,不加 UNIQUE(city_id): -- 同上,逻辑删除的残留行会占死唯一键。 -- 档案编号是自增 id,起始 33140000 对齐原型里的 8 位编号观感(业务上无特殊含义)。 -- user_id 指向被绑定的会员(限 L4,见服务层校验);联系人/手机号是档案自己的字段, -- 不冗余到 account_certification——同一家公司换联系人时不该动会员的认证资料。 CREATE TABLE IF NOT EXISTS `account_city_company` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '档案编号', `city_id` bigint(20) NOT NULL COMMENT '所属城市(account_city.id)', `company_name` varchar(128) NOT NULL COMMENT '公司名称', `user_id` bigint(20) NOT NULL COMMENT '关联用户账号(account_user.user_id,限 L4 会员)', `contact_name` varchar(64) NOT NULL COMMENT '联系人', `contact_phone` varchar(20) NOT NULL COMMENT '联系电话', `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1禁用)', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`), KEY `idx_city_company_city` (`city_id`), KEY `idx_city_company_user` (`user_id`), KEY `idx_city_company_status` (`status`) ) ENGINE=InnoDB AUTO_INCREMENT=33140000 DEFAULT CHARSET=utf8mb4 COMMENT='城市公司档案表(一个城市一条)'; -- ---------- 3. 结果核对 ---------- SELECT `table_name`, `table_comment` FROM `information_schema`.`tables` WHERE `table_schema` = 'hugray-account' AND `table_name` IN ('account_city', 'account_city_company'); SELECT `table_name`, `column_name`, `column_type`, `column_comment` FROM `information_schema`.`columns` WHERE `table_schema` = 'hugray-account' AND `table_name` IN ('account_city', 'account_city_company') ORDER BY `table_name`, `ordinal_position`;