数据库原理B实验报告完整版4-6

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验四完整性日期 2011-4-6

一实验目的

1. 熟悉通过SQL对数据进行完整性控制。

2. 深入理解数据库系统的完整性概念。

二、实验原理

为维护数据库的完整性,DBMS必须:

1.提供定义完整性约束条件的机制

2.提供完整性检查的方法

3.违约处理

Create table 语法中包含了对完整性的定义。

CREATE TABLE

[ database_name.[ owner ] .| owner.] table_name

( { < column_definition >

| column_name AS computed_column_expression

| < table_constraint > ::= [ CONSTRAINT constraint_name ] } | [ { PRIMARY KEY | UNIQUE } [ ,...n ]

)

[ ON { filegroup | DEFAULT } ]

[ TEXTIMAGE_ON { filegroup | DEFAULT } ]

< column_definition > ::= { column_name data_type }

[ COLLATE < collation_name > ]

[ [ DEFAULT constant_expression ]

| [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] ]

[ ROWGUIDCOL]

[ < column_constraint > ] [ ...n ]

< column_constraint > ::= [ CONSTRAINT constraint_name ]

{ [ NULL | NOT NULL ]

| [ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ]

[ WITH FILLFACTOR = fillfactor ]

[ON {filegroup | DEFAULT} ] ]

]

| [ [ FOREIGN KEY ]

REFERENCES ref_table [ ( ref_column ) ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

[ NOT FOR REPLICATION ]

]

| CHECK [ NOT FOR REPLICATION ]

( logical_expression )

}

< table_constraint > ::= [ CONSTRAINT constraint_name ]

{ [ { PRIMARY KEY | UNIQUE }

[ CLUSTERED | NONCLUSTERED ]

{ ( column [ ASC | DESC ] [ ,...n ] ) }

[ WITH FILLFACTOR = fillfactor ]

[ ON { filegroup | DEFAULT } ]

]

| FOREIGN KEY

[ ( column [ ,...n ] ) ]

REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]

[ ON DELETE { CASCADE | NO ACTION } ]

[ ON UPDATE { CASCADE | NO ACTION } ]

[ NOT FOR REPLICATION ]

| CHECK [ NOT FOR REPLICATION ]

( search_conditions )

}

三、实验仪器和设备

1. 计算机

2. SQL Server 2000

四、预习要求

复习完整性相关的SQL语句的基本语法。

五、实验内容及步骤

1. 实体完整性

定义表的主码

关系模型的实体完整性在 CREATE TABLE 中用 PRIMARY KEY 定义。定义主码的方法分为定义为列级约束条件和定义为表级约束条件两种。

[例 4-1]定义表 Student,并将其中的 Sno 属性定义为主码。

CREATE TABLE STUDENT(

SNO

CHAR(7) PRIMARY KEY,

SNAME CHAR(8) NOT NULL,

SSEX CHAR(2),

SAGE SMALLINT,

SDEPT CHAR(20));

[例 4-2]定义表 SC,将其中的属性 Sno,Cno 定义为主码。

对于多个属性构成的码,只能够将其定义为表级约束条件,而无法用列级约束条件来实现。

CREATE TABLE SC(

CNO CHAR(4) NOT NULL,

GRADE SMALLINT,

PRIMARY KEY (SNO,CNO));

2. 参照完整性

定义表的外码

关系模型的参照完整性是在 CREATE TABLE 中用 FOREIGN KEY 语句来定义的,并用REFERENCES 来指明外码参照的是哪些表的主码。

定义表 SC,其中 Sno 参照表 Student 的主码 Sno,Cno 参照表 Course 的主码 Cno。

CREATE TABLE SC(

SNO CHAR(7) NOT NULL,

CNO CHAR(4) NOT NULL,

GRADE SMALLINT,

PRIMARY KEY (SNO,CNO),

FOREIGN KEY (SNO) REFERENCES STUDENT(SNO),

FOREIGN KEY (CNO) REFERENCES COURSE(CNO));

3. 用户定义完整性

用户定义的属性上的约束条件

[例 6-1]列值非空。在定义 SC 表时,Sno、Cno 和 Grade 属性都不允许取空值。在不特别声明的情况下,非码属性的值是允许取空值的。

CREATE TABLE SC(

SNO CHAR(7) NOT NULL, /*列值非空的约束 NOT NULL*/

CNO CHAR(4) NOT NULL,

GRADE SMALLINT NOT NULL);

[例 6-2]列值唯一。建立部门表 DEPT,要求部门名称 Dname 取值唯一,部门编号 Deptno 属性为主码。

CREATE TABLE DEPT(

DEPTNO NUMERIC(7) PRIMARY KEY,

DNAME VARCHAR(9) UNIQUE, /*UNIQUE 约束要求 Dname 取值唯一*/

LOCATION VARCHAR(10));

[例 6-3]CHECK 短语指定列值应该满足的条件。定义表 Student,属性Ssex 的值只允许取“男”或“女”;定义表 SC,属性 Grade 的值定义在 0-100 之间。

CREATE TABLE STUDENT(

SNO

CHAR(7) PRIMARY KEY,

SNAME CHAR(8) NOT NULL,

SSEX CHAR(2) CHECK(SSEX IN(‘男’,’女’)), /*CHECK 语句约束条件*/

SAGE SMALLINT,

SDEPT CHAR(20));

CREATE TABLE SC(

SNO CHAR(7) NOT NULL,

相关文档
最新文档