Skip to content

数据库命名规范

核心原则

数据库命名必须使用 snake_case(下划线),使用小写字母,确保命名清晰、一致。

允许的做法

表名

  • 使用 复数形式
  • 使用 snake_case 命名
  • 使用 小写字母
sql
-- ✅ 正确
CREATE TABLE users (...);
CREATE TABLE products (...);
CREATE TABLE order_items (...);
CREATE TABLE user_roles (...);

字段名

  • 使用 snake_case 命名
  • 使用 描述性名称
  • 使用 标准后缀
字段类型命名规则示例
主键idid
外键{table}_iduser_id, product_id
时间戳{action}_atcreated_at, updated_at
布尔值is_{condition}is_active, is_deleted
数量{name}_countorder_count
金额{name}_amounttotal_amount
sql
-- ✅ 正确
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    user_name VARCHAR(100),
    email_address VARCHAR(255),
    is_active TINYINT(1),
    created_at BIGINT,
    updated_at BIGINT
);

CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    product_id BIGINT,
    total_amount DECIMAL(10,2),
    created_at BIGINT
);

索引名

  • 使用 idx_ 前缀
  • 使用 字段名组合
sql
-- ✅ 正确
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    email VARCHAR(255),
    status VARCHAR(50),
    created_at BIGINT,

    UNIQUE INDEX idx_email (email),
    INDEX idx_status (status),
    INDEX idx_created_at (created_at),
    INDEX idx_status_created (status, created_at)
);

关联表命名

  • 使用 两个表名组合(字母顺序)
  • 使用 下划线连接
sql
-- ✅ 正确 - user_roles (不是 role_users)
CREATE TABLE user_roles (
    user_id BIGINT,
    role_id BIGINT,
    created_at BIGINT,
    PRIMARY KEY (user_id, role_id),
    INDEX idx_user_id (user_id),
    INDEX idx_role_id (role_id)
);

禁止的做法

  • 禁止 使用驼峰命名(camelCase)
  • 禁止 使用大写字母
  • 禁止 使用保留字
  • 禁止 使用拼音
sql
-- ❌ 错误
CREATE TABLE Users (...);           -- 大写
CREATE TABLE userInfo (...);        -- 驼峰
CREATE TABLE order (...);           -- 保留字
CREATE TABLE yonghu (...);          -- 拼音

特殊场景

枚举字段

sql
-- ✅ 正确
CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    status VARCHAR(50) DEFAULT 'pending',
    CHECK (status IN ('pending', 'paid', 'completed', 'cancelled'))
);

JSON 字段

sql
-- ✅ 正确
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    settings_json JSON,
    metadata JSON
);

软删除字段

sql
-- ✅ 正确
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    name VARCHAR(100),
    deleted_at BIGINT DEFAULT NULL,
    INDEX idx_deleted_at (deleted_at)
);

相关文档