SuperAPI AI 工具集

database-schema-design

编程与开发

查看项目

更新于 10-16 05:39

技能介绍

用途

Database Schema Design 是一套数据库模式设计模式集合,面向 SQL 与 NoSQL 数据库,用于指导开发者设计规范、可扩展的数据库结构。资料以 PostgreSQL 为主要示例,同时包含 Drizzle ORM 的 TypeScript 模式定义方式。

核心原则

资料给出的核心原则包括:先规范化,再为性能反规范化;使用合适的数据类型,选择能容纳数据的最小类型;根据查询模式而非假设来策略性地建立索引;提前规划增长,尽早考虑分区。

命名规范

  • 表名:复数、snake_case,如 users、order_items、user_addresses
  • 列名:snake_case,如 first_name、created_at、is_active
  • 主键:id,如 id SERIAL PRIMARY KEY
  • 外键:单数表名_id,如 user_id REFERENCES users(id)
  • 索引:idx_表_列,如 CREATE INDEX idx_users_email ON users(email);
  • 约束:chk_/uq_/fk_ 前缀,如 CONSTRAINT uq_users_email UNIQUE (email)、CONSTRAINT chk_orders_amount CHECK (amount > 0)

常见模式

资料提供了多种常见关系模式的 SQL 示例:

  • 用户表:包含 UUID 主键、邮箱唯一约束、密码哈希、角色检查约束、激活状态、邮箱验证时间、创建与更新时间,并建立邮箱索引和基于激活状态的部分角色索引。
  • 一对多关系:以 posts 表为例,通过 user_id 外键关联 users,设置 ON DELETE CASCADE,并建立 user_id 索引和针对已发布状态的部分复合索引。
  • 多对多关系:以 tags 与 post_tags 中间表为例,中间表使用复合主键,并为 tag_id 建立索引。
  • 多态关联:给出两种方案,推荐使用独立表(post_comments、image_comments),备选方案是单表加 commentable_type 与 commentable_id 类型列。

Drizzle ORM 模式

资料展示了使用 drizzle-orm/pg-core 定义 users 与 posts 表的方式,包括 uuid、varchar、text、timestamp、boolean 等列类型,主键默认随机、唯一约束、外键级联删除、索引定义,以及通过 relations 定义一对多关系。

索引策略

资料列出多种索引类型:单列索引、复合索引(列顺序重要)、部分索引(更小更快)、表达式索引(如 LOWER(email))、JSONB 的 GIN 索引。

软删除与审计

软删除方案通过 deleted_at 时间戳标记删除,查询时过滤 deleted_at IS NULL,并可为活跃记录建立部分索引。审计日志方案提供 audit_logs 表结构以及 audit_trigger_func 触发器函数,记录表名、记录 ID、操作类型、旧数据、新数据、用户 ID 和创建时间。

最佳实践

资料列出的最佳实践包括:对外暴露的 ID 始终使用 UUID;所有表添加 created_at 与 updated_at 时间戳;使用外键约束保证引用完整性;根据查询而非假设创建索引;谨慎使用 ENUM 类型,优先使用检查约束;业务需要审计追踪时规划软删除;多表操作使用事务;按时间或类别对大表进行分区。

适用场景与限制

该资料适合后端开发者、数据库设计人员和需要统一数据库规范的团队作为设计参考。资料以 PostgreSQL 示例为主,其他数据库的适配方式暂未提供;NoSQL 的具体设计模式在资料中未展开说明。