什么是数据库:
要回答这个问题,我们首先需要知道, 什么是数据?
1.用来计算,分析和规划某些事的事实或者信息。
2.计算机产生或者存储的信息
数据库是用来管理大量,复杂数据集的复杂的软件系统。
数据库应用广泛
数据库系统的目的:
早期的数据库基于文件系统建立的,但是这样的模式会导致很多的问题:
·数据的冗余与不一致
·访问数据的困难
·数据隔离
·数据是否可信
·数据更新的独立性
·多用户的并发访问
·数据安全性问题
关系数据库
每一个行都代表了一个已知的数据
每一列都是一个变量,也可以理解为对一个对象的某个特征的描述
每一行中的每一项数据都是相关的,所以叫做关系数据库
键值(key)
在关系数据库中,键值是不允许存在重复的。
键值可以用来区分不同行。
同时键值可以由多列组成。
标准化(Normalization)
存在关系数据库中的数据需要被标准化,
Kent的话很好地诠释了三大范式:
Every non key attribute must provide a fact about the key, the whole key and nothing but the key.
每一个非键值的变量都必须一个关于键值的事实,并且是对于完整的键值,而且除了键值以外的所有都不行。
这么说其实还是有点难以理解,我说说自己的理解:
每一行中,键值是主心骨,是这一行的核心信息,而其他列的信息是对键值的修饰,第一范式的内容是,每一列都只能包含对键值的一项修饰,而不能是两项或者多项;第二范式的内容是,修饰的对象不能只是键值中的一个,也就是说,如果键值本身有两项或多项组成,那么修饰的内容必须是对于两项都是唯一的;第三范式的内容是,修饰与修饰之间不能存在依赖关系。
比如说,我们现在把一个学校里的学生信息存进一个关系数据库,并且把他们的学号和姓名作为联合主键,现在我们对这个表格添加一列是他们所属的专业和专业对应的英文名,那么这样的操作便不符合第一范式,因为在专业信息这一列里面有两条信息存在;
那么有人便会考虑把这两条信息分为两列,一列存专业的中文名,一列存专业的英文名,但还是在学生信息的表里,那么这样的操作便不符合第三范式,因为专业英文名只对专业有依赖关系,而与学生无关,因此最好的做法是将专业信息另外用一个表进行存储,然后用外键把学生信息中的专业一列连到专业信息表格的专业名那一列;
现在我另外想要设置一列用来存学生的学号是否为偶数,但是由于学号是否为偶数仅仅与学号有关,而与学生名无关,因此不符合第二范式。
主体与关系