数据库设计三范式
1NF:要求一张表只描述一件事。比如学生表只能保存学生信息,和学生无关的信息不得保存;
2NF:要求保证表中每一行数据的原子性。即表中不得存在完全相同的数据行,存在完全相同的数据行叫数据冗余(或叫数据副本),这是一种错误,要尽量的减少和避免,无法完全完全消除。解决方案主键或标识,一般的是主键配合标识去用的。
3NF:(外键)表中其他的(外)键要依赖于主(键表)(主键)键而存在。
create table StudentCode(
scID int primary key auto_increment,
sCode varchar(18)
);
create table Student(
sID int primary key auto_increment,
sName varchar(16),
sAge int,
scID int,#外键列数据来自于主键表主键列
foreign key(scID) references StudentCode(scID)
);
insert into StudentCode values(null,'123');
insert into StudentCode values(null,'456');
insert into Student values(null,'zs',18,1);
insert into Student values(null,'ls',19,2);
Select sname,sage,scode from student,studentcode
Where student.scid=studentcode.scid;
TIPS:
-
- 主键列的一列所有数据行,不得为空并且不得相同,并且一张表中最多只有一个主键,万级数据查询有主键速度更快;
- 标识列的数据类型只能是整型,在MYSQL中必须是主键才能设置;
- 使用truncate table 表名; 可以删除标识,但是不能加条件,只能删除所有数据;
- 标识种子:默认标识种子就是1,可以自由指定,插入时指定后续用null即可。只能改一次不能比原来的数据小。
- 先建主表设置主键列,再建外键表添加外键列;先插入主表数据,再根据主表数据添加外键列数据;先删除外键表数据,再删除主键表数据;
- 三范式越标准越规范,但是效率越低,一般人为的违背第三大范式只会遵循1、2范式。
其他规则
- 字符串的长度一般最优化,然后再为2的N次方;
- 在写SQL指令时,看看系统大小写,对应大小写,执行速度还要块;
- 使用关键字: 用定界符 `` ;
- 数据名、表名一般情况不用复数。比如Student。
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/2924.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除