MySQL多表设计是指在一个数据库中设计多个相关的表,以实现数据的规范化存储和管理。多表设计通常遵循数据库规范化理论,通过分解表结构来消除数据冗余,提高数据的一致性和完整性。
假设我们要设计一个简单的电商系统,包含商品、订单和用户三个主要实体。
| 字段名 | 类型 | 描述 | |--------------|--------------|----------| | user_id | INT | 主键 | | username | VARCHAR(50) | 用户名 | | email | VARCHAR(100) | 邮箱 | | password | VARCHAR(50) | 密码 |
| 字段名 | 类型 | 描述 | |--------------|--------------|----------| | product_id | INT | 主键 | | name | VARCHAR(100) | 商品名称 | | price | DECIMAL(10,2)| 价格 | | description | TEXT | 描述 |
| 字段名 | 类型 | 描述 | |--------------|--------------|----------| | order_id | INT | 主键 | | user_id | INT | 外键,关联用户表 | | order_date | DATETIME | 订单日期 | | total_amount | DECIMAL(10,2)| 总金额 |
| 字段名 | 类型 | 描述 | |--------------|--------------|----------| | detail_id | INT | 主键 | | order_id | INT | 外键,关联订单表 | | product_id | INT | 外键,关联商品表 | | quantity | INT | 数量 | | price | DECIMAL(10,2)| 单价 |
-- 创建用户表
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(50) NOT NULL
);
-- 创建商品表
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
description TEXT
);
-- 创建订单表
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
order_date DATETIME NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
-- 创建订单详情表
CREATE TABLE order_details (
detail_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
通过以上设计原则和示例,你可以更好地理解和应用MySQL多表设计。如果有更多具体问题,欢迎继续提问。
云+社区技术沙龙[第17期]
腾讯云数据库TDSQL训练营
云+社区沙龙online [国产数据库]
云+社区沙龙online [国产数据库]
技术创作101训练营
云+社区技术沙龙[第20期]
“中小企业”在线学堂
高校开发者
Techo Day 第三期
领取专属 10元无门槛券
手把手带您无忧上云