面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
MySQL 8 CMM数据库设计技能. 为CRM(客户关系管理)系统设计生产质量 MySQL 8数据库计划的综合指南. 此技能涵盖每样软件是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
一份面向生产环境的 MySQL 8 CRM(客户关系管理)系统数据库模式设计综合指南。本技能涵盖从核心实体设计到高级模式的全部内容,包括 EAV 自定义字段、多态活动、审计日志以及多租户架构等。
本技能由主指南(即本文档)和若干详细参考文档组成。在生成任何 SQL 语句或做出设计决策前,请务必先阅读对应的参考文档。
按需查阅 references/ 目录下的以下文件:
| 文件 | 适用场景 |
|---|---|
core-entities.md |
设计 CRM 基础表(如 accounts、contacts、leads、opportunities 等) |
relationships-and-normalization.md |
建立外键、关联表,并达成适当的范式要求 |
indexing-and-performance.md |
创建索引、查询优化、分区策略及性能调优 |
custom-fields-and-flexibility.md |
实现 EAV 模式、JSON 列或混合方案以支持用户自定义字段 |
audit-and-soft-deletes.md |
变更追踪、审计日志、软删除模式及合规性日志记录 |
activities-and-timeline.md |
多态活动流、备注、任务、邮件、通话及事件跟踪 |
security-and-multitenancy.md |
行级安全、基于角色的访问控制、租户隔离与数据隐私保护 |
migrations-and-seeding.md |
模式版本控制、迁移脚本编写及真实测试数据生成 |
reference-schemas.md |
可直接作为起点使用的完整示例模式 |
在 MySQL 8 上设计 CRM 数据库时,须始终遵循以下原则:
关系完整性优先。 在数据库层面明确定义 FOREIGN KEY 约束。切勿仅依赖应用层代码来维护参照完整性。
先规范化至第三范式(3NF),再有意识地反规范化。 起点应为第三范式;仅在具备实测性能证据的前提下进行反规范化操作,并须明确记录原因。
统一命名规范。 所有标识符均采用 snake_case;表名使用复数形式(如 contacts、accounts);外键命名遵循 {被引用单数表名}_id 模式(例如 account_id);时间戳字段统一命名为 created_at、updated_at、deleted_at。
每张表均需配备基础审计字段。 至少包含:id(BIGINT UNSIGNED AUTO_INCREMENT)、created_at、updated_at;大多数 CRM 表还应额外包含 created_by 和 updated_by。
优先采用软删除而非硬删除。 CRM 数据具有法律效力、合规要求及历史报表价值;请使用 deleted_at(TIMESTAMP NULL)字段,避免直接执行 DELETE 语句。
主键一律使用 BIGINT UNSIGNED。 INT 类型上限约为 21 亿;CRM 中的 activities 和 audit logs 等表增长迅速;BIGINT UNSIGNED 可提供高达 1840 万亿的容量余量。
全局启用 UTF8MB4。 始终指定 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;客户姓名、备注及通信内容常含国际字符与 emoji。
仅使用 InnoDB 引擎。 所有表均须采用 InnoDB,以获得事务支持、行级锁、外键强制约束及崩溃恢复能力。
时间戳类型选用 DATETIME(3) 或 TIMESTAMP。 对于 CRM 场景中的事件时间(如通话时间、任务截止时间),推荐使用 DATETIME(3)(与时区无关,精度达毫秒);对于 created_at/updated_at,则推荐使用 TIMESTAMP 并配合 DEFAULT CURRENT_TIMESTAMP 与 ON UPDATE CURRENT_TIMESTAMP。
面向集成而设计。 CRM 系统需对接邮件、营销、计费及客服等工具;对需与第三方系统同步的实体,应添加 external_id 或 external_source 字段。
所有 CRM 表均应遵循以下基础结构:
CREATE TABLE `table_name` (
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
-- 此处填写实体专属字段 --
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`deleted_at` TIMESTAMP NULL DEFAULT NULL,
`created_by` BIGINT UNSIGNED NULL DEFAULT NULL,
`updated_by` BIGINT UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_table_name_deleted_at` (`deleted_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
当用户提出设计 CRM 数据库需求时,请严格按以下顺序执行:
明确范围。 确认所需 CRM 模块:联系人/客户账户、销售漏斗、营销/活动、客服/工单,或以上全部模块。
阅读对应参考文档。 务必首先通读 core-entities.md;再根据已识别模块补充阅读其他相关文档。
先设计实体,后定义关系。 先列出所有表及其字段,再定义外键与关联表。
应用索引策略。 阅读 indexing-and-performance.md,为每个外键、WHERE/JOIN/ORDER BY 中涉及的字段、以及常见查询模式所需的组合索引添加索引。
增加灵活性层。 若用户需要自定义字段功能,请阅读 custom-fields-and-flexibility.md,并从中选择 EAV、JSON 列或混合方案。
添加审计与合规支持。 阅读 audit-and-soft-deletes.md,实施相应粒度的变更追踪机制。
生成迁移脚本。 阅读 migrations-and-seeding.md,输出带版本号、幂等性的迁移 SQL。
审查与验证。 全面检查模式:确认外键是否均已建立索引、NOT NULL 约束是否缺失、默认值是否完备、是否存在孤儿记录风险、是否存在导致全表扫描的查询模式。
以下 MySQL 8 特性对 CRM 模式设计尤为关键:
custom-fields-and-flexibility.md。ORDER BY ... DESC 查询性能。| 场景 | 操作 |
|---|---|
| 用户需从零构建完整 CRM 系统 | 阅读 core-entities.md + reference-schemas.md,完成全部模块设计 |
| 用户仅需联系人 + 客户账户模块 | 阅读 core-entities.md,仅设计 contact/account 模块 |
| 用户咨询自定义字段实现方式 | 阅读 custom-fields-and-flexibility.md |
| 用户存在性能顾虑 | 阅读 indexing-and-performance.md |
| 用户需满足 GDPR 等合规性要求 | 阅读 audit-and-soft-deletes.md + security-and-multitenancy.md |
| 用户正在构建多租户 SaaS CRM | 阅读 security-and-multitenancy.md |
| 用户希望追踪全部用户操作行为 | 阅读 activities-and-timeline.md |
| 用户需要迁移脚本 | 阅读 migrations-and-seeding.md |
| 用户希望获得开箱即用的模式 | 阅读 reference-schemas.md |