SQLServer:表结构、主码、外码、完整性约束和课程作业

表和完整性约束

  • 表的定义以及完整性约束的定义
    • 定义列
    • 定义计算列
    • 定义主关键字(实体完整性约束)
    • 定义外部关键字(参照完整性约束)
      • 删除约束 、更新约束
    • 定义普通约束(用户定义完整性)
    • 表级约束

主码

主码(主关键字,PRIMARY KEY__PK),在码中选择的一个代表,被定义为主码
主码的特点:
1、主码value不得为空
2、构成主码的每个字段不得重复
主属性是构成码的属性
主码属性是构成主码的属性

外码

外码(Foreign key__FK),设有关系表R和W,R中的某个字段FK与W中的主码PK对应,则FK成为W的外码。
外码定义了两个表之间的约束关系,W为主表(被参照表),R为从表(参照表)。

范式描述

1.关键字
2.语法概念
3.元语言符号:[] {} |
4.() 实际符号

表的定义

  • 定义表时,约束条件(完整性约束)分为两种:
    • 对某个字段的约束,成为字段的完整性约束
    • 对整个表的约束,被称为整个表的完整性约束

字段的完整性约束也可以定义成表的完整性约束

  • 一个表由若干列构成,在SQL Server中可以
    • 定义实列(简称列,column_definiton)
    • 定义虚列(即计算列,computed_column_definition)

列的定义

UNIQUE :唯一
若一个字段定义了UNIQUE字段,该字段值不允许重复,但可以为多个null

CHECK
如:CHECK(grade>=0 AND grade<=100)

DEFAULT
设置默认值

ON DELETE CASCADE / ON UPDATE CASCADE
当被参照记录即被参照表被删除/修改时级联删除参照表即从表的记录。

修改表结构

  • 修改表结构
    • 修改列定义
    • 增加新列(含计算列)
    • 增加表级约束
    • 删除列
    • 删除约束

ALTER TABLE

  • 增加字段
  • 删除字段
  • 修改字段类型
  • 增加约束
  • 删除约束

课程作业:

USE 学校管理
GO
CREATE SCHEMA 学校
GO
CREATE TABLE 学校.院系(
编号 INT PRIMARY KEY,
名称 VARCHAR(20) NOT NULL UNIQUE,
负责人 VARCHAR(10),
办公地点 VARCHAR(20)
)
GO
CREATE TABLE 学校.学生(
学号 VARCHAR(8) PRIMARY KEY,
姓名 VARCHAR(10) NOT NULL,
院系 INT FOREIGN KEY REFERENCES 学校.院系(编号),
性别 VARCHAR(2) CHECK (性别 IN ('男' ,'女') ),
生源 VARCHAR(6),
状态 VARCHAR(4) CHECK (状态 IN ('正常','留级','休学','退学') )
)
GO
CREATE TABLE 学校.教师(
教师编号 VARCHAR(8) PRIMARY KEY,
姓名 VARCHAR(10) NOT NULL,
性别 VARCHAR(2) CHECK(性别 IN ('男','女')),
院系 INT FOREIGN KEY REFERENCES 学校.院系(编号),
专业 VARCHAR(10),
职称	VARCHAR(6) CHECK(职称 IN('教授','副教授','讲师','助教'))
)
GO
CREATE TABLE 学校.课程(
课程编号 VARCHAR(8) PRIMARY KEY,
课程名称 VARCHAR(20) NOT NULL,
责任教师 VARCHAR(8) FOREIGN KEY REFERENCES 学校.教师(教师编号),
学时 INT NOT NULL,
课程性质 VARCHAR(10) CHECK(课程性质 IN ('公共基础','专业基础','专业选修','任意选修'))
)
GO
CREATE TABLE 学校.选课(
学号 VARCHAR(8) FOREIGN KEY REFERENCES 学校.学生(学号),
课程编号 VARCHAR(8) FOREIGN KEY REFERENCES 学校.课程(课程编号),
考试成绩 INT CHECK(考试成绩>=0 AND 考试成绩<=100) DEFAULT NULL
)

ALTER TABLE 学校.学生
ADD 平均成绩 INT DEFAULT NULL

ALTER TABLE 学校.课程
DROP COLUMN 学时

ALTER TABLE 学校.课程
ADD 学时 INT NOT NULL CHECK(学时%8=0)

ALTER TABLE 学校.院系
ALTER COLUMN 名称 VARCHAR(30)

ALTER TABLE 学校.教师
ADD 工资 NUMERIC(7,2)

你可能感兴趣的:(SQL)