云行 AI 的数据库表结构设计遵循架构设计的三个原则。在演化原则方面,我采用自顶向下的设计方法,系统地划分各个模块及其关系,确保所有模块之间的关联能够完整反映系统需求。通过这种方式,当基本逻辑关系明确后,未来扩展表或字段也会更加便捷。
在简洁原则方面,我采用渐进式的表和字段设计方法。除了设计必要的关联关系和基本字段外,其他表和字段将在实际项目开发过程中,随着需求的不断细化而逐步完善。
以上是基本的数据库设计的原则。
从模块设计的角度,云行 AI 数据库包含以下主要模块:
- 账户权限模块,核心表包括租户表、用户表
- 应用管理模块
- 模型管理模块
- 知识库模块
- 会话模块
数据库表结构在系统中起着关键作用——不恰当的关联设计或命名可能导致后续开发陷入混乱。因此,我对表和字段的命名、主键和字段类型也都进行了深入的设计思考。以下是一些具体的设计细节:
表名统一使用单数形式,比如租户表命名为 tenant 而非 tenants。采用单数形式是主流的命名方式,更加统一简洁(避免了复数形式中 s、es 结尾及不规则变化带来的复杂性)。
字段命名上,对于实体主键或通用字段名统一加上前缀。例如,用户表主键为 user_id,用户 ID 作为外键时同样使用 user_id。这样在使用用户 ID 时,不需要根据场合区分使用 id 或 user_id,而是统一使用 user_id。对于容易混淆的通用字段,如 name,也采用相同的命名规则。例如用户名称使用 user_name,租户名称使用 tenant_name,应用名称使用 app_name。而对于不会出现混淆的字段,如用户邮箱,则直接使用 email 作为字段名称。
对于状态和枚举类型字段,我们统一使用字符类型,并采用英文而非数字表示。与数字类型的状态枚举值相比,字符类型不仅更直观,而且更易扩展。数字类型状态往往在前期缺乏合适的预留空间,导致后期扩展时容易出现状态混乱,偏离初始设计。
对于一般企业业务系统的项目,我通常习惯使用自增类型主键,但在云行 AI 这个项目中,我选择使用雪花算法来生成 ID。雪花算法是一种分布式唯一 ID 生成算法。与 UUID 相比,雪花算法不仅能确保全局唯一性(保证不同机器生成的 ID 不会重复),还具有时间单调递增的特性,从而提升索引和查询效率。说个题外话,虽然 ID 不需要太注重可读性,但看着一串 UUID 的主键总让我觉得很混乱。
写完以上的一些细节设计,我发现我还是对数据可能产生的混乱最为重视。数据库表结构的设计是一个需要严谨规范且富有前瞻性的过程。作为系统开发的基础,数据结构必须确保其正确性、可扩展性和可维护性——这些正是构建整洁架构的前提条件。
2025年5月6日