C包子

数据库实验二

使用商用数据库 SQL Server 或 MySQL 实现教务系统的数据库设计

实验要求:

  1. 学习使用商用数据库SQL Server 或MySQL

  2. 基于实验一的概念模型和逻辑结构,实现数据库分析设计

  3. 理解和掌握关系数据库存取技术,关系数据操作,完整性约束机制

实验内容:   

  1. 创建教务系统各数据库表,包括:Student, Course, SC等。设置主键和外键,以及用户定义的完整性约束条件。
  2. 输入数据,体验实体完整性,参照完整性,以及用户定义的完整性约束。
  3. 简单的数据浏览,数据增删改。

实验过程:

1. 安装 SQL Server 2016

2. 安装Microsoft SQL Server Management Studio (SSMS)

3. 创建数据库和表

选择数据库,右键新建查询,输入下面语句:
CREATE TABLE Department --系表

(

Dno CHAR(20) PRIMARY KEY,

Dname CHAR(20) UNIQUE,

Dean CHAR(10),

Classnum INT,

Crnum INT,

Adderss CHAR(20)

);

CREATE TABLE Classroom --教研室表

(

Crno CHAR(20) PRIMARY KEY,

Crname CHAR(10) UNIQUE,

Dno CHAR(20),

Adderss CHAR(20),

FOREIGN KEY (Dno) REFERENCES Department (Dno)

);

CREATE TABLE Class --班级表

(

Classno CHAR(20) PRIMARY KEY,

Classname CHAR(10) UNIQUE,

Dno CHAR(20),

Stunum INT,

FOREIGN KEY (Dno) REFERENCES Department (Dno)

);

CREATE TABLE Teacher --教员表

(

Tno CHAR(10) PRIMARY KEY,

Tname CHAR(10) UNIQUE,

Title CHAR(10),

TSex CHAR(4),

Crno CHAR(20),

FOREIGN KEY (Crno) REFERENCES Classroom (Crno)

);

CREATE TABLE Student --学生表

(

Sno CHAR(10) PRIMARY KEY,

Sname CHAR(10) UNIQUE,

Ssex CHAR(4),

Classno CHAR(20),

Tno CHAR(10),

FOREIGN KEY (Classno) REFERENCES Class (Classno),

FOREIGN KEY (Tno) REFERENCES Teacher (Tno)

);

CREATE TABLE Course --课程表

(

Cno CHAR(10) PRIMARY KEY,

Cname CHAR(20) UNIQUE,

Credit INT,

Chour INT

);

CREATE TABLE SC --选修表�ޱ�

(

Sno CHAR(10),

Cno CHAR(10),

Mark INT,

PRIMARY KEY(Sno,Cno),

FOREIGN KEY (Sno) REFERENCES Student (Sno),

FOREIGN KEY (Cno) REFERENCES Course (Cno)

);

4. 直接使用SSMS编辑各表数据

选中某一表,右键选择编辑前200行

系表:

班级表:

教研室表:

学生表:

选修表:

课程表:

5. 导出数据库数据字典

选择数据库,右键新建查询,语句如下:

SELECT

(case when a.colorder=1 then d.name else '' end)表名,

a. colorder 字段序号,  

a.name 字段名,

(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) 标识,

(case when (SELECT count(*)

FROM sysobjects

WHERE (name in

(SELECT name

FROM sysindexes

WHERE (id = a.id) AND (indid in

(SELECT indid

FROM sysindexkeys

WHERE (id = a.id) AND (colid in

(SELECT colid

FROM syscolumns

WHERE (id = a.id) AND (name = a.name))))))) AND

(xtype = 'PK'))>0 then '√' else '' end) 主键,

b.name 类型,

a.length 占用字节数,

COLUMNPROPERTY(a.id,a.name,'PRECISION') as 长度,

isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小数位数,

(case when a.isnullable=1 then '√'else '' end) 允许空,

isnull(e.text,'') 默认值,

isnull(g.[value],'') AS 字段说明

FROM syscolumns a left join systypes b

on a.xtype=b.xusertype

inner join sysobjects d

on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join syscomments e

on a.cdefault=e.id

left join sys.extended_properties g

on a.id=g.major_id AND a.colid = g.major_id

order by a.id,a.colorder

得到结果:

数据关系图如图所示:

6. SQL语句编辑数据:

  • 添加:

INSERT INTO Department values ('D4','张建','海技系','14','12','松岭路')

新增了一条记录:

 

  • 删除:

DELETE FROM SC WHERE Sno = 'S1'

此处记录(‘S1’,’C1’,’79’)被删除

  • 修改:

UPDATE Student set Ssex = '男' WHERE Sno = 'S1'

Sno为S1的记录性别修改为了‘男’

心得总结:

刚开始在使用SSMS编辑数据的时候,总忘记各表中的关系,学生表还没定义就编辑选修表,报了不少次错;由此看来,整体设计很重要,像编程之前的流程图一样,在建立各表之前也应该事先理清楚这些表之间的关系,这样数据库的思路更清晰。

经过这次实验,感觉SQL语句确实非常方便,而且操作很简单,很好上手,效率也比较高。

 

posted on 2020-04-17 18:37  C包子  阅读(1076)  评论(0编辑  收藏  举报