数据库设计

简介: 数据库设计

前言

数据库设计就是建立数据库中的表结构以及表与表之间的关联关系的过程。

简而言之,就是有哪些表、表里有哪些字段以及表和表之间有什么关系。其中,表关系有:一对一、一对多和多对多。


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);


目录
打赏
0
0
0
0
2
分享
相关文章
PostgreSQL的备份策略
【8月更文挑战第4天】PostgreSQL的备份策略
303 4
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
在IIS上部署ASP.NET Core Web API和Blazor Wasm详细教程
510 3
基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中
OpenLayers入门-第二篇、在vue3中使用elementplus制作图层控件,图层切换,显示隐藏,图层排序
OpenLayers入门-第二篇、在vue3中使用elementplus制作图层控件,图层切换,显示隐藏,图层排序
589 1
docker保存镜像、打包tar、加载tar镜像
本文记录docker保存镜像、打包tar、加载tar镜像。
2887 0
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问