`
zealotds
  • 浏览: 122770 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

【Microsoft SQL Server 2008 技术内幕:T-SQL语言基础】一、基础篇

阅读更多
sql2008 t-sql

写在前边
这个系列的文章纯属个人学习笔记。仅仅针对自己不熟悉的部分进行简要摘录。
更多的倾向于sql2005,2008中的新概念和新特性,可能不太适合刚刚接触t-sql的同学:)
示例数据库:
原书提供的例子数据库创建脚本
AdventureWorksLT2008
SQL2005示例数据库

关系模型基础:

约束 (Constraint)
关系模型的最大优点之一就是将数据完整性定义为模型的一部分:
1. Domain integrity: (最简单的约束)就是设置是否允许为空(null)E
2. Entity integrity: candidate key, 可以唯一标示一条记录,候选键可以做为主键,否则就被称为备用关键字(alternate key)
3. Referential integrity: foreign key

规范化 (Normalization)
形式化的数学处理过程,为了在不牺牲完整性的前提下,将数据冗余降低到最小。
第一范式:表中的行必须是唯一的,属性应该是原子的。该范式对关系的定义来说是冗余的,关系数据库一定符合该范式。行的唯一性由主键保证

第二范式:首先满足第一范式;其次对每一个候选键,每个非键属性必须完全依赖于整个(全部的属性)候选键。如上图,如果Orders保留了复合主键,则orderdate, customerid, companyname等属性可以通过orderid唯一决定。而orderid并不是某个候选键的全部属性(这里的复合主键即唯一候选键)。所以需要提取OrderDetails表。引入的数据冗余可以考虑以下情况:相同orderid时不同productid的订单会有orderdate, customerid, companyname三个字段的冗余。

第三范式:首先满足第二范式;其次,所有非键属性必须非传递依赖于候选键。就是说所有的非键属性必须相互独立,没有相互依赖。如上图,customerid和companyname都依赖于整个主键orderid,但companyname依赖于customerid,这样就形成了传递依赖:须知道orderid才能知道customerid, 须知道customerid才能知道companyname。提取Customers表后如下图:

第二、三范式总结:每个非键属性都必须仅依赖于全部的键,不能是其他东西。

数据生命周期(环境):

1. 联机事务处理OLTP (on line transactional processing)
  • 使用T-SQL进行增删改查的环境,注意控制数据冗余,保证完整性。
  • 不适合生成报表,因为可能涉及复杂的关联关系

2. 数据仓库DW (data warehouse)
  • 针对数据检索和生成报表的环境。
  • 为查询进行设计和优化,有意保留部分冗余
  • star schema:一个事实表(存储事实和measure),多个维度表(每个维度实现为一个包含冗余数据的表)。
  • snowflake schema:如果规范化星形模式中的一个维度,生成表示该维度的多个表,得到就是雪花形维度(snowflake dimension),包含雪花维度的模式即雪花模式
  • measure: A measure represents a column that contains quantifiable data, usually numeric, that can be aggregated. A measure is generally mapped to a column in a fact table.
  • 数据通过ETL(extract transform and load)工具被加载到DW, SQL server中由Integration Service响应ETL请求。

3. 联机分析处理 OLAP (on line analytical processing)
  • 对聚合后的数据进行在线动态分析,通常涉及频繁地不同级别的聚合(包括切片slicing和切块dicing)。
  • 使用sql server analysis service计算不同级别的聚合并保存在多维结构(cube)中

4. 数据挖掘 data mining

SQL Server体系结构:

默认数据库:
  • master: 保存数据库实例范围内的元数据信息,服务配置,所有数据库的信息,初始化信息
  • model: 新数据库的模板。修改model数据库将影响其修改后所创建的数据库
  • tempdb: 保存临时数据:work table, sort space, row versioning, etc. 服务重启后重置为model
  • msdb: 保存Agent服务的数据。Agent负责job,schedule, replication和报警。另外还保存一些sql server功能的信息,如database mail和service broker。
  • resource sql server 2005新增的。保存所有系统对象

架构(Schema)和对象:
  • Schema可以看做是各种对象的容器,这些对象可以是table, view, sp等。一个数据库可以包含多个schema,每个schema又包含很多对象。
  • 可以在Schema的级别上制定访问权限控制
  • Schema也是一个命名空间,可用作对象的前缀,如Sales.Orders表示Sales架构中的Orders表,这种表示方法称为架构限定(schema-qualified)名称。
  • 如果省略架构名,对象的搜索次序为:用户默认schema > dbo schema

0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics