设计数据库表结构(也称数据库建模 / Schema 设计)是软件开发中非常关键的一步。下面我按通用流程 + 实战示例 + 常见原则来讲,基本适用于 MySQL、PostgreSQL、Oracle 等关系型数据库。
先搞清楚:
实体 → 表 属性 → 字段
例如:
| 关系类型 | 说明 | 实现方式 |
|---|---|---|
| 一对一 | 一个用户一个资料 | 外键 + 唯一约束 |
| 一对多 | 一个用户多个订单 | 外键 |
| 多对多 | 一个订单多个商品 | 中间表 |
每个字段要考虑:
常用:
实际项目中常适度反规范化以提升性能
CREATE TABLE user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
email VARCHAR(100),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE product (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0
);
CREATE TABLE `order` (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
total_price DECIMAL(10,2),
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES user(id)
);
CREATE TABLE order_item (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES `order`(id),
FOREIGN KEY (product_id) REFERENCES product(id)
);
user / users)created_at)id(主键)created_atupdated_atstatus TINYINT DEFAULT 0 -- 0未支付 1已支付
字段太多 → 拆表
❌ 用中文表名
❌ 所有信息放一张表
❌ 用字符串存日期
❌ 没有外键约束
❌ 忽视索引设计
你可以告诉我:
我可以直接帮你设计一套完整表结构(含 SQL)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。