数据库设计
表与表的关系
一对多
多对多
一个实体一张表,实体之间的联系一张表
-- 订单表
CREATE TABLE tb_order (
id INT PRIMARY KEY auto_increment,
payment DOUBLE (10, 2),
payment_type TINYINT,
STATUS TINYINT
);
-- 商品表
CREATE TABLE tb_goods (
id INT PRIMARY KEY auto_increment,
title VARCHAR (100),
price DOUBLE (10, 2)
);
-- 订单商品中间表
CREATE TABLE tb_order_goods (
id INT PRIMARY KEY auto_increment,
order_id INT,
goods_id INT,
count INT
);
创建了3个表,此时三张表之间还是逻辑的关系没有真正的物理的关系
于是我们在中间表中添加2个外键
-- 建完表后,添加外键
alter table tb_order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES tb_order(id);
alter table tb_order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES tb_goods(id);
实现了订单和货物之间多对多的关系
一对一
以 用户表 举例:
在真正使用过程中发现 id、photo、nickname、age、gender 字段比较常用,此时就可以将这张表查分成两张表。
实现方式
在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
如图,在用户表中加入外键,并设置外键为唯一的unique
CREATE TABLE tb_user_desc (
id INT PRIMARY KEY auto_increment,
city VARCHAR (20),
edu VARCHAR (10),
income INT,
STATUS CHAR (2),
des VARCHAR (100)
);
CREATE TABLE tb_user (
id INT PRIMARY KEY auto_increment,
photo VARCHAR (100),
nickname VARCHAR (50),
age INT,
gender CHAR (1),
desc_id INT UNIQUE,-- 唯一
-- 添加外键
CONSTRAINT fk_user_desc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id)
);