Sqlserver基础教程系列1:基础概念

什么是数数据库

  • 严格地说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。 通俗地讲数据库就是存储数据的仓库
  • 例如,企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个"数据仓库"我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。

关系数据库

一个关系数据库是包含预先定义的相关的一组相关表格。就像下面图示那样,有张表专门用来员工信息,而员工所属部门,又专门用一张表去存。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。 目前市面上所有数据库管理程序都属于关系型数据库,而我们学习的SQLSERVER也是属于关系数据库。

就像这个图所示,表与表之间存在着联系,假设我们在以后工作需要将员工与所在部门的信息查询。只需要将这两张表建立一个联合查询即可。如果不考虑表中关系,而是把我们的表合并成为一张,最简单就像把部门信息里面的这些列的字段放到员工表中了。假设说本来部门叫A部门,现在改变了。那么都找出来所有A部门员工信息进行更改。同时也违反了咱们下面所学的知识。

数据库范式

关系模型原理的核心是”规范化”概念,规范化是指把数据库组织成在保持存储数据完整性的同时最小化冗余数据的结构过程;规范化的数据库是符合关系模型规则的数据库,通常把这些规则称为范式;

第一范式(1NF)无重复的列

是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。在第一范式(1NF)中表的每一行只包含一个实例的信息。简而言之,第一范式就是无重复的列。

第二范式(2NF

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,依赖于主键建立的表,主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成,第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键

第二范式示例:我们有这个表

学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等信息;

如果我要满足以下需求怎么呢?

  • 学生有那些基本信息
  • 学生选了那些课,成绩是什么
  • 每个课的学分是多少
  • 学生属于那个系,系的基本信息是什么。

那么会导致产生如下问题:

  • 问题分析
  •   因此不满足第二范式的要求,会产生如下问题
  •   数据冗余: 同一门课程由n个学生选修,"学分"就重复n-1次;同一个学生选修了m门课程,姓名和年龄就重复了m-1次。
  •   更新异常:
  •   1)若调整了某门课程的数据表中所有行的"学分"值都要更新,否则会出现同一门课程学分不同的情况。学分,
  •   2)假设要开设一门新的课程,暂时还没有人选修。这样,由于还没有"学号"关键字,课程名称和学分也无法记录入数据库。
  •   删除异常 : 假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。很显然,这也会导致插入异常。

如何解决呢?

选课关系表SelectCourse改为如下三个表:

  1. 学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话);
  2. 课程:Course(课程名称, 学分);
  3. 选课关系:SelectCourse(学号, 课程名称, 成绩)。

第三范式:

第三范式规则查找以消除没有直接依赖于第一范式和第二范式形成的表的主键的属性。我们为没有与表的主键关联的所有信息建立了一张新表。每张新表保存了来自源表的信息和它们所依赖的主键

关系模型

数据库存储文件

  1. 存储数据库的启动信息,用户数据和对象也存储在此文件中;默认扩展名是.mdf
  2. 日志文件:恢复数据库日志信息;默认扩展名是.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%

)

时间: 2024-10-10 10:20:21

Sqlserver基础教程系列1:基础概念的相关文章

[转载]WPF入门教程系列一——基础

一. 前言   最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语言,也属于“标准通用标记语言”的一个分支.如果以前接触过XML.HTML.XHTML.AS

MongoDB基础教程系列--未完待续

最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作为目录篇,方便阅读,有问题大家一块交流哈.多谢大家关注,转载请注明出处,谢谢! MongoDB基础教程系列--第一篇 进入MongoDB世界 MongoDB基础教程系列--第二篇 MongoDB基本操作(一) MongoDB基础教程系列--第三篇 MongoDB基本操作(二) MongoDB基础教程

AxureRP7.0基础教程系列 部件详解水平线和垂直线 HORIZONTAL & VERTICAL LINES

原型库网站-讲师金乌原创发布,可自由转载,请注明出处! Axure中文官网:www.AxureRP.cn   <AxureRP7.0部件详解> 水平线和垂直线 HORIZONTAL & VERTICAL LINES 使用案例 将页面区块化 最常见的用法是将内容分解成几个部分,比如,讲页面分为 header 和 body. 编辑线条 添加箭头 线条可以通过工具栏中的箭头样式转换为箭头:选中线条,点击箭头样式,在下拉列表中选择箭头样式. 线宽.颜色和样式 线条可以添加颜色.设置宽度和添加样

基础教程系列之装系统篇

[科普]基础教程系列之装系统篇 鉴于每天有很多新人询问安装系统问题,我决定花一些时间来系统性的整理一下安装系统的步骤,带领新人一步步来安装好系统. 目录 0.前言 1.物质准备 2.制作启动盘 3.选择自己需要的系统 4.其他准备工作 5.进入win pe 6.举例进入win pe 7-1.确保正确安装系统的准备工作 7-2.确保正确安装系统的准备工作 8-1.使用原版镜像安装系统 8-2使用ghost安装系统 8-3使用nt6 hdd installer安装系统 9.重启进入操作系统 10.安

Java基础教程:多线程基础(2)——线程间的通信

Java基础教程:多线程基础(2)--线程间的通信 使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时还会使程序员对各线程任务在处理的过程中进行有效的把控与监督. 线程间的通信 思维导图 等待中 等待/通知机制 不使用等待/通知机制 我们可以使用使用sleep()与 whle(true) 死循环来实现多个线程间的通信. 虽然两个线程实现了通信,但是线程B必须不断的通过while语句轮训机制来检测某一个条件,这样会浪费CPU资源. 如果轮询间隔较小,更浪费时间间隔.如果轮训

Sqlserver基础教程系列4-一些函数的用法

(1)聚合函数: 聚合分析是指对数据表中的一列或多列所进行的统计分析 1.统计计数函数---COUNT( ),调用方式可归结为三种: COUNT(*) SELECT COUNT(*) AS 当前表的总行数 FROM STUDENT5 COUNT(ALLCOLUMN) SELECT COUNT(S_AVGRADE) AS 参加考试的人数 FROM STUDENT5 COUNT(DISTINCTCOLUMN) SELECT COUNT(DISTINCT S_DEPT) AS 不同系别的个数 FROM

WPF入门教程系列一——基础

一. 前言   最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料.为了温故而知新把学习过程记录下来,以备后查.这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一点"标准通用标记语言":WPF窗体程序使用的XAML语言,也属于"标准通用标记语言"的一个分支.如果以前接触过XM

Python基础教程系列:七、字典(续)

不好意思,昨天有急事耽搁了,今天我们接着说字典.首先通过key往字典中添加三条记录.其中方括号中的那就是key,等式右边的就是value,别学完了序列后,总感觉中括号中的那是下角标. 那么字典的更新,包括增.删.改也都分别作了介绍.删除整个字典相对较少,毕竟实际工作中不像做练习,随便删了就可以.那么真想删除整个字典,del dict1即可.其中pop(),这不就相当于出栈操作么,取出来了也就相当于删除了. 字典操作: 1.字典比较:cmp(),这个比较起来也比较复杂,毕竟也不是完全数与数比大小或

Python基础教程系列:七、字典

字典是Python语言中唯一的映射类型.映射类型不要求用数字值做索引就可以从一个容器中获取对应的数据项.你可以用键(key)直接映射到值,这就是为什么叫映射的原因,映射,我的理解就是索引,顺藤摸瓜就可以找到背后的幕后者.字典是Python中最强大的数据类型之一. 刚开始接触字典还是在Hadoop中的mapreduce,其实说白了就是键值对(key/value),所谓的索引通常是指key,而幕后者通常指的是value.每个key对应一个value,主要的好处是方面归类,而且按照key进行查找val