数据库学习(5)------表的约束,表之间的关系,数据库设计

一丶数据库表的约束

1.约束的作用

对表中的数据进⾏限制,保证数据的正确性、有效性和完整性。⼀个表如果添加了约束,不正确
的数据将⽆法插⼊到表中。约束在创建表的时候添加⽐较合适。
2.约束种类

 

3.主键约束(关键字:primary key

(1)作用

 ⽤来唯⼀标识数据库中的每⼀条记录

(2)特点

 非空 not null ;唯一

(3)哪个字段应该作为主键

通常不⽤业务字段作为主键,单独给每张表设计⼀个 id 的字段,把 id 作为主键。主键是给数据库和程序使⽤的,不是给最终的客户使⽤的。

(4)主键的相关操作

--创建主键
-- 在创建表的时候给字段添加主键
字段名 字段类型  promary key
-- 在已有表中添加主键
alter table 表名 add promary key(字段名);

-- 删除主键
-- 删除 student 表的主键
alter table student drop primary key;

(5)主键自增长

主键如果让我们⾃⼰添加很有可能重复,我们通常希望在每次插⼊新记录时,数据库⾃动⽣成主
键字段的值
AUTO_INCREMENT 表示⾃动增⻓(字段类型必须是整数类型)

(6)修改⾃增⻓的默认值起始值

-- 创建表时指定起始值
create table 表名(
 列名 int primary key AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

(7)DELETE TRUNCATE 对⾃增⻓的影响

DELETE :删除所有的记录之后,⾃增⻓没有影响。
TRUNCATE :删除以后,⾃增⻓⼜重新开始。
4.唯一约束表中某⼀列不能出现重复的值
(1)唯一约束格式

 字段名 字段类型 unique

(2)使用方法
create table student (
 name varchar(20) unique
);

5.非空约束某⼀列不能为null

(1)非空约束基本语法格式

create table student (
name varchar(20) not null,
);

(2)设置默认值

create table student (
 name varchar(20) default 'xxxx'
);

问题:如果⼀个字段设置了⾮空与唯⼀约束,该字段与主键的区别?

答:1.主键数在⼀个表中,只能有⼀个。主键可以单列,也可以是多列。

2. ⾃增⻓只能⽤在主键上。
6.外键约束(在从表中与主表主键对应的那⼀列 )
主表:⼀⽅,⽤来约束别⼈的表
从表:多⽅,被别⼈约束的表
(1)创建外键约束        
-- 新建表时增加外键
[constraint] [外键约束名称] foreign key(外键字段名) references 主表名(主键字段名)
--已有表增加外键
alter table 从表 add [constraint] [外键约束名称] foreign key(外键字段名) references 
主表名(主键字段名)

(2)删除外键

alter table 从表 drop foreign key 外键名称;

(3)级联操作(在修改和删除主表的主键时,同时更新或删除副表的外键值

7.约束小结

 

二丶表之间的关系(1对1,1对多,多对多)

1.1对多建表原则:在从表(多⽅)创建⼀个字段,字段作为外键指向主表(⼀⽅)的主键

2.多对多建表原则:需要创建第三张表,中间表中⾄少两个字段,这两个字段分别作为外键指

向各⾃⼀⽅的主键。
3.小结

 

三丶数据库设计

1.范式

建⽴科学的,规范的数据库就需要满⾜⼀些规则来优化数据的设计和存储,这些 规则 就称为 范式
2.依赖

函数依赖: 通过一个属性(组)A, 能确定唯一的B属性的值, 称B函数依赖于A
            例如: 学号 -> 姓名  学号+课程名称 -> 分数
 部分函数依赖: 通过属性组A中的部分属性, 就能确定唯一的B属性的值, 称B部分函数依赖于A
            例如: 学号+课程名称 -> 姓名
 完全函数依赖: 通过属性组A中的每一个属性一起确定唯一的B属性的值, 称B完全函数依赖A
            例如: 学号+课程名称 -> 分数    
传递依赖: 通过属性(组)A确定唯一的B属性的值, 再通过B属性, 确定唯一C属性的值, 称C 传递依赖于A
            例如: 学号 -> 系名 -> 系主任
主码: 也叫主属性, 表中其他所有属性的值, 都能通过一个属性(组)来确定, 这属性(组)就是主码
            例如: 学号+课程名称

3.三大范式

1NF: 在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。
2NF: 在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
3NF: 在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
 

4.小结

范式特点
1NF
原⼦性:表中每列不可再拆分。
2NF
不产⽣局部依赖,⼀张表只描述⼀件事情。
3NF
不产⽣传递依赖,表中每⼀列都直接依赖于主键。⽽不是通过其它列间接依赖于主键。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值