添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
悲伤的手电筒  ·  Chapter 7 ...·  5 天前    · 
仗义的大象  ·  m属性是什么意思 ...·  6 月前    · 
大方的稀饭  ·  linux ...·  8 月前    · 
咆哮的木瓜  ·  超赞!EMNLP2023 | ...·  1 年前    · 

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) 在数据库中提供保证,这是保证完整性的较好方法。它驻留在数据库内,编程简单,开销小,能更集中管理和保证数据的一致性

->过程性数据完整性 :过程性数据完整性用触发器和应用程序代码保证,通常较为复杂、开销较大,但可以执行更多的业务规则。 通常,过程性数据完整性是声明性数据完整性的补充

-》》》 完整性再阐述

数据有着复杂的数据类型,用来满足不同的需求。实际应用中的数据也有着一定的取值范围,如年龄不小于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 规则名

条件表达式

在这里的条件表达式使用逻辑表达式,表达式中要有一个@开头的变量,代表用户的输入数据,可以看做是代替WHERE后面的列名。

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

USE 数据库名

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

与此同时,虽然触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用?过多触发器会造成数据库及应用程序的维护困难,同时对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序。