Chapter 7 Integrity(完整性), Views(视图), Security(安全性), and Catalogs(目录)

图片 1 

from Database Design to Physical Form

CREATE TABLE

integrity constraints (完整性约束)

CREATE VIEW

Security

The GRANT & REVOKE statements

Catalogs

Schemas

Introduction

  ->The DBA(数据库管理员) must begin by creating the tables
and constraints(约束) and loading the data. Impose(强加上) integrity constraints on the
columns 。

  ->Then provide views(视图) of the data, virtually
restructuring the physical tables into variant(不同的) table forms, to
simplify access to data.

  ->Provide security(安全性),
so that only authorized users are able to read or update certain
confidential(机密的) data.

  ->The structure of the various tables, views, and other objects
of a database are made available to the DBA through a set of
system-defined tables, called system
catalogs(系统目录).

 

Integrity(完整性)

  ->保证数据完整性(主要指数仍的对与一致性)是数据库管理员的太着重任务之一。

  ->可以经自律(Constraint)、规则(Rule)或者少省值保证数据的完整性,也得当应用程序层保证数据完整性(这是应用程序设计的题材),或经触发器保证。

  ->数据完整性类型包括:实体完整性、参照完整性和用户定义完整性  

    ->实体完整性(Entity Integrity)
:现实世界的实体是只是别的,即其拥有某种唯一性标识。相应地,关系模型中主键应作唯一性标识。因此实体完整性规则规定基本关系之持有主键(Primary
Key)都无可知获得空值(NULL) 。

   
 ->参照完整性(Referential Integrity)
:参照完整性维护表与发明中的相关性,通常用“主键(Primary
Key)/外键(Foreign Key)”保证,其中Foreign
Key可以取NULL值,或获得该参照表中Primary Key或者候选键的取值。

    ->用户定义之完整性(User_defined
Integrity
):针对有平等切实数额的约束原则,由应用环境决定。例如:某个属性具有短省值、某个属性必须取惟一值(UNIQUE)、某个不主属性不可知取NULL值、某个属性的取值范围以0~100里头(CHECK)等等。

  ->数据完整性具体落实包括个别像样

    ->声明性数据完整性
:声明性数据完整性用绳(Constraint)、规则(Rule)
在数据库被提供保证,这是确保完整性的于好方法。它驻留于数据库内,编程简单,开销小,能重新集中管理和保证数据的一致性

    ->过程性数据完整性
:过程性数据完整性用触发器和应用程序代码保管,通常比较复杂、开销比较生,但足以推行更多的事情规则。
通常,过程性数据完整性是声明性数据完整性的互补

           图片 2

                 图片 3

           

-》》》完整性更阐述

     数据颇具千丝万缕的数据类型,用来满足不同的需要。实际应用中之数为富有必然的取值范围,如年龄未小于0,性别就发男女齐。而表中的维系而相连的字段要保持一致和圆。但是,实际操作无法保证插入和去的数据都符合要求,不符合要求的操作极可能会见坏数据的完整性,对数据库的可靠性与运作能力造成威胁。

于是存放数据集的数据库必须使对准数据表和列有所限制及规范,为是SQLServer系统使用相同雨后春笋之章程来维护数据完整性。

多少的完整性:数据的完整性是乘数据库中数据的正确性和一致性,表内的数额不相矛盾,表间的数额不相矛盾,关联性不给损坏。

为者有矣以下实施完整性的路:

1.        对列数据的主宰:数据印证约束、默认值约束、规则。

2.        对列的操纵:主键约束、唯一性约束、标识列。

3.        对表之间、列次关系之主宰:外键约束、数据证明约束、触发器、存储过程。

这些途径得以按种类分为:约束、规则、默认值、触发器、存储过程。

律分为以下几点:

l        主键约束

主键:PRIMARY
KEY,主关键字,用来界定列的数具有唯一性且无呢空,即这同样字段的数码尚未再的数额值且不可知生空值。每个表只能有一个主键,一般用来做标识。

l        外键约束

外键:FOREIGN
KEY,外键用来当点滴单说明底多少里面确立连接,它可以是如出一辙排列或者多列。一个发明得发一个或多单外键。外键对应的是参考完整性,一个表明的外键可以为空值,若无也空值则每一个外键值必须顶另一个表中主键的某值。

l        标识列

