CREATE DATABASE 教学管理
GO
USE 教学管理
GO
IF EXISTS(SELECT * FROM sysobjects WHERE name='选课表' AND xtype='U')
  DROP TABLE 选课表
IF EXISTS(SELECT * FROM sysobjects WHERE name='开课表' AND xtype='U')
  DROP TABLE 开课表
IF EXISTS(SELECT * FROM sysobjects WHERE name='学生表' AND xtype='U')
  DROP TABLE 学生表
IF EXISTS(SELECT * FROM sysobjects WHERE name='教师表' AND xtype='U')
  DROP TABLE 教师表
IF EXISTS(SELECT * FROM sysobjects WHERE name='课程表' AND xtype='U')
  DROP TABLE 课程表
CREATE TABLE 学生表
(
  学号 CHAR(7) NOT NULL,
  身份证号 CHAR(18) NOT NULL,
  姓名 CHAR(8) NOT NULL,
  性别 CHAR(2) DEFAULT '男',
  移动电话 CHAR(11),
  籍贯 VARCHAR(10),
  专业 VARCHAR(20) NOT NULL,
  所在院系 VARCHAR(20) NOT NULL,
  累计学分 INT,
  CONSTRAINT PK_学生表_学号  PRIMARY KEY(学号),
  CONSTRAINT CK_学生表_学号  CHECK(学号 LIKE 'S[0-9][0-9][0-9][0-9][0-9][0-9]')
)
CREATE TABLE 课程表
(
  课号 CHAR(6) NOT NULL,
  课名 VARCHAR(30) NOT NULL,
  学分 INT CHECK(学分>=1 and 学分<=5),
  教材名称 VARCHAR(30),
  编著者 CHAR(8),
  出版社 VARCHAR(20),
  版号 VARCHAR(20),
  定价 money,
  CONSTRAINT PK_课程表_课号  PRIMARY KEY(课号),
  CONSTRAINT CK_课程表_课号  CHECK(课号 LIKE 'C[0-9][0-9][0-9][0-9][0-9]')
)
CREATE TABLE 教师表
(
  工号 CHAR(6) NOT NULL,
  身份证号 CHAR(18) NOT NULL,
  姓名 CHAR(8) NOT NULL,
  性别 CHAR(2) DEFAULT '男',
  移动电话 CHAR(11),
  籍贯 VARCHAR(10),
  所在院系 VARCHAR(20) NOT NULL,
  职称 CHAR(6),
  负责人 CHAR(6),
  CONSTRAINT PK_教师表_工号  PRIMARY KEY(工号),
  CONSTRAINT CK_教师表_工号 CHECK(工号 LIKE 'T[0-9][0-9][0-9][0-9][0-9]')
)
CREATE TABLE 开课表
(
  开课号 CHAR(6) NOT NULL,
  课号 CHAR(6) NOT NULL,
  工号 CHAR(6) NOT NULL,
  开课地点 CHAR(6),
  开课学年 CHAR(9),
  开课学期 INT ,
  开课周数 INT DEFAULT 17,
  开课时间 VARCHAR(20),
  限选人数 INT,
  已选人数 INT,
  CONSTRAINT PK_开课表_开课号 PRIMARY KEY(开课号),
  CONSTRAINT FK_开课表_工号 FOREIGN KEY(工号) REFERENCES 教师表(工号)
  ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT FK_开课表_课号 FOREIGN KEY(课号) REFERENCES 课程表(课号)
  ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT CK_开课表_开课号 CHECK(开课号 LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]'),
  CONSTRAINT CK_开课表_工号 CHECK(工号 LIKE 'T[0-9][0-9][0-9][0-9][0-9]'),
  CONSTRAINT CK_开课表_课号 CHECK(课号 LIKE 'C[0-9][0-9][0-9][0-9][0-9]')
)
CREATE TABLE 选课表
(
  学号 CHAR(7) NOT NULL,
  开课号 CHAR(6) NOT NULL,
  成绩 INT CHECK(成绩>=0 and 成绩<=100),
  CONSTRAINT PK_选课表_学号_开课号 PRIMARY KEY(学号,开课号),
  CONSTRAINT FK_选课表_学号 FOREIGN KEY(学号) REFERENCES 学生表(学号)
  ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT FK_选课表_开课号 FOREIGN KEY(开课号) REFERENCES 开课表(开课号)
  ON UPDATE CASCADE ON DELETE CASCADE,
  CONSTRAINT CK_选课表_学号 CHECK(学号 LIKE 'S[0-9][0-9][0-9][0-9][0-9][0-9]'),
  CONSTRAINT CK_选课表_开课号 CHECK(开课号 LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]')
)
DECLARE @tb_exist INTdrop table if exists user
SET @tb_exist=0
IF EXISTS(SELECT * FROM sysobjects WHERE name='选课表' AND xtype='U')
  SET @tb_exist=@tb_exist | 1
IF EXISTS(SELECT * FROM sysobjects WHERE name='开课表' AND xtype='U')
  SET @tb_exist=@tb_exist | 2
IF EXISTS(SELECT * FROM sysobjects WHERE name='学生表' AND xtype='U')
  SET @tb_exist=@tb_exist | 4
IF EXISTS(SELECT * FROM sysobjects WHERE name='课程表' AND xtype='U')
  SET @tb_exist=@tb_exist | 8
IF EXISTS(SELECT * FROM sysobjects WHERE name='教师表' AND xtype='U')
  SET @tb_exist=@tb_exist | 16
IF @tb_exist !=31 BEGIN  --有一些表不存在
  PRINT '由于下列关系表不存在,因此插入元组失败!'
  IF (@tb_exist & 1) = 0 PRINT '选课表'
  IF (@tb_exist & 2) = 0 PRINT '开课表'
  IF (@tb_exist & 4) = 0 PRINT '学生表'
  IF (@tb_exist & 8) = 0 PRINT '课程表'
  IF (@tb_exist & 16) = 0 PRINT '教师表'
END
ELSE BEGIN  --五张表都存在
  IF EXISTS(SELECT * FROM 选课表) DELETE 选课表
  IF EXISTS(SELECT * FROM 开课表) DELETE 开课表
  IF EXISTS(SELECT * FROM 学生表) DELETE 学生表
  IF EXISTS(SELECT * FROM 课程表) DELETE 课程表
  IF EXISTS(SELECT * FROM 教师表) DELETE 教师表
  INSERT INTO 学生表 VALUES('S060101',  '******19880526***', '王春兰',
'女', '135***11', '上海', '计算机', '信电学院', 2)
  INSERT INTO 学生表 VALUES('S060102',  '******19891001***', '张芬',
'女', '131***11', '宁波', '计算机', '信电学院', 2)
  INSERT INTO 学生表 VALUES('S060103',  '******19871021***', '',
'男', '139***12', '温州', '计算机', '信电学院', 2)
  INSERT INTO 学生表 VALUES('S060109',  '******19880511***', '陈莉',
'女', NULL, '西安', '计算机', '信电学院', NULL)
  INSERT INTO 学生表 VALUES('S060110',  '******19880226***', '赵山',
'男', '130***22', '太原', '计算机', '信电学院', 2)
  INSERT INTO 学生表 VALUES('S060201',  '******19880606***', '胡汉民',
'男', '135***22', '杭州', '信息管理', '信电学院', NULL)