文章目录
数据库设计
一、三范式
第一范式(1NF):强调列的原子性,即列不能再分成其他列
- 不遵循第一范式
第二范式(2NF):首先是1NF,另外包含两个部分的内容,一是必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
主键标识数据的唯一性:作用是方便查询,提高查询速度。
- 不遵循二范式
OrderID是一个主键,但是并没有满足第二个条件。productID存在之后会导致discount的意思不明确,你的这个折扣指的是oderid这个订单是二折还是productid这个商品二折呢?一个订单下面难道就只存在一件商品吗?因此折扣这一列不知道依赖谁。
第三范式(3NF):首先是2NF;另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在列A依赖于非主键列B,非主键列B依赖于主键的情况。
- 不遵循三范式:
会出现数据冗余,老王只会下一个订单吗,如果下多个订单,后面三列是是不是一直会重复的记录
- 最终存储形式
二、E-R模型
- 一对一:学校一个班级只有一个正班长,而一个班长只能在一个班中任职,班级与班长之间具有一对一关系。
- 一对多:一个班级有多个学生,而每个学生只在一个班级中学习,则班级与学生之间具有一对多关系。
- 多对多:一门课程同时拥有多个学生选修,一个学生可以同时选修多门课程,则课程与学生之间具有多对多联系。
关系字段:新建一张表C,这个表只有两个字段,一个用于存储A的主键,一个用于存储B的主键。如果过不新建一张表,你将关系字段存储到A表,那么篮球有好多人选修,及所造成的后果就是篮球 郭靖,篮球 黄蓉…
三、逻辑删除
- 物理删除
-- id=8这一条数据已经删除
delete from students where id =8;
但是不建议物理删除,因为他已经从你的磁盘中删除了,应该做逻辑删除
逻辑删除:通过一个字段标记数据是否被删除:
如何做:在原有的表结构上增加一个字段来标记数据是否被删除
当我们要增加字段的时候使用update
还是alter
?
alter与update
我们先来看一下这两个的用法:
alter用来修改基本表,是对表的结构进行操作,比如对字段增加,删除,修改类型
update用来修改表中的数据,修改某一行某一列的值
对于初学数据库的菜鸟来说,可能update和alter之间的区别不是很明白。我就是。刚才建立了一个简单的的数据表。
如图我们创建了一个slioders的表,现在我们想给张飞也发工资。改变张飞对应的行的salary字段的值。
愚蠢 的我居然想着用insert int…where name=‘张飞’;显然这样不行,因为对insert into而言我们是想表中插入表中不存在的行,但是张飞这一行已经存在所以不可以。我们只是要修改某个字段的值,这个时候利用update。
也就是说我们利用update来修改数据。
那么alter用来干嘛,我们可以利用**alter来修改数据表的结构,**比如说改变字段的类型,添加或者是删除某个字段
基本用法:
alter table <表名>
[add <新字段名><数据类型><约束条件>]添加新的字段
[drop <字段>]删除表中某个字段
[modify <字段><数据类型>]修改字段的类型
比如我们在表中袖增加一个字段sex
逻辑删除
- 在原有表结构增加一个字段来标记数据是否被删除
-- 0表示没有被删除,1表示被删除
alter table students add is_delete bit default 0;
BIT数据类型用于存储bit值,能够存储比特长度范围为1~64。
采用 b’value’标记方式指定bit值,其中value是0或者1的序列,例如:b’111’代表7,b’10000000’代表128。
如果设置的0,1串的长度小于BIT(M)的M,那么在左面填充0,例如,将b’101’赋给BIT(6),那么会存储b’000101’。