好自动编号的列称为标识列或IDENTITY约束。IDENTITY约束就是也那些数值顺序递增的排准备的律,自动完成数值的丰富。每个表只能有一个标识列,标志数据不能够由用户输入,用户只有待填标志种子(标识列的首先个数据)和标志增量(依次增加的累累),系统自动生成数据并填入表。标志种子和标志增量都是无零整数,位数仅次于等于10。默认两者皆为1。

l        唯一性约束

而且让UNIQUE约束,在主键约束中为利用了唯一性,不同之凡一个表中可以产生差不多只如此的绝无仅有性列,却只得发出一个主键。这里的绝无仅有性列可以吧空但是不得不有一行数为空。适用于未是主键但却一如既往要求具有唯一性的字段。

l        非空约束

一个排是否允许有空值,就是此的空和非空约束,即NULL与NOT
NULL约束。NULL就是允许吗空,NOT
NULL就是未容许吗空。NULL不同于0及“”,0及“”都意味着也该行有数据,而NULL是没数量。

l        数据证实约束

而且如做CHECK约束,它通过加条件(逻辑表达式)来检查输入数据是否符合要求,以之来保障数据完整性。

l        默认值约束

与此同时如作DEFAULT约束。将常用的数目值性以为默认值可以省去用户输入的时刻,在非空字段中定义默认值可以抽不当产生。在实质上行使中,默认值还好是结果会转换的函数。

 

规则:

规则是单身的SQL
Server对象,跟表和视图一样是数据库的一部分。规则之用意与CHECK约束类似,用于完成对数据值的检查。它好提到到几近个说明,在数据库被出邮局插入、修改时,验证新数据是否吻合规则,是兑现地域完整性的办法之一。规则以概念时连不曾定义其的检测对象,而是于开立后绑定到对象来检测数据。

始建规则

CREATE RULE 规则名

AS

法表达式

以此的法表达式使用逻辑表达式,表达式中如果产生一个@开头的变量,代表用户的输入数据,可以看成是顶替WHERE后面的列名。

平整以绑定后才可以使用,规则的绑定需要时用系统存储过程sp_bindrule.

USE 数据库名

Go

Sp_bindrule 规则名 表名.字段名

动用存储过程sp_help来查阅规则。

规则的特点(与CHECK的不比)

1)       规则是SQL Server的目标要CHECK是如出一辙栽约束,是表定义的均等有些。

2)       CHECK的预先级要盖规则。

3)       一个排列只能以一个平整可得以应用多独CHECK约束。

4)       规则可运用叫多单列,CHECK约束只对其定义之排列。

5)       规则创建同软好以频繁而CHECK约束需要数创造。

默认值:

CREATE DEFAULT 默认值名

AS 常亮表达式

和创建规则平等,默认值的概念不可知包含列名,需要绑定到列或是其他数据库对象才会采取。一个排只能绑定一个默认值

 

Definition 7.1.2 Column Constraint

       NOT NULL -If NOT NULL appears in a col_constr, then the DEFAULT
clause cannot specify NULL;

       CONSTRAINT-allows us to specify a name for each constraint other
than NOT NULL, so that we can later drop the constraint with an ALTER
Table statement.

       UNIQUE- It can be specified even if NOT NULL is not, and the
column is then constrained so that all non-null values in the table are
unique, but multiple nulls can exist for this column.       

       PRIMARY KEY -A column with the PRIMARY KEY column constraint is
implicitly defined to be NOT NULL and UNIQUE. The UNIQUE clause and
PRIMARY KEY clause cannot both be used for a column, although the
PRIMARY KEY clause and the NOT NULL clause can be used together.

       CHECK

       EXAMPLE

       图片 4

              图片 5

 

                      图片 6

                    触发器

                 

触发器的牵线

 

  1. 1

    触发器(trigger)是独突出的积存过程,它的实施不是出于程序调用,也不是手工启动,而是由事件来点,当对一个说明进行操作(
    insert,delete,
    update)时便会见激活它实施,触发器经常用来提高数据的完整性约束和业务规则等。其实为简单了游说,就是触发器就是一个开关,负责灯的示和灭,你动了,它便展示了,就以此意思。

    图片 7

    END

触发器的归类

 

  1. 1

    DML( 数据操纵语言 Data Manipulation
    Language)触发器:是凭借触发器在数据库被生DML事件频仍用启用。DML事件便指在表或视图中修改数据的insert、update、delete语句。

  2. 2

    DDL(数据定义语言 Data Definition
    Language)触发器:是恃当服务器或数据库被产生(DDL事件频仍将启用。DDL事件便指在表或找引中之create、alter、drop语句也。

  3. 3

    登陆触发器:是依赖当用户登录SQL SERVER实例建立会话时点。

    END

DML触发器介绍

 

  1. 1

    在SQL SERVER
    2008中,DML触发器的落实利用简单个逻辑表DELETED和INSERTED。这有限单说明是起家于数据库服务器的内存中,我们只有只读之权。DELETED和INSERED表的布局以及触发器所于的数据表的结构是千篇一律的。当触发器执行得后,它们啊便会见受活动删除:INSERED表用于存放你在操件insert、update、delete语句后,更新的记录。比如你插入一长条数据,那么就会把这长长的记下插入到INSERTED表:DELETED表用于存放你于操作
    insert、update、delete语句前,你创造触发器表中数据。

  2. 2

    触发器可经数据库被的相关表实现级联更改,可以强制比用CHECK约束定义的约越来越复杂的格。与
    CHECK
    约束不同,触发器可以引用其它表中的排列,例如触发器可以应用另外一个表中的
    SELECT
    比较插入或更新的数码,以及实践外操作。触发器也堪依据数量修改前后的表状态,再行采取对策。一个表中的多独同类触发器(INSERT、UPDATE
    或 DELETE)允许行使多个例外的对策以响应和一个改动报告句。

  3. 3

    并且,虽然触发器功能强大,轻松可靠地贯彻广大繁杂的作用,为什么以如果慎用?过多触发器会招致数据库及应用程序的保安困难,同时针对触发器过分之仗,势必影响数据库的组织,同时增加了保障的繁杂程序。

    END

触发器步骤详解

 

  1. 1

    率先,我们来品尝创建一个触发器,要求就是以AddTable这个表上创立一个Update触发器,语句为:

    create trigger mytrigger on AddTable
    for update

    图片 8

  2. 2

    下一场就是是sql语句的一对了,主要是设来update以后,要求触发器触发一个哟操作。这里的意就是是一旦起update了,触发器就会硌发输出:the
    table was updated!—By 小猪吧没法。

    图片 9

  3. 3

    连片下去我们来以AddTable表中之多少实施一个移的操作:

    图片 10

  4. 4

    实施后,我们会发觉,触发器被硌,输出了我们安好之文书:

    图片 11

  5. 5

    那触发器创建以后也,它便正式开始工作了,这时候我们要转移触发器的话,只需要拿启幕之create创建变为alter,然后修改逻辑即可:

    图片 12

  6. 6

    比方我们纪念查有一个触发器的情,直接运行:exec sp_helptext
    [触发器名]

    图片 13

  7. 7

    要自身思询问时数据库中生出稍许触发器,以福利自己进行数据库维护,只待周转:
    select * from sysobjects where xtype=’TR’

    图片 14

  8. 8

    咱们要用关闭或被触发器的话,只需要周转:

    disable trigger [触发器名] on database –禁用触发器

    enable trigger [触发器名] on database –开启触发器

    图片 15

  9. 9

    这就是说触发器的效用就颇,但是要是触及,恢复起来就比麻烦了,那咱们就算需针对数码进行保护,这里就是得用到rollback数据回滚~

    图片 16

  10. 10

    第九步的意思就是是查询AddTable表,如果中有TableName=newTable的,数据就是回滚,触发器中止,那我们又开展一下测试,对AddTable表进行变更,发现,触发update触发器之后,因为起数据保护,触发器中止:图片 17

    图片 18

  11.  

 图片 19

图片 20

图片 21

图片 22

图片 23

图片 24

图片 25

图片 26

图片 27

图片 28

图片 29

图片 30

图片 31

 

 图片 32

图片 33

图片 34

图片 35

图片 36

图片 37

图片 38

图片 39

图片 40

图片 41

图片 42

图片 43

图片 44

图片 45

图片 46

图片 47

图片 48

图片 49

图片 50

图片 51

图片 52

图片 53

图片 54

图片 55

图片 56

图片 57

图片 58

图片 59

 

相关文章