# database-experiment **Repository Path**: xiaofeng779877/database-experiment ## Basic Information - **Project Name**: database-experiment - **Description**: 关注91邬先生,每天更新更多精彩内容 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-10 - **Last Updated**: 2026-01-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 淘宝本地关系数据库逆向设计项目 (PostgreSQL) ## 📋 项目概述 本项目使用 **PostgreSQL** 数据库实现淘宝核心业务逻辑的逆向设计,包含 **18张关联表**,覆盖用户、商品、商家、订单、支付、物流、评价、促销等核心模块。 ## 🎯 核心目标 - ✅ 设计不少于15张关联表的关系数据库(实际18张) - ✅ 体现外键关联、约束、索引、触发器等数据库对象 - ✅ 满足第三范式规范 - ✅ 分析性能优化方案 - ✅ 完成完整的数据库实践项目 ## 🗂️ 项目结构 ``` database experiment/ ├── README.md # 项目主文档(本文件) ├── postgresql/ # PostgreSQL SQL脚本 │ ├── README_PostgreSQL.md # PostgreSQL快速指南 │ ├── 01_create_database.sql # 创建数据库 │ └── 02_create_tables.sql # 创建18张表 ├── docs/ # 项目文档 │ ├── PostgreSQL配置指南.md # 安装配置详细教程 │ └── 实施步骤详解.md # 5天完整实施计划 └── 题目7:逆向设计淘宝本地关系数据库 分工表.pdf ``` ## 🚀 快速开始(3步完成) ### Step 1:安装 PostgreSQL 1. 下载 PostgreSQL 安装器 - 官网:https://www.postgresql.org/download/windows/ - 选择 PostgreSQL 15 或 16 2. 安装组件 - PostgreSQL Server - pgAdmin 4(图形化管理工具) - Command Line Tools 3. 设置超级用户密码 - 用户名:postgres - 密码:务必记住! **详细安装步骤请查看:** [`docs/PostgreSQL配置指南.md`](docs/PostgreSQL配置指南.md) ### Step 2:执行 SQL 脚本 **方式1:使用 pgAdmin 4(推荐)** ``` 1. 启动 pgAdmin 4 2. 连接到 PostgreSQL 服务器 3. 工具栏 → Tools → Query Tool 4. 执行脚本: 步骤1:Open File → postgresql/01_create_database.sql → 执行 ▶ 步骤2:切换到 taobao_db 数据库 步骤3:Open File → postgresql/02_create_tables.sql → 执行 ▶ 5. 左侧刷新 → Schemas → public → Tables 应该看到18张表 ✅ ``` **方式2:使用命令行 (psql)** ```bash # 打开 SQL Shell (psql) # 开始菜单 → PostgreSQL 15 → SQL Shell # 执行脚本 \i 'd:/database experiment/postgresql/01_create_database.sql' \c taobao_db \i 'd:/database experiment/postgresql/02_create_tables.sql' ``` ### Step 3:验证安装 ```sql -- 在 Query Tool 中执行以下命令 -- 1. 查看所有表(应该显示18张) SELECT tablename FROM pg_tables WHERE schemaname = 'public' ORDER BY tablename; -- 2. 查看表结构 \d users \d products \d orders -- 3. 查看表数量 SELECT count(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'; -- 结果应该是 18 -- 4. 查看所有触发器 SELECT trigger_name, event_object_table FROM information_schema.triggers WHERE trigger_schema = 'public'; ``` --- ## 📊 数据库设计 ### 18张表 - 9大模块 #### 1. 用户模块(3张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | users | 用户基本信息 | user_id, username, phone, email | | user_addresses | 用户收货地址 | address_id, user_id, receiver_name, province, city | | user_favorites | 用户收藏 | favorite_id, user_id, product_id | #### 2. 商家模块(2张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | merchants | 商家信息 | merchant_id, merchant_name, business_license | | merchant_categories | 商家经营类目 | id, merchant_id, category_id | #### 3. 商品模块(3张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | categories | 商品分类 | category_id, category_name, parent_id, category_level | | products | 商品信息 | product_id, merchant_id, category_id, product_name, base_price | | product_skus | 商品SKU | sku_id, product_id, sku_code, sku_price, sku_stock | #### 4. 购物车模块(1张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | shopping_carts | 购物车 | cart_id, user_id, sku_id, quantity | #### 5. 订单模块(2张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | orders | 订单主表 | order_no, user_id, merchant_id, order_amount, order_status | | order_items | 订单明细 | item_id, order_no, sku_id, quantity, unit_price | #### 6. 支付模块(1张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | payments | 支付记录 | payment_id, order_no, payment_method, payment_amount | #### 7. 物流模块(1张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | logistics | 物流信息 | logistics_id, order_no, tracking_no, logistics_status | #### 8. 评价模块(1张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | reviews | 用户评价 | review_id, order_no, product_id, user_id, rating | #### 9. 促销模块(4张表) | 表名 | 说明 | 主要字段 | |------|------|----------| | promotions | 促销活动 | promotion_id, merchant_id, promotion_name, promotion_type | | promotion_products | 促销商品 | id, promotion_id, product_id, discount_rate | | coupons | 优惠券 | coupon_id, merchant_id, coupon_name, discount_amount | | user_coupons | 用户优惠券 | id, user_id, coupon_id, coupon_status | --- ## 🔥 PostgreSQL 核心特性 ### 1. BIGSERIAL 自增主键 ```sql CREATE TABLE users ( user_id BIGSERIAL PRIMARY KEY, -- 自动生成序列 username VARCHAR(50) NOT NULL ); ``` ### 2. CHECK 约束 ```sql CREATE TABLE users ( gender SMALLINT CHECK (gender IN (0, 1, 2)), user_status SMALLINT CHECK (user_status IN (1, 2, 3)) ); ``` ### 3. 详细注释 ```sql COMMENT ON TABLE users IS '用户表'; COMMENT ON COLUMN users.user_id IS '用户ID'; ``` ### 4. 自动更新时间戳 ```sql -- 创建触发器函数 CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ LANGUAGE plpgsql; -- 为表创建触发器 CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); ``` --- ## 📐 规范化设计(第三范式) ### 第一范式(1NF)- ✅ 已满足 - 所有字段都是原子性的,不可再分 - 例:地址分为 province, city, district, detail_address ### 第二范式(2NF)- ✅ 已满足 - 消除部分函数依赖 - 例:订单明细表独立,避免订单表出现商品信息冗余 ### 第三范式(3NF)- ✅ 已满足 - 消除传递依赖 - 例:评价表通过 user_id 关联用户,不存储 username --- ## 🎨 pgAdmin 4 使用指南 ### 查看 ER 图 ``` 1. 右键数据库 taobao_db 2. 选择 "ERD For Database" 3. 自动生成 ER 图 4. File → Save → 保存为PNG ``` ### 查看表信息 ```sql -- 查看表大小 SELECT tablename, pg_size_pretty(pg_total_relation_size('public.'||tablename)) AS size FROM pg_tables WHERE schemaname = 'public' ORDER BY pg_total_relation_size('public.'||tablename) DESC; -- 查看所有索引 SELECT tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'public'; ``` ### 备份数据库 ``` 右键 taobao_db → Backup → 选择格式 → 保存 ``` --- ## 📝 实施计划(5天) 根据 [`docs/实施步骤详解.md`](docs/实施步骤详解.md),完整实施计划: ### Day 1:环境搭建 + 需求分析 - 安装 PostgreSQL 和 pgAdmin 4 - 分析淘宝业务流程 - 确定模块划分 ### Day 2:表结构设计 + SQL编写 ✅ - 设计18张表的详细字段 - 编写建表SQL脚本 - 验证第三范式 ### Day 3:ER图 + 数据库对象 - 使用 pgAdmin 绘制 ER 图 - 创建索引 - 编写触发器和函数 ### Day 4:代码执行 + 功能测试 - 执行所有SQL脚本 - 插入测试数据 - 功能测试和性能测试 ### Day 5:报告撰写 + 答辩准备 - 撰写项目报告 - 制作答辩 PPT - 准备演示 Demo --- ## 🔧 下一步工作 ### 需要完成的任务 - [ ] **创建索引** (`03_create_indexes.sql`) - 为高频查询字段创建索引 - 为外键字段创建索引 - 优化查询性能 - [ ] **创建业务触发器** (`04_create_triggers.sql`) - 订单支付扣减库存触发器 - 评价更新评分触发器 - 订单完成增加销量触发器 - [ ] **创建存储过程/函数** (`05_create_functions.sql`) - 用户订单统计函数 - 商家销售报表函数 - 库存预警查询函数 - 促销活动效果分析 - [ ] **插入测试数据** (`06_insert_test_data.sql`) - 每张表至少10条测试数据 - 确保数据关联正确 - 覆盖各种业务场景 - [ ] **绘制 ER 图** - 使用 pgAdmin 4 生成 - 导出为PNG格式 - 添加到项目文档 - [ ] **撰写项目报告** - 需求分析 - 数据库设计 - 性能优化 - 测试结果 --- ## 📚 文档导航 | 文档 | 说明 | 路径 | |------|------|------| | PostgreSQL配置指南 | 详细的安装配置教程 | [`docs/PostgreSQL配置指南.md`](docs/PostgreSQL配置指南.md) | | PostgreSQL快速指南 | 快速开始和常用命令 | [`postgresql/README_PostgreSQL.md`](postgresql/README_PostgreSQL.md) | | 实施步骤详解 | 5天完整实施计划 | [`docs/实施步骤详解.md`](docs/实施步骤详解.md) | | 建库脚本 | 创建数据库 | [`postgresql/01_create_database.sql`](postgresql/01_create_database.sql) | | 建表脚本 | 创建18张表 | [`postgresql/02_create_tables.sql`](postgresql/02_create_tables.sql) | --- ## 📞 获取帮助 ### 遇到问题? 1. **配置问题** → 查看 [`PostgreSQL配置指南.md`](docs/PostgreSQL配置指南.md) 2. **使用问题** → 查看 [`README_PostgreSQL.md`](postgresql/README_PostgreSQL.md) 3. **实施问题** → 查看 [`实施步骤详解.md`](docs/实施步骤详解.md) 4. **语法问题** → 查看 [PostgreSQL官方文档](https://www.postgresql.org/docs/) ### 学习资源 - **PostgreSQL 官方文档**:https://www.postgresql.org/docs/ - **PostgreSQL 中文文档**:http://www.postgres.cn/docs/15/ - **PostgreSQL 教程**:https://www.runoob.com/postgresql/ - **pgAdmin 4 文档**:https://www.pgadmin.org/docs/ --- ## ✅ 项目特色 ✅ **完整的业务逻辑** - 覆盖电商核心流程 ✅ **规范的数据库设计** - 满足第三范式 ✅ **完善的约束和关系** - 外键、CHECK约束保证数据完整性 ✅ **自动时间戳维护** - 使用触发器自动更新 updated_at ✅ **详细的注释** - 每个表和字段都有清晰说明 ✅ **PostgreSQL特性** - 充分利用PostgreSQL强大功能 ✅ **跨平台支持** - Windows/Linux/Mac都可运行 --- ## 🎯 成功标准 ### 必须完成项 - [x] 数据库包含不少于15张表(实际18张) - [x] 所有表满足第三范式 - [x] 有明确的主键、外键关系 - [ ] 创建不少于8个索引 - [ ] 创建不少于4个触发器 - [ ] 创建不少于4个存储过程 - [ ] 有完整的测试数据 - [ ] 提交完整的ER图 - [ ] 提交完整的项目报告 - [ ] 完成答辩演示 ### 加分项 - [ ] 使用视图简化复杂查询 - [ ] 使用事务保证数据一致性 - [ ] 提供数据备份和恢复方案 - [ ] 性能测试对比详细 - [ ] 代码注释清晰完整 - [ ] 报告排版美观专业 --- ## 🎊 开始你的数据库实践之旅 **现在你已经准备好了!** 1. ✅ 安装 PostgreSQL 2. ✅ 执行 SQL 脚本创建数据库 3. 📝 添加测试数据 4. 🔍 编写查询测试功能 5. 📊 生成 ER 图 6. 📄 撰写项目报告 7. 🎤 准备答辩演示 **祝项目顺利完成!** 🚀 --- ## 📄 许可证 本项目仅用于教学和学习目的。 --- **最后更新:2026-01-07**