数据库与服务器、客户端的层次关系
关于数据库
程序中需要存储数据的方式:
1 变量(列表、元组、集合、字典、嵌套)
2 外存(文件)(*.ini)
3 表格、Excel(*.xls、*.xlsx、*.csv)
4 结构化数据库
数据库中的基本概念
记录(Record):数据库中的一行
字段(Field):数据库中的一列
实体(Entity):现实中客观存在并可以被区分的事物。比如:学生、课程
属性(Attribute):实体锁具有的特征。比如:对于学生实体,所体现的属性有:学号、姓名、年龄、性别
关系(RelationShip):实体与实体之间的依赖。包括:一对一、一对多、多对多。
以上三者(实体、属性、关系)可以组成ER图(实体关系图)
通过Visio的数据库模型图建立表:
建表的时候需要考虑范式的约束
一般有如下范式:1NF 2NF 3NF BCNF 4NF 5NF
1NF:属性不可分
姓名
电话号码
年龄
座机
手机
张三
020-84444444
13777777777
23
李四
020-85555555
13888888888
34
如上,因为电话属性可以拆分为座机和手机,所以不满足1NF,修改如下:
姓名
座机
手机
年龄
张三
020-84444444
13777777777
23
李四
020-85555555
13888888888
34
2NF:符合1NF。非主属性完全依赖于关键字
学号
姓名
课程编号
考试成绩
101
张三
201
73
102
李四
202
53
该表中的依赖关系:
学号——姓名
(学号、课程编号)——考试成绩
该表的关键字是:(学号、课程编号)
这里的非主属性姓名依赖于学号,是关键字的一部分,而不是全部。所以不满足2NF
需要拆分成两个表
学号
姓名
101
张三
102
李四
学号
课程编号
考试成绩
101
201
73
102
202
53
这样就满足2NF了
3NF:符合1NF和2NF,并且消除传递依赖
学号
课程编号
老师
职称
101(张三)
201(高等数学)
张老湿
砖家
102(李四)
202(大学英语)
陈教授
叫兽
103(王五)
202(大学英语)
陈教授
叫兽
显然满足1NF
该表的关键字是:(学号、课程编号)。后面的非主属性完全依赖于关键字,所以满足2NF
(学号、课程编号)——上课老师
老师——职称
像这种A依赖于B,B依赖于C的设计,就称为传递依赖,是不满足3NF
需要拆分成两个表
学号
课程编号
老师
101(张三)
201(高等数学)
张老湿
102(李四)
202(大学英语)
陈教授
103(王五)
202(大学英语)
陈教授
老师
职称
张老湿
砖家
陈教授
叫兽
这样就满足了3NF的标准了
后面还有BCNF、4NF、5NF。但是我们设计数据库一般要求达到3NF即可