作为一名程序员,对于SQL的使用算是基础中的基础,虽然也写了很多年的SQL,但常常还是记不清一些常见的命令,故而通过一篇博文巩固相关的记忆,并把T-SQL本身的一些新特性再进行一次学习。

首先回顾基础的概念,这部分可以跳过哈,比较枯燥。结构化查询语言SQL是基于集合理论和谓词逻辑的,大学课程中数字逻辑和离散数学主要会涉及这部分的内容。

集合理论是数学家Georg Cantor创建,是基于关系模型的数学分支。集合的定义为,任意集合体是我们感知或者想到的,能够确定的、互异对象m的整体。

谓词逻辑的渊源可以追溯到古希腊,也是基于关系模型的一个数学分支。创建关系模型领域的Edgar F. Codd博士提出通过谓词逻辑来管理和查询数据。一般来说,谓词是一个属性或是一个表示"持有"或者"不持有"的表达式,也就是"真"或者"假"。关系模型就是依靠谓词来维护数据的逻辑完成性并定义其结构的。在C#中,可以经常看到predicate,也是这个逻辑谓词。

关系模型涉及命题、谓词、关系、元组和属性等概念。在集合理论中,关系是集合的表现形式。在关系模型中,关系是相关的信息的集合,与SQL中相对应的就是表(而不是表间的关系)。需要注意的是,单个关系代表单个集合,而多个关系经过操作(基于关系代数)的结果会是一个关系,如联接操作。一般来说,在我们看来,谓词不是"真",就是"假"。但让我们回忆一下,物理学中的一个著名实验"薛定谔之猫",其主要思想就涉及"未可知态",因此在数据库中,我们可以看到"true","false","unknown"三种情况。

同时,关系模型通过约束规则将定义数据完整性作为模型的一部分。常见的有提供实体完整性的候选键和提供引用完整性的外键。候选键是定义了一个和多个属性的键,防止关系中出现多个相同的元组,基于候选键的谓词可以唯一的标识行,可以在关系上定义多个候选键,通常会选择一个候选键作为主键,其他的候选键称为备用键。这儿可以补充的是,其实主键(候选键)的概念和索引的概念是分离的,只是数据库在实现时往往把主键作为聚集索引。外键用于强制引用完整性,外键定义了关系的一个或多个属性引用另一关系的候选键,此约束限定了引用关系的外键属性中的值,应该出现在被引用关系的候选键属性中的值。这儿想补充的是,在高并发环境下,一般不使用数据库外键,而是在业务层进行控制。此外还有非空约束、唯一约束等。

接下来介绍一个很常见但时间一长就容易忘记的概念,规范化规则(也叫范式)。规范化是一个常规的数学过程,用于确保每一个实体都由单一关系表示,以避免数据修改过程中的异常,并在不牺牲完整性的前提下保持最低的冗余。最常见的三个范式分别是:

1NF,表示关系中的元组必须是唯一的,而且属性是原子化的(这个往往根据需求而定,不绝对)。

2NF,在满足第一范式的基础上,对于每个候选键,每个非键属性必须是对整个候选键的完全函数依赖。简而言之,就是如果要获得任何非键属性值,需要提供相同元组候选键中所有属性的值,如果知道候选键的所有属性的值,就可以检索到任意元组的任何属性的任何值。

3NF,在满足第二范式的基础上,所有非键属性必须依赖于非传递的候选键。简单来说,就是所有非键属性间必须相互独立,一个非键属性不能依赖于另一个非键属性。

接下来简单介绍数据的生命周期,常见的业务系统一般仅仅包含联机事务处理一个阶段,但是随着业务规模的发展,会慢慢衍生出很多大数据方向的阶段,如图1所示,其中缩略词所代表的意思为:OLTP,联机事务处理;DSA,数据准备区;DW(OLAP),数据仓库;BISM,商业智能语义模型;DM(Data Mining),数据挖掘;ETL,提取、转换和加载;MDX,多维表达式;DAX,数据分析表达式;

图 1数据生命周期

