数据库实验—DDL

  • 使用SQL语句,在D盘的Data文件夹下,创建一个名为jxdb+学号后2位的教学管理数据库(如:学号后两位为01,则数据库名为jxdb01)。把教学管理数据库文件增长参数设置为4MB,文件最大大小参数设置为20MB,存储文件的文件名可自定义,其它参数均使用默认值。

    • name为存储文件的文件名
    • filename为真实的物理地址
    • 记得加on关键字
    	create database jxdb29
    	on
    	(
    		name='jxdb29',
    		filename='D:\Data\jxdb29.mdf',
    		maxsize=20MB,
    		filegrowth=4MB
    	)
    
  • 使用SQL语句,在教学管理数据库中,创建Department学院基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    	create table Department(
    		Dno char(2) primary key,
    		Dname varchar(15) not null
    	)
    
  • 使用SQL语句,在教学管理数据库中,创建Major专业基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    	create table Major(
    		Mno char(4) primary key,
    		Mname varchar(15) not null,
    		Dno char(2)
    	)
    
  • 使用SQL语句,在教学管理数据库中,创建Students学生基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    	create table Students(
    		Sno char(10) primary key,
    		Sname varchar(4) no null,
    		Sgender nchar(1),
    		Sage int,
    		Dno char(2),
    		Sclass char(8),
    		Mno char(4)
    	)
    
  • 使用SQL语句,在教学管理数据库中,创建Teachers教师基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    create table Teachers(
    	Tno char(4) primary key,
    	Tname varchar(4) not null,
    	Tgender nchar(1),
    	Tbirth smalldatetime,
    	Dno char(2)
    )
    
  • 使用SQL语句,在教学管理数据库中,创建Courses课程基本表,只定义属性和表的主键。
    表结构如下: 在这里插入图片描述

    	create table Courses(
    		Cno char(8) primary key,
    		Cname varchar(20) not null,
    		Chours int,
    		Ccredit int
    	)
    
  • 使用SQL语句,在教学管理数据库中,创建Reports选课基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    create table Reports(
    	Sno char(10),
    	Cno char(7),
    	Racademicyear int,
    	Rterm int,
    	Grade int,
    	primary key(Sno,Cno)
    )
    
  • 使用SQL语句,在教学管理数据库中,创建Tutors授课基本表,只定义属性和表的主键。
    表结构如下:
    在这里插入图片描述

    create table Tutors(
    	Tno char(4) not null,
    	Cno char(8) not null,
    	Tacademicyear int,
    	Tterm int,
    	Sclass char(8)
    )
    
  • 使用SQL语句修改Department表结构:
    增加“学院院长”字段Dheader,类型为CHAR(4)。

    alter table Department add Dheader char(4)
    
  • 使用SQL语句修改Students表结构:
    (1)将“年龄”字段Sage改为“出生日期”字段Sbirth,类型为SMALLDATETIME;

    alter table Students drop column Sage
    alter table Students add Sbirth smalldatetime
    

    (2)增加一个“生源地”字段Snative,类型为NVARCHAR(20)

    alter table Students add Snative varchar(20)
    
  • 使用SQL语句修改Courses表结构:
    增加“先序课程编号”字段Pre_Cno,类型为CHAR(8)

    	alter table Courses add Pre_Cno char(8)
    
  • 使用SQL语句修改Reports表结构:
    将“成绩”字段Grade的类型改为DECIMAL(4,1)

    alter table Reports alter column Grade decimal(4,1)
    
  • 使用SQL语句修改Tutors表结构
    增加以下字段内容 :
    “课程评分”(Tevaluation) DECIMAL(4,2),
    “学生评价”(Tmemo) NVARCHAR(150)

    alter table Tutors add Tevaluation decimal(4,2)
    alter table Tmemo varchar(150)
    
  • 使用SQL语句,对各基本表中的外键进行声明,包括:
    (1)学院表Department:Dheader

    alter table Department 
    add constraint FK_Dheader 
    foreign key(Dheader) references Teachers
    

    (2)专业表Major:Dno

    alter table Major 
    add constraint FK_Dno 
    foreign key(Dno) references Department
    

    (3)学生表Students:Mno

    alter table Students
    add constraint FK_Mno
    foreign key(Mno) references Major
    

    (4)教师表Teachers:Dno

    alter table Teachers
    add constraint FK_Dno
    foreign key(Dno) references Department
    

    (5)选课表Reports:Sno, Cno

    alter table Reports
    add constraint FK_Sno
    foreign key(Sno) references Students
    
    alter table Reports
    add constraint FK_Cno
    foreign key(Cno) references Courses
    

    (6)课程表Courses:Pre_Cno

    alter table Courses
    add constraint FK_Pre_Cno
    foreign key(Pre_Cno) references Courses(Cno) 
    -- 因为同一个表,不指名参照Cno可能会导致参照到Pre_Cno,因为外键一般都是和另一表主键同名
    

    (7)授课表Tutors:Tno, Cno

    alter table Tutors
    add constraint FK_Tno
    foreign key(Tno) references Teachers
    
    alter table Courses
    add constraint FK_Cno
    foreign key(Cno) references Courses
    
  • 使用SQL语句,创建各基本表的索引,包括:
    (1)在表Students的Mno列上按降序创建索引IDX_Stu_Mno

    create index IDX_Stu_Mno on Students(Mno desc)
    

    (2)在表Courses的Cname列上按升序创建唯一索引IDX_Cou_Cname

    create unique index IDX_Cou_Cname on Courses(Cname asc)
    

    (3)在表Reports的学年列上按降序,同时在学期列上按升序创建索引

    create index IDX_Rep_Year_Term on Reports(Racademicyear desc, Rterm asc)
    

    (4)在表Teachers的职称列上按升序,同时在出生日期列上按降序创建索引

    create index  IDX_Prof_Birth ON Teachers(Dno asc, Tbirth desc)
    

    (5)在表Tutors的Tno列上按升序创建索引

    create index IDX_Tno ON Tutors(Tno asc)
    

    (6)在表Tutors的Sclass列上按降序创建索引

    create index IDX_Sclass ON Tutors(Sclass desc)
    
  • 用SQL语句删除表Teachers中在职称列和出生日期列上创建的索引

    drop index IDX_Prof_Birth on Teachers
    
posted @ 2023-06-29 00:09  竹等寒  阅读(17)  评论(0编辑  收藏  举报  来源