数据库——Second article

目录

数据库设计的三大范式

概述

作用

三范式

约束

概述

作用

约束种类

非空约束

唯一性约束

主键约束

外键约束

约束的添加

约束的删除

检查约束

数据库设计的三大范式

概述

    为了建立冗余较小,结构合理的数据库,设计数据库时必须遵循一定的规则,在关系型数据库种这种规则成为范式

作用

    约束作用;数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。

三范式

  • 第一范式(1NF):确保每列保持原子性
  • 第二范式(2NF):确保表中的每列都和主键相关
  • 第三范式(3NF):确保每列都和主键直接相关,而不是简介相关

    三大范式只是设计数据库的基本理念,可以建立冗余较小、结构合理的数据库,如有特殊情况,特殊对待,数据库设计最重要的是看需求和性能,需求>性能>表结构,因此不能一味的追求范式建立数据库

约束

概述

    约束实际上就是表中数据的限制条件

作用

    表在设计的时候加入约束的目的就是为保证表中的记录完整且有效

约束种类

非空约束

  • 用not null约束的字段不能为null值,必须给定具体的数据;空字符串''和0不等于null
  • 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
  • 一个表可以有多列都分别限定了非空
-- 非空约束
CREATE TABLE tb2(
  username VARCHAR(10) NOT NULL, 
  userage INT
)

CREATE TABLE tb3(
  username VARCHAR(10) NOT NULL DEFAULT '无名',
  userage INT
)

唯一性约束

  • unique约束的字段,具有唯一性,不可重复,但可以为null
  • 同一个表可以有多个唯一约束;
  • 唯一约束可以是某一列的值唯一,也可以多个列组合值唯一
  • 在创建唯一约束时,如果不给唯一约束命名,就默认和列名形同
  • MySQL会给唯一约束的列上默认创建一个唯一索引
-- 唯一约束  可以为null(并且可以有多个)【因为null是一个类型】

CREATE TABLE tb4(
  username VARCHAR(10) UNIQUE,   -- 行级约束 唯一约束
  userage INT UNIQUE             -- 每个字段都是各自的唯一约束
);

CREATE TABLE tb5(
  username VARCHAR(10),
  userage INT,
  UNIQUE(username,userage)       -- 表级约束 联合唯一约束
                         -- 字段是有关联的,每个字段的值都相同时,会触发
);

CREATE TABLE tb6(
  username VARCHAR(10),
  userage INT,
  CONSTRAINT name_age_unique UNIQUE(username,userage)    -- 为表级约束起名字 constraint 是约束关键字
);

主键约束

  • primary key是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录;表中的某个字段添加主键约束后,该字段为主键字段,主键字段中出现的每一个数据都称为主键值
  • 主键值是当前行数据的唯一标识、是当前行数据的身份证号;即使表中两行记录相关数据相同,但由于主键值不同,所以也认为是两行不同的记录
  • 在MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动 生成,自增数从1开始,以1递增(auto_increment)
-- 主键约束 每张表必须有且只有一个主键 
-- 主键的值是唯一的 不能为null
CREATE TABLE tb7(
  username VARCHAR(10) PRIMARY KEY,
  userage INT
)

CREATE TABLE tb8(
  username VARCHAR(10),
  userage INT,
  PRIMARY KEY(username,userage)       -- 联合主键,联合约束
                             -- 对个字段的值,只有完全相同时,才能触发约束
)

-- 一般主键的建立方式
-- int bigint 自增
-- 主键的值是不会回补的

CREATE TABLE tb9(
  tid int primary key auto_increment,     -- 自增
  username VARCHAR(10),
  userage INT
);

主键约束与“not null unique”区别

  1. 作为Primary Key的域/域组不能为null,而Unique Key可以。
  2. 在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以 将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的, 具体到某一列可能会重复。
  3. 更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置 Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。

外键约束

  • 外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键 【A为基本表或父标,主表,B为信息表,子表,副表】
-- 外键约束——只能是表级约束
-- 外键的值可以重复 可以为null 必须要写父表中有的数据
-- 父表中的关联字段必须是一个具有唯一性的数据
-- 父表中的字段名和从表中的字段名可以不同,但类型必须一致
-- 一个表中可以有多个外键,也可以有多个外键约束 但是只能有一个主键
-- 添加数据时,先添父表 再添子表;删除数据时,先删子表 再删父表
-- 使用外键关系,不去建立外键约束
 
CREATE TABLE a(
  aid INT primary KEY auto_increment,
  aname VARCHAR(10)
);

DROP TABLE b;
CREATE TABLE b(
  bid INT PRIMARY key auto_increment,
  bname VARCHAR(10),
  aid INT,
  FOREIGN KEY(aid) REFERENCES a(aid)
);

约束的添加

  • 添加非空约束:alter table 表名 modify test_student char(10) not null;
  • 添加唯一约束:alter table 表名 add unique(表字段名,字段,字段,字段);
  • 添加主键约束:alter table 表名 add primary key(表的字段名,字段,字段);
  • 添加外键约束:

            alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);

约束的删除

  • 删除not null约束:alter table 表名 modify 列名 类型;
  • 删除unique约束:alter table 表名 drop index 唯一约束名;
  • 删除primary key约束:alter table 表名 drop primary key;
  • 删除foreign key约束:alter table 表名 drop foreign key 外键名;

检查约束

目前MySQL不支持,Oracle支持

注:给已经创建的表添加约束,必须保证表中的数据满足该约束

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值