数据库设计师Skill database-designer

数据库设计师技能是一个专注于数据库模式设计与优化的AI工具。它能够根据用户需求,自动生成高效、规范且可扩展的数据库模式,支持PostgreSQL、MySQL、SQLite和MongoDB等多种主流数据库。核心功能包括实体关系建模、数据库规范化、索引策略优化以及生成数据库迁移脚本。适用于需要快速设计数据库结构、优化查询性能或管理数据库版本变更的软件开发人员、架构师和DevOps工程师。关键词:数据库设计,SQL优化,ER建模,索引优化,迁移脚本,PostgreSQL,MySQL,数据库架构。

后端开发 0 次安装 2 次浏览 更新于 2/28/2026

name: database-designer description: 设计和优化数据库模式,支持PostgreSQL、MySQL、SQLite和MongoDB。包括ER建模、规范化、索引优化和迁移脚本生成。 metadata: short-description: 设计数据库模式和迁移脚本

数据库设计师技能

描述

通过实体关系建模、规范化和迁移脚本,设计和优化数据库模式。

触发条件

  • /db-design 命令
  • 用户请求数据库模式设计
  • 用户需要迁移脚本

提示

你是一名数据库架构师,负责设计高效、可扩展的数据库模式。

PostgreSQL 模式示例

-- 用户表
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    name VARCHAR(100) NOT NULL,
    avatar_url TEXT,
    email_verified BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 为邮箱查询创建索引
CREATE INDEX idx_users_email ON users(email);

-- 带外键的帖子表
CREATE TABLE posts (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    title VARCHAR(255) NOT NULL,
    content TEXT,
    status VARCHAR(20) DEFAULT 'draft' CHECK (status IN ('draft', 'published', 'archived')),
    published_at TIMESTAMPTZ,
    created_at TIMESTAMPTZ DEFAULT NOW(),
    updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- 用户帖子的复合索引
CREATE INDEX idx_posts_user_status ON posts(user_id, status);

-- 全文搜索索引
CREATE INDEX idx_posts_search ON posts USING GIN(to_tsvector('english', title || ' ' || content));

-- updated_at 触发器
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER users_updated_at
    BEFORE UPDATE ON users
    FOR EACH ROW EXECUTE FUNCTION update_updated_at();

Entity Framework Core 迁移示例

public class CreateUsersTable : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Users",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false, defaultValueSql: "gen_random_uuid()"),
                Email = table.Column<string>(maxLength: 255, nullable: false),
                PasswordHash = table.Column<string>(maxLength: 255, nullable: false),
                Name = table.Column<string>(maxLength: 100, nullable: false),
                CreatedAt = table.Column<DateTime>(nullable: false, defaultValueSql: "NOW()")
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_Users", x => x.Id);
            });

        migrationBuilder.CreateIndex(
            name: "IX_Users_Email",
            table: "Users",
            column: "Email",
            unique: true);
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropTable(name: "Users");
    }
}

索引优化指南

-- 良好:在频繁查询的列上创建选择性索引
CREATE INDEX idx_orders_status ON orders(status) WHERE status = 'pending';

-- 良好:为常见查询创建覆盖索引
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC) INCLUDE (total, status);

-- 避免:在低基数列上创建索引
-- CREATE INDEX idx_users_active ON users(is_active); -- 只有2个值!

标签

数据库, sql, 模式, 设计, 优化, 迁移

兼容性

  • Codex: ✅
  • Claude Code: ✅