设计关系数据库架构(Relational Database Schema Design)是一项系统工程,通常需要从业务需求 → 概念模型 → 逻辑模型 → 物理模型逐步推进。下面我按“方法论 + 实践步骤 + 常见原则”给你一个清晰可落地的指南。
明确:
错误往往不是“不会建表”,而是“需求没搞清楚”。
使用 ER 图(实体-关系图):
示例:
将 ER 模型转换为关系表:
目标是:
| 范式 | 核心要求 |
|---|---|
| 1NF | 字段不可再分 |
| 2NF | 消除部分依赖 |
| 3NF | 消除传递依赖 |
| BCNF | 更严格的 3NF |
实际项目中:通常做到 3NF,必要时反规范化优化性能
考虑:
❌ 反例:
用户表(含订单信息)
✅ 正例:
用户表
订单表
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
示例:用户和角色
users ── user_roles ── roles
CREATE TABLE user_roles (
user_id BIGINT,
role_id BIGINT,
PRIMARY KEY (user_id, role_id)
);
created_at 而非 time1)DATETIME / TIMESTAMPTINYINT 或 ENUMDECIMAL,不要用 FLOATusers(id, name, email)
products(id, name, price)
orders(id, user_id, created_at)
order_items(order_id, product_id, quantity, price)
user_namecategory_name用“空间换时间”
❌ 一张表塞所有字段
❌ 用字符串存 ID
❌ 无外键约束
❌ 忽略索引
❌ 过度设计(几十张表做简单系统)
先理清业务关系,再做规范化,最后为性能适度反规范化。
如果你有具体业务场景(如:博客、商城、权限系统),我可以直接帮你画 ER 图和设计表结构。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。