前言
数据库设计就是建立数据库中的表结构以及表与表之间的关联关系的过程。
简而言之,就是有哪些表、表里有哪些字段以及表和表之间有什么关系。其中,表关系有:一对一、一对多和多对多。
1.一对一
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能。
实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)。
示例:
create table user_desc (
id int primary key auto_increment,
city varchar(20),
edu varchar(10),
income int,
status char(2),
des varchar(100)
);
create table 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 user_desc(id)
);
2.一对多
一对多 如:部门 和 员工
一个部门对应多个员工,一个员工对应一个部门。
实现方式:在多的一方建立外键,指向一的一方的主键
示例:
-- 删除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部门表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 员工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外键 dep_id,关联 dept 表的id主键
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);
3.多对多
多对多 如:商品 和 订单
一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
示例:
-- 删除表
DROP TABLE IF EXISTS order_goods;
DROP TABLE IF EXISTS order;
DROP TABLE IF EXISTS goods;
-- 订单表
CREATE TABLE order(
id int primary key auto_increment,
payment double(10,2),
payment_type TINYINT,
status TINYINT
);
-- 商品表
CREATE TABLE goods(
id int primary key auto_increment,
title varchar(100),
price double(10,2)
);
-- 订单商品中间表
CREATE TABLE order_goods(
id int primary key auto_increment,
order_id int,
goods_id int,
count int
);
-- 建完表后,添加外键
alter table order_goods add CONSTRAINT fk_order_id FOREIGN key(order_id) REFERENCES
order(id);
alter table order_goods add CONSTRAINT fk_goods_id FOREIGN key(goods_id) REFERENCES
goods(id);
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94427.html