数据库 约束(Constraint)、多表关系和范式
文章目录
- 约束 Constraint
- 分类
- 多表关系
- 范式
- 第一范式1NF、
- 第二范式2NF
- 第三范式3NF
- BCNF
约束 Constraint
概念: 对表中数据进行限制,保证数据正确性、有效性、完整性。
分类
- 主键:primary key
配合INT
类型主键 可以加auto_increment
插入数据输入null
也可自动增长 - 非空:not null
- 唯一:unique (唯一约束限定可以有多个NULL)
- 外键:foreign key (外键名 和外键列名是两个东西)
# 创建时添加
create table 表名(...外键列,consstraint 外键名称 foreign key (外键列名) references 关联表名(主表列名));
#删除外键
alter table 表名 drop foreign key 外键名;
#通过alter增加外键(增加外键之前先增加外键列,不能一起写)
alter table 表名 add constraint 外键名称 foreign key (外键列名) references 关联表名(主表列名);
#建立级联 添加ON UPDATE CASCADE
alter table 表名 add constraint 外键名称 foreign key (外键列名) references 关联表名(主表列名) ON UPDATE CASCADE;
# 删除级联 ON DELETE CASCADE
CREATE TABLE student(name VARCHAR(20) NOT NULL,phone_number VARCHAR(20) UNIQUE,id VARCHAR(20) primary key,age intcity VARCHAR(20), #外键constraint city_name foreign key (city) references city(name))
多表关系
- 一对一 (身份证和人)
可以在任意一方增加外键,指向对方主键,并且将外键唯一。或者主键相同 - 一对多 (员工和部门)
多个员工同一个部门n:1
关系, 在n
侧建立外键指向1
侧的主键 - 多对多 (学生和课程)
学生可选多个课程,课程可以有多个学生m:n
关系,增加中间表,至少要包含两个键,例如:stu_id
和class_id
,两个键形成联合主键。通过中间表,表示多对多关系。
范式
第一范式1NF、
每一列都是不可分割的原子数据项。
第二范式2NF
1NF的基础上,非码属性必须完全依赖于候选码,即消除非码属性对主码的部分函数依赖
函数依赖:通过A->B,A属性或属性组可以唯一确定B的值,则B依赖A。
完全函数依赖:A是属性组,B需要通过A中的所有属性决定,则B完全函数依赖A。
部分函数依赖:A是属性组,但是A中的一个属性就可以确定B,则B部分函数依赖于A。
传递函数依赖:A->B,B->C ,则C传递函数依赖于A。
码 :一个属性或属性组被去他所有属性完全依赖,则称它为该表的码。
候选码: 如果关系中的某一属性组能唯一的标识一个元组,则成该属性组为候选码
主码: 如果一个关系有多个候选码,则选其中一个为主码
主属性: 候选码的所有属性称为主属性
非主属性: 不包含在任何候选码中的属性是非主属性
第三范式3NF
在2NF基础上,任何非主属性不依赖于其他非主属性,消除传递依赖。
例如:
系主任依赖于系名,系名又依赖于学号,产生传递依赖系主任->系名->学号
。拆分后满足第三范式。
BCNF
- 所有非主属性,对每一个候选码都是完全函数依赖。
- 主属性对不包含它的码,也是完全函数依赖,我理解为主属性之间互相完全函数依赖。
- 没有属性完全依赖于非码的任何一组属性,非主属性之间不能有依赖。
例如学号
,学生名
,宿舍
,年龄
:(假设学生名唯一)
- 宿舍,年龄都完全依赖于 学号和学生名
- 学号和学生名之间完全函数依赖
- 没有属性依赖于宿舍和年龄
数据库 约束(Constraint)、多表关系和范式相关推荐
- 03_Mysql_约束与多表关系
课程笔记Day27 约束 多表关系 第一章 约束 第01节 基础理论 1.约束概述 什么是约束呢?约束有什么作用呢? 生活当中的约束:法律的约束.道德的约束前面学习过的约束:XML当中 DTD约束.S ...
- MYSQL数据库字段关联_MySQL数据库 字段操作 多表关系(更新中...)
外键 (foreign key) ## 外键 ```mysql # 作者(author):id,name,sex,age,mobile, detail_id # 作者详情(author_detail) ...
- Day04_多表关系、范式
文章目录 一.多表之间的关系 1.多表之间的关系 2.一对多案例 3.多对多案例 二.范式 一.多表之间的关系 1.多表之间的关系 1. 多表之间的关系1. 分类:1. 一对一:* 如:人和身份证2. ...
- MySQL基础教程 包含SQL语句、约束、表关系、设计范式、多表、事务等
简介 数据库 数据库(Database):是按照数据结构来组织.存储和管理数据的仓库.每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据存 ...
- MYSQL学习笔记06:列属性[NULL,default,comment],主键,自增长,唯一键,数据库设计规范[范式(1NF,2NF,3NF),逆规范化],表关系[1V1,1VN,NVN]
列属性 列属性又称为字段属性. 在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自增长. NULL属性 NULL属性代表字段为空. 如果对应的值为yes表示该字段允许为null, ...
- 多表关系、数据库设计的范式、数据库的备份和还原、多表查询、事务、DCL(了解)
文章目录 多表关系 数据库设计的范式 数据库的备份和还原 多表查询 多表查询的分类:内连接查询 隐式内连接:使用where条件消除无用数据 显式内连接 多表查询的分类:外连接查询 左外连接 右外连接 ...
- 数据库MySQL基础---约束、表关系、聚合函数、连接查询、分组查询和子查询
约束 1.主键约束亦成为主码,关键字:primary key,设置了主键约束的列的数据要求:不能为空,不允许重复. 2.自增长策略针对主键,不需要手动给值,自动的值是当前表中该列最大值+1关键字:au ...
- oracle表违反主键约束,主键/约束/事务/表关系 Oracle
1:创建一个主键 --创建一个表,有主键 create table studs( id varchar(32) primary key, name varchar(30) ); --主键也是数据库的对 ...
- 【数据库1】mysql,DDL/DML,DQL,外键约束,多表/子查询,事务,登陆,连接池,jdbc,redis,crontab,ftp,oracle,数据交换/存储/收集
文章目录 1.mysql安装:存储:集合(内存:临时),IO流(硬盘:持久化) 1.1 服务端:双击mysql-installer-community-5.6.22.0.msi 1.2 客户端:命令行 ...
最新文章
- Java学习总结:4
- 消除warning方法
- 分布式缓存——缓存与数据库数据一致性
- 为什么程序员总是打扮成这样一幅鬼样子
- 作者:劳保强(1989-),男,中国科学院上海天文台助理工程师
- C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
- 使用csc手动编译cs文件
- 零基础转行自学前端,怎么学习更系统?
- BZOJ3668:[NOI2014]起床困难综合症(贪心)
- 手机发包工具_【发包工具】http多线程发包工具
- 软件设计工程——数据库设计
- 本地音乐上传到网易音乐云盘上
- AMI,HDB3编码译码
- 网络断网远程计算机会自动修复么,网络断网不怕,教你自己动手修复
- 计算机网络对等网实验报告,计算机网络实验报告_双机互联
- 金融工程 | 远期与期货的运用
- 分布式系统高可用实战之限流器(Go 版本实现)
- 【CSS】用CSS画太极图
- 连载:面向对象葵花宝典:思想、技巧与实践(10) - “抽象” 详解
- php怎么建留言本,php实现留言板功能的详细代码