【MYSQL】表的设计


数据库约束

  • 是关系型数据库的一个重要功能,
  • 主要作用是保证数据的完整性,也可能理解数据的正确性(数据本身是否正确,关联关系是否正确),
  • 人工检查数据完整性的工作量非常的大,在数据表中定义一些约束,那么数据库写入数据的时候,数据库会帮我们做校验工作,
  • 约束一般是指定在列上的,
  • 使用在表的定义时在要约束的列的类型后加上。

not null 约束

表示该列不能存储null值。

如果存入null会报错。

unique (唯一)约束

表示该列中的数据不能重复(null)除外。

插入相同或者已有的值会报错。

default 默认值约束

指定列为空时的默认值。

primary key (主键)约束

相当于是not null 和 unique的结合,

表示该列中的数据既不能重复也不能为空。

如果存入null会报错。插入相同或者已有的值也会报错。

当主键是整型时,我们常常加上auto_increment让主键从当前最大值加1,

但是当插入错误时该值相当于被生成了,下一个从这个开始。

通俗将就是当前主键最大值为7,然后插入时报错了,改回来后插入行主键为9。

一张表中最多只能定义一个主键,定义超了就会报错,

要想多列为主键只能使用复合主键primary key (列名1, 列名2)

使用复合主键,必须列值都相同才算重复,任一列值都不能为null。

foreign key (外键)约束

保证一个表中的数据匹配另一个表中的值的参照完整性。

就是将另一个表中的值作为该表中该列的范围。

被外键约束的列在约束前先定义,

语法是foreign key (列名) references 外表名(外列名)

被外键约束的表还存在就不能删除外表。

check 约束

该约束在5.7版本不能使用,导致兼容性不好,所以一般不用。

使用了该约束后该列只能插入被约束的值。

总结

约束类型说明示例
not null 约束使用not null指定列不能为空name varchar(20) not null,
unique 约束指定列为唯一的、不重复的,null除外name varchar(20) unique,
default 默认值约束指定列为空时的默认值age int default 20,
primary key 主键约束not null 和 unique 的结合id int primary key,
foreign key外键约束关联其他表的主键或唯一键foreign key (字段名) references 主表(列)
check约束保证列中的值符合指定的条件check (gender = ‘男’ or gender =‘女’)

表的设计

一般我们编程流程如下:

OOA面向对象分析 -》OOD面向对象设计 -》OOP面向对象编程

设计表:

  1. 从需求中获得类,类对应到数据库中的实体,实体在数据库中就表现为一张一张的表,类中的属性就对应着表中的字段(列),
  2. 确定类与类之间的关系,
  3. 使用SQL去创建具体的表。

三大范式

设计表的时候我们一般要遵循一些规则,这些规则我们一般称之为三大范式。
范式就是描述数据关系的模型,下面只介绍三大范式。

第一范式

第一范式就是表中的字段不可再拆分。

第一范式是关系型数据库最基本的要求,不满足第一范式的数据库不是关系型数据库。
也就是在定义表时每个字段都可以用一种数据类型来表示,那么这个表就是满足第一范式的。

第二范式

在满足第一范式的基础上,不存在非关键字段对任意候选字段存在部分函数依赖(存在于复合主键的情况下)

非关键字段即非主键字段,候选字段可以理解为主键或者没有主键时的唯一键。

对于由两个或多个关键字段(复合主键)决定一条记录的情况,如果一行数据中有些字段只与关键字段中的一个有关系,那么这种就说他只存在部分函数依赖。

表中没有复合主键的表天然满足第二范式。

第三范式

在第二范式的基础上,不存在非关键字段,对任一候选键的传递依赖。

两个强相关关系存在传递现象,这种传递关系称为传递依赖。比如学生表中拿到学号,可以根据学号拿到学校,根据学校又可以拿到学院等信息。

表的关系

  1. 一对一:
    比如一个人只有一个身份证一样。
  2. 一对多:
    比如一个班级拥有多个学生一样。
  3. 多对多:
    比如一个学生选多个课程,一个课程被多个学生选一样。
评论 227
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值