数据库设计范式(数据库设计规则) 如何将多个信息合理的进行组织]
设计3范式
第一范式:
满足列的原子性(不可拆分)
联系范式-->邮箱,电话,qq 可以拆分
第二范式:
数据库表中必须要有主键,能唯一的表示某条记录的列(有些表中可以没有主=键)
第三范式:
一张表中存储一类信息, 在一张表中关联其他表中的数据时,只需要关联主键列即可.
外键:
引用另外一个数据表的某条记录。
外键列类型与主键列类型保持一致
数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键
(foreign key)建立起来的。
create table student(
id int not null auto_increment primary key,
num int,
name varchar(10)
majorid int,
CONSTRAINT 约束名 foreign key(majorid ) references major(id)
);
约束名规则:
例:FK_ForeignTable_PrimaryTable_On_ForeignColumn
注意事项:
1、当主表中没有对应的记录时,不能将记录添加到从表
2、不能更改主表中的值而导致从表中的记录孤立
3、从表存在与主表对应的记录,不能从主表中删除该行
4、删除主表前,先删从表
关联查询:
关联查询
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象:表
1
有
m
行,表
2
有
n
行,结果
=m*n
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
按功能分类:
内连接(inner join)
语法:
Select
结果
from
表
1
,表
2 where
表
1.column1 =
表
2.column2
外连接:
左外连接l(left join)
select
结果
from
表
1 left join
表
2 on
表
1.column1 =
表
2.column2
右外连接 (right join)
select
结果
from
表
1 right?join
表
2 on
表
1.column1 =
表
2.column2
子查询
含义:出现在其他语句中的
select
语句,称为子查询或内查询;外部的查询语句,称为主查询或
外查询
.
分类:
按子查询出现的位置:
from
后面:支持表子查询
where
:支持标量子查询,列子查询
按功能、结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
表子查询(结果集一般为多行多列)