其中,数据仓库主要是为了支持数据检索需求进行的数据模型设计和优化, 模型故意进行了冗余、减少表和简化关系。最简单DW结构是星型架构,包括多个维度表和一个事实表,每个维度表表示要分析的数据主题。例如在订单和销售系统中,可能要分析客户、产品、雇员、时间以及类似主题数据。星型架构中,每一个维度以冗余数据方式填充单个表(例如将Product、ProductSubCategory、ProductCategory合成一个ProductDim)。此外,如果想要规范化一个维度表,就会产生多个表来表示该维度,得到一个雪花维度,这种的结构也被称为雪花架构

从源系统提取数据、处理数据并加载到数据仓库的过程,被称为提取、转换和加载ETL,SQL Server相关的产品就是我们常见SSIS,此过程常常涉及OLTP和DW之间数据准备区DSA的使用。

商业智能语义模型BISM提供丰富灵活的分析和报告功能,其体系结构包含三层,数据模型、业务逻辑和查询数据访问。模型可以部署在Analysis Services和PowerPivot上,前者针对BI专业人员,使用多维数据模型或表格,而后者针对企业用户,使用表格数据模型。业务和查询使用两种语言, 基于多维概念的多维表达式(MDX)和基于表格概念的数据分析表达式(DAX)。数据访问层可以从不同的数据来源获取数据:如DW这样的关系型数据库、文件、云服务、Odata订阅等。数据访问层既可以在本地缓存数据,也可以作为连接数据源的直通层。缓存模式下可以有两种存储引擎方式选择,一种被称为MOLAP的预先聚合方式,当初设计它是为了支持多维模型,而另一种称为VertiPaq的新引擎,它实现了列存储概念,具有很高的压缩级别和非常快速的处理引擎,不在需要预先聚合、索引等。

BISM为用户提供可能的答案,而DM为客户提供正确的答案。也就是说,数据挖掘算法梳理数据并筛选有用信息,Analysis Services支持的数据挖掘算法包括:聚类分析、决策树等。

关于SQL Server的一些例如ABC等产品概念就跳过,毕竟使用性不强,不过最近微软的云服务,包括数据库云服务(Window Azure SQL Database)还是有一些亮点的。技术概念比较多,之后一一介绍。

SQL Server实例的通过机器名\实例名唯一标示,例如Server1\Inst1。数据库实例中多个不同的数据库,系统数据库包括:master数据库存储实例范围的元数据信息、服务器配置等;model数据库用于创建数据的模板;tempdb数据库是存储临时数据的地方,如工作表、排序空间、行版本控制信息等;msdb数据库是一个称为"SQL Server代理"的服务存储数据的地方,SQL Server代理提供自动操作(包括作业、计划和警报)、复制服务、Database Mail、Service Broker、备份等。

数据库有数据文件和日志文件组成,在创建数据库时,可以为每个文件定义各种属性,包括文件名、位置、初始大小、最大大小和一个自动增长的增量。数据文件存储数据,日志文件维护事务信息。虽然SQL Server可以并行写入多个数据文件,但只能以连续的方式一次写入一个日志文件。因此,与数据文件不同,多个日志文件并不会带来性能的提升,同时如果日志所在磁盘空间不足,那么可能还需要添加日志文件,这点在实际工作中也经常遇到日志文件过大占满磁盘空间而造成数据库服务不可用。数据文件被组织在一个叫做"文件组"的逻辑组中,primary文件组包含XXX.mdf的主数据库文件,以及数据库系统目录,可以添加次要数据文件XXX.ndf到primary,同时XXX.ldf表示日志文件。此外,数据库提供schema架构一层用于数据库对象的管理。

图 2数据库文件布局

主要供自己复习参考使用,如有疏漏,深表歉意。

参考资料:

  1. (美)本咁. SQL Server 2012 T-SQL基础教程[M]. 北京:人民邮电出版社, 2013.

