Java回顾(九) 数据库多表之间的关系和三大范式

1、多表之间的关系

1.1、分类
1.1.1、一对一的关系(了解)
  • 如 人和身份证的关系
1.1.2、一对多 (多对一) 的关系
  • 比如 部门和职员的关系
    一个部门对应多个职员
    一个职员只能对应一个部门
1.1.3、多对多 的关系
  • 学生和课程关系
    一个学生可以选很多课,一门课也可以被多个学生选择

1.2、实现

1.2.1、一对多 (多对一) 的实现
  • 部门和员工的关系
  • 在多的一方建立外键,去指向 一 的表中的主键
    在这里插入图片描述
1.2.2、多对多 的实现
  • 学生和课程之间的关系
  • 表多对多的实现主要是通过添加一张 第三张 表格来实现的,第三张中间表里面至少要包含2个字段,分别对应之前两张表的主键。
    在这里插入图片描述
1.2.3、一对一 的实现
  • (1)可以通过在两张表中添加唯一外键去指向另一方的主键
  • (2)可以把这两张表的主键都设置成一样的
    在这里插入图片描述

1.3、案例

  • (1)、数据库表分析

在这里插入图片描述

  • (2)、创建数据库

创建数据库 名为 travel

create database if not exists travel;

创建旅游条目分类表

CREATE TABLE travel_items(
	cid int PRIMARY KEY auto_increment,
	name VARCHAR(32) not null UNIQUE
);

创建线路表

CREATE TABLE tab_route(
	rid int PRIMARY KEY auto_increment,
	rname VARCHAR(100) UNIQUE not NULL,
	price DECIMAL(10,2),
	rdate date,
	cid int,
	FOREIGN KEY (cid) REFERENCES tab_category(cid)
);

创建用户表

CREATE TABLE tab_user(
	uid int PRIMARY KEY auto_increment,
	username VARCHAR(100) UNIQUE not null,
	password VARCHAR(30) not NULL,
	name VARCHAR(30), 
	birthday date,
	sex CHAR(1) DEFAULT '男',
	telephone VARCHAR(11),
	email VARCHAR(100)
);

创建 用户-线路 关联表
要使用到联合主键

CREATE table tab_favorite(
	rid int,
	date datetime, -- 收藏时间
	uid int,
	PRIMARY KEY(rid,uid), -- 联合主键
	FOREIGN KEY(rid) REFERENCES tab_route(rid),
	FOREIGN KEY(uid) REFERENCES tab_user(uid)
);

2、数据库的范式

2.1、分类
  • 第一范式(1NF)
  • 第二范式(2NF):(在1NF基础上)
  • 第三范式(3NF):(在2NF基础上)
2.2、第一范式
  • 每一列都是不可分割的原子数据项

在这里插入图片描述

2.3 第二范式
  • 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF的基础上消除非主属性对主码的部分函数依赖)

  • 几个概念:
    (1)、函数依赖:A–>B,如果通过A属性(属性组)的值,可以确定唯一B属性的值,则称B依赖于A
    例如: 学号 --> 姓名。 (学号,课程名称)–>分数

    (2)、完全函数依赖:A–>B,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性值。
    例如:(学号、课程名称) --> 分数

    (3)、部分函数依赖:A --> B,如果A是一个属性组,则B属性中的确定需要依赖于A属性组中的某一些即可
    例如:(学号、课程名称)–> 姓名

    (4)、传递函数依赖:A–>B ,B–>C,如果通过A属性(属性组的值),可以确定唯一B属性的值,再通过B属性(属性组的值),可以确定唯一C属性的值,则称C传递函数依赖于A
    例如:学号 -->系名 系名 -->系主任

    (5)、码:如果在一张表中,一个属性或者属性组,被其它所有属性所完全依赖,则称这个属性(属性组)为该表的码
    例如:在该表中的码:(学号,课程名称)
    主属性:码属性组中的所有属性
    非主属性:除了码属性组中的属性

在这里插入图片描述

2.4 第三范式

在这里插入图片描述

3、数据库的备份和还原

  • 命令行的形式备份还原
  • 图形图像的形式备份还原
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

隐形的稻草人HWS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值