数据库设计概念
根据业务系统的具体要求,结合我们所学DBMS,为这个系统构建出最优的数据存储模型。
建立数据库的表结构以及表和表之间的关联关系的过程。
有哪些表?表中有哪些数据?表和表有什么关系?
数据库设计步骤
1、需求分析
2、逻辑分析
3、物理分析
4、维护分析
表关系
一对一:用于优化查询性能
一对多:员工和部门
多对多:商品和订单
一对多
-- 部门表
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)
);
-- 添加2个部门
INSERT INTO dept(dep_name,addr) VALUES('研发部','广州'),('销售部','厦门');
-- 添加员工,dep_id表示员工所在的部门
INSERT INTO emp(NAME,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',19,1),
('赵六',21,2),
('孙七',23,2),
('周八',24,2);
-- 删除外键
alter TABLE emp drop FOREIGN KEY fk_emp_dept;
-- 创建完表,添加外键
alter TABLE emp add CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id) ;
多对多
DROP TABLE tb_order;
DROP TABLE tb_goods;
-- 订单表
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 to_order_goods(
id int PRIMARY key auto_increment,
order_id int,
goods_id int,
count INT
);
-- 建完表后,添加外键
ALTER TABLE to_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES tb_order(id);
ALTER TABLE to_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY (goods_id) REFERENCES tb_goods(id);
一对一用于将表中经常使用的字段单独获取放到一张表中,和多表查询类似。不同的是它可以从任何一个表指向对方,并且外键需要设置为UNIQUE(一个人对应一个部门)