数据库01-范式总结
数据库:文档型sqlite,服务型mysql
范式:关系模式-一张表的结构 关系-一张实例化了的数据表
1NF的定义为:每个属性都不可再分
2NF:消除了非主属性对于码的部分函数依赖(非主属性不能由部分码确定,必须由全部码才能 唯一确定非主属性)
解决方法:把部分依赖的关系,形成新的表分离
进步:数据冗余过大 修改异常
3NF:消除了非主属性对于码的传递函数依赖(非主属性之间存在着主键的关系)
解决方法:直接把非主传递的属性分成新的表,在原表中去掉非主的非主属性
进步:数据冗余过大 删除异常
BCNF:消除主属性对于码的部分与传递函数依赖
总结:2范式:主和非主的关系解除
3范式:非主属性之间的解除
BCDF:主属性之间的解除
问题所在:
数据冗余过大 :表重复太多
插入异常:只要码没有确定,非主属性就不能往表里面写入
删除异常:一旦把主键删完了,对应的非主属性全部都消失了
修改异常:一个属性在多个表中都有记录,删除一个表的,别的表中就会有异常
补充:
函数依赖 :‘于’代表的是反方向
完全函数依赖:学号 F→ 姓名
部分函数依赖:(学号,课名) P→ 姓名
传递函数依赖: Z 函数依赖于 Y,且 Y 函数依赖于 X (『Y 不包含于 X,且 X 不函数依 赖于 Y』这个前提),那么我们就称 Z 传递函数依赖于 X
属性:
“码”:唯一标示确定一条记录的属性(可以是一个字段也可以是多个字段)
“主属性”:当码是多个对象的时候,其中的任意一个属性就是主属性
“部分函数依赖”:非主属性由码的一部分就能唯一确定
数据库Linux下安装:
安装:sudo apt-get install mysql-server mysql-client
service mysql start service mysql stop service mysql restart
允许远程连接
找到mysql配置文件并修改
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address=127.0.0.1注释
登录mysql,运行命令
grant all privileges on *.* to 'root'@'%' identified by 'mysql' with grant option;
flush privileges;
重启mysql