《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景
几个缩写的全称:Data Definition Language (DDL), Data Manipulation Language (DML), and Data Control Language (DCL)。
以下三种范式我的理解就是规范,用来保证数据关系的正确性和减少冗余。
- 第一范式:表中的每一行必须是唯一的。
- 第二范式:首先必须满足第一范式。其次,想获得任何非键属性值,就必须提供“整个候选键”(候选键(candidate key)就是能唯一确定一行的一个或多个属性)。例如:表Orders主键为orderid和productid(由两个属性组成的候选键),但通过orderid(只是候选键的一部分)就可以确定某个customerid(非键属性值),所以必须拆成两个表:Orders和OrderDetails,如下图1-3所示。
- 第三范式:首先必须满足第二范式。其次,非键属性值之间必须互相独立,不能互相依赖。例如:表Orders中有customerid和companyname,这两个属性就是互相依赖的,所以必须再增加一个Customers表,其主键为customerid,非键属性为companyname,然后将Orders表中companyname删去。
下图为应用了第三范式后的数据模型:

一个SQL Server实例是指一个SQL Server数据库引擎/服务。一台电脑上可以安装很多个SQL Server实例,并且他们之间是完全互相独立的。

可以把数据库当成是各种对象的容器,这些对象包括表、视图、存储过程等等。

其实刚才说简单了,数据库包含多个构架(Schema),而Schema又包含各种对象(表,视图什么的),如下图所示:

控制权限在Schema这一层,比如可以设置某些用户对dbo这个Schema只能SELECT。Schema也起到命名空间的作用,所以一个schema-qualified object name长这样:Sales.Orders。你也可以省略schema name让SQL Server猜一下你是指哪个schema。如果你新创建一个数据库,会自动创建一个默认的叫dbo的schema,如果你不指定schema名,就当你是指dbo。
主键约束(Primary Key Constraints)。主键能唯一标示一行数据,可以任意选择一个列(或多个列的组合)作为主键(primary key)。每个表只能有一个主键。语法:
ALTER TABLE dbo.Employees
ADD CONSTRAINT PK_Employees
PRIMARY KEY(empid);
唯一约束(Unique Constraints)。唯一约束用来表示这个列中数据的唯一(最典型的就是用户id)。可以在一个表中定义多个唯一约束。主键约束和唯一约束都会使SQL Server在幕后创建索引,索引是一种物理机制,也可以加快查询速度。语法:
ALTER TABLE dbo.Employees
ADD CONSTRAINT UNQ_Employees_ssn
UNIQUE(ssn);
外键约束(Foreign Key Constraints)用来引用其他表中的候选键,只能取其他表的候选键中出现过的值。外键可以引用当前表他自己的其他的列。语法:
ALTER TABLE dbo.Orders
ADD CONSTRAINT FK_Orders_Employees
FOREIGN KEY(empid)
REFERENCES dbo.Employees(empid);
默认下,当试图删除或更新被引用的行时,如果在引用表中存在相关的行,则此操作不能执行。也可以在外键定义中将ON DELETE和ON UPDATE选项定义为:CASCADE(改变被引用表,则自动改变引用表),SET DEFAULT(改变被引用表,则将引用表中相关行设置为列的默认值),SET NULL(改变被引用表,则将引用表中相关行设置为NULL)。
检查约束(Check Constraints)。语法:
ALTER TABLE dbo.Employees
ADD CONSTRAINT CHK_Employees_salary
CHECK(salary > 0.00);
之后如果你试图插入负数的工资进去,会被拒绝。当添加检查约束和外键约束时,你也可以指定一个选项WITH NOCHECK,意思是不必对现有的数据进行检查。
默认约束(Default Constraints)。语法:
ALTER TABLE dbo.Orders
ADD CONSTRAINT DFT_Orders_orderts
DEFAULT(SYSDATETIME()) FOR orderts;
如果标识符里面有特殊字符(比如有空格),那么就需要用分隔符,比如[Order Details] 。标准的SQL是用双引号。另外,每句的结尾记得写分号。
《SQL Server 2012 T-SQL基础》读书笔记 - 1.背景的更多相关文章
- SQL Server Window Function 窗体函数读书笔记二 - A Detailed Look at Window Functions
这一章主要是介绍 窗体中的 Aggregate 函数, Rank 函数, Distribution 函数以及 Offset 函数. Window Aggregate 函数 Window Aggrega ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...
- SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005
SQL Server 2012SQL Server 2012 开发版(DVD)(X64,X86)(中文简体)ed2k://|file|cn_sql_server_2012_developer_edit ...
- sql server 2012 导出sql文件
导出表数据和表结构sql文件 在工作中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语句!在这个 ...
- SQL Server Window Function 窗体函数读书笔记一 - SQL Windowing
SQL Server 窗体函数主要用来处理由 OVER 子句定义的行集, 主要用来分析和处理 Running totals Moving averages Gaps and islands 先看一个简 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)
一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...
- SQL Server 2012 - 动态SQL查询
动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...
- SQL Server 2012 - 数据库的基础操作
数据库基本操作 --新建数据库卡 use master go create database SchoolDB on ( Name=SchoolDB, FileName='D;\DB\SchoolDB ...
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
随机推荐
- Java 向上造型详解
子类的对象可以向上造型为父类的类型.即父类引用子类对象,这种方式被称为向上造型. 在日常生活中,我们都扮演着不一样的角色.我们有可能是老师,有可能是学生,有可能是……, 但是我们都有共同的属性,例如: ...
- javascript xml转json
1.代码 //加载xml数据 function loadXml(str) { if (str == null) { return null; } var doc = str; try{ doc = c ...
- tomcat 启动报错 解决办法 A child container failed during 
转自:http://blog.sina.com.cn/s/blog_4e1e357d0102v55c.html 控制台报错: Caused by: org.apache.catalina.Lifecy ...
- MIT-线性代数公开课
本博客是学习MIT-线性代数笔记,Gilbert Strang大神讲的通俗易懂,感兴趣的可以观看视频 其中习题集请点击 01)方程组的几何解释 02)矩阵消元 03)乘法和逆矩阵 04)A的LU分解 ...
- verilog中的timescale
`timescale是Verilog HDL 中的一种时间尺度预编译指令,它用来定义模块的仿真 时的时间单位和时间精度.格式如下: `timescale 仿真时间单位/时间精度 注意:,不能为其它的 ...
- easyui自学模板代码
index.jsp源码 <%@ page language="java" contentType="text/html; charset=UTF-8" p ...
- vue项目中 指令 v-html 中使用过滤器filters功能
转载于简书 链接:http://www.jianshu.com/p/29b7eaabd1ba 问题 2.0 filters only work in mustache tags and v-bind. ...
- linux下安装MySQL(mariadb)
MySQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可. 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源 ...
- 【leetcode】1143. Longest Common Subsequence
题目如下: Given two strings text1 and text2, return the length of their longest common subsequence. A su ...
- Task7.手写数字识别
用PyTorch完成手写数字识别 import numpy as np import torch from torch import nn, optim import torch.nn.functio ...