快速入门系列--TSQL-01基础概念的更多相关文章

  1. vue 快速入门 系列 —— vue 的基础应用(上)

    其他章节请看: vue 快速入门 系列 vue 的基础应用(上) Tip: vue 的基础应用分上下两篇,上篇是基础,下篇是应用. 在初步认识 vue一文中,我们已经写了一个 vue 的 hello- ...

  2. vue 快速入门 系列 —— vue 的基础应用(下)

    其他章节请看: vue 快速入门 系列 vue 的基础应用(下) 上篇聚焦于基础知识的介绍:本篇聚焦于基础知识的应用. 递归组件 组件是可以在它们自己的模板中调用自身的.不过它们只能通过 name 选 ...

  3. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  4. [转]快速入门系列--WebAPI--01基础

    本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...

  5. 快速入门系列--WebAPI--03框架你值得拥有

    接下来进入的是俺在ASP.NET学习中最重要的WebAPI部分,在现在流行的互联网场景下,WebAPI可以和HTML5.单页应用程序SPA等技术和理念很好的结合在一起.所谓ASP.NET WebAPI ...

  6. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  7. 快速入门系列--MVC--07与HTML5移动开发的结合

    现在移动互联网的盛行,跨平台并兼容不同设备的HTML5越来越盛行,很多公司都在将自己过去的非HTML5网站应用渐进式的转化为HTML5应用,使得一套代码可以兼容不同的物理终端设备和浏览器,极大的提高了 ...

  8. vue 快速入门 系列 —— vue-cli 下

    其他章节请看: vue 快速入门 系列 Vue CLI 4.x 下 在 vue loader 一文中我们已经学会从零搭建一个简单的,用于单文件组件开发的脚手架:本篇,我们将全面学习 vue-cli 这 ...

  9. 快速入门系列--WebAPI--04在老版本MVC4下的调整

    WebAPI是建立在MVC和WCF的基础上的,原来微软老是喜欢封装的很多,这次终于愿意将http编程模型的相关细节暴露给我们了.在之前的介绍中,基本上都基于.NET 4.5之后版本,其System.N ...

  10. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

随机推荐

  1. C++是一把很奇怪的刀

    C++是一把很奇怪的刀,首尾都是刀刃.用刀能出什么,还是要看拿刀的人.

  2. 后台设置gridview不换行

    GridView1.Style.Add("word-break", "keep-all");            GridView1.Style.Add(&q ...

  3. day10---异步I/O,gevent协程

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...

  4. ABP框架详解(八)动态ApiController的生成和访问机制

    在ABP框架中提供了一套动态生成ApiController的机制(依然支持原生ApiController的使用方式),虽然说是动态生成ApiController但是实际上并没有真正在启动程序的时候生成 ...

  5. Scala.js v0.1 发布,在浏览器直接运行 Scala

    今天我们发布了 Scala.js 的首个版本,这个项目是在今年六月份的时候宣布的. 第一个版本支持的特性: 支持所有 Scala 特性,包括宏,不过有一些 语义上的区别 可非常好的跟 JavaScri ...

  6. 如何做到在虚拟数据库和真实数据库之间自由切换?【低调赠送:QQ高仿版GG 4.4 最新源码】

    记得以前在公司上班时,有时候白天的活没干完,我就会把工作带回家晚上加班继续做.但是,我们开发用的数据库是部署在公司局网内部的一台服务器上的,在家里是肯定连不上这台机器的.在家里没有数据库,服务端就跑不 ...

  7. 【读书笔记】javascript 继承

    在JavaScript中继承不像C#那么直接,C#中子类继承父类之后马上获得了父类的属性和方法,但JavaScript需要分步进行. 让Brid 继承 Animal,并扩展自己fly的方法. func ...

  8. 如何捕获和分析 JavaScript Error

    前端工程师都知道 JavaScript 有基本的异常处理能力.我们可以 throw new Error(),浏览器也会在我们调用 API 出错时抛出异常.但估计绝大多数前端工程师都没考虑过收集这些异常 ...

  9. C#性能优化之Lazy<T> 实现延迟初始化

    在.NET4.0中,可以使用Lazy<T> 来实现对象的延迟初始化,从而优化系统的性能.延迟初始化就是将对象的初始化延迟到第一次使用该对象时.延迟初始化是我们在写程序时经常会遇到的情形,例 ...

  10. Jquery相册插件(开源下载)

    一,导言 上次 “不定义JQuery插件,不要说会JQuery” 的博客写的肤浅,漏洞百出,而且最重要的是从理论上说如何定义一个jQuery插件,没有实质性的写一个jQuery插件出来,这未免是纸上谈 ...