什么是数数据库
- 严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。 通俗地讲数据库就是存储数据的仓库
- 例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。
关系数据库
一个关系数据库是包含预先定义的相关的一组相关表格。就像下面图示那样,有张表专门用来员工信息,而员工所属部门,又专门用一张表去存。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。 目前市面上所有数据库管理程序都属于关系型数据库,而我们学习的SQLSERVER也是属于关系数据库。
就像这个图所示,表与表之间存在着联系,假设我们在以后工作需要将员工与所在部门的信息查询。只需要将这两张表建立一个联合查询即可。如果不考虑表中关系,而是把我们的表合并成为一张,最简单就像把部门信息里面的这些列的字段放到员工表中了。假设说本来部门叫A部门,现在改变了。那么都找出来所有A部门员工信息进行更改。同时也违反了咱们下面所学的知识。
数据库范式
关系模型原理的核心是”规范化”概念,规范化是指把数据库组织成在保持存储数据完整性的同时最小化冗余数据的结构过程;规范化的数据库是符合关系模型规则的数据库,通常把这些规则称为范式;
第一范式(1NF)无重复的列
是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。
第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,依赖于主键建立的表,主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成,第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键
第二范式示例:我们有这个表
学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息;
如果我要满足以下需求怎么呢?
- 学生有那些基本信息
- 学生选了那些课,成绩是什么
- 每个课的学分是多少
- 学生属于那个系,系的基本信息是什么。
那么会导致产生如下问题:
- 问题分析
- 因此不满足第二范式的要求,会产生如下问题
- 数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
- 更新异常:
- 1)若调整了某门课程的数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。学分,
- 2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
- 删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。
如何解决呢?
选课关系表SelectCourse改为如下三个表:
- 学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);
- 课程:Course(课程名称, 学分);
- 选课关系:SelectCourse(学号, 课程名称, 成绩)。
第三范式:
第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。我们为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键
关系模型
数据库存储文件
- 存储数据库的启动信息,用户数据和对象也存储在此文件中;默认扩展名是.mdf
- 日志文件:恢复数据库日志信息;默认扩展名是.LOG
如何创建数据库方法,我们都是通过SQLSERVER去完成的
1、创建简单的数据库
语法: create database database_name
如:create database Mydatabase1;
2、指定数据文件的数据库
Create database Mydatabase2
ON primary(
--设置数据库的逻辑名称
Name=‘LogicNameOfDataFile2’,
--设置数据库文件名
Filename=‘d:\datafile2.mdf’
)
On关键字用来创建数据文件,使用primary表示创建的主数据文件。
3、完整的数据库创建方法
指定数据文件,日志文件与相应的逻辑文件名的数据库
Create database Mydatabase2
ON primary(
--设置数据库的逻辑名称
Name=‘LogicNameOfDataFile2’,
--设置数据库文件名
Filename=‘d:\datafile2.mdf’
)
LOG ON(
--设置日志的的逻辑名称
Name=‘LogicNameOfDataFile2’,
Filename=‘d:\datafile2.ldf’
)
4、指定大小的数据库
这里大小包含数据文件设置的初始大小,最大存储空间,自动增长幅度;
Create database Mydatabase4
ON primary(
Name=‘LogicNameOfDataFile4’,
Filename=‘d:\datafile4.mdf’,
Size=5mb,
Maxsize=100mb,
Filegrowth=15mb)
LOG ON(
Name=‘LogicNameOfDataFile4’,
Filename=‘d:\datafile2.ldf’,
Size=5mb,
Maxsize=100mb,
Filegrowth=10%
)