电子科技大学数据库第四次实验

一、实验目的

1、学习分析系统需求,了解数据库设计方法

2、学习并掌握 E-R 图绘图方法

3、了解数据库设计及实现过程

二、实验内容

       分析学生基本信息管理系统需求,画出 E-R 图,设计及实现数据库,并存 入自己的信息。

1. 系统需求

以本校为例,目前要新建一个学生基本信息管理系统,具体情况如下:

(1)学生入学时会记录身份信息,包括姓名、性别、出生日期、民族、身 份证号、学号、政治面貌、手机号码等相关信息。

(2)学校有多个学院和多个校区。

学生可因转专业而更换所属学院,但其入学时分配的学号不变。

学生分布在所属学院所在的校区,并且可能会根据情况进行调整。例如某学 年计算机学院在校区 1,第二年可能调整到校区 3。

(3)每个校区有多栋宿舍楼,宿舍楼的类别有博士生公寓、硕士生公寓和 本科生公寓。

系统需要完整记录学生的基本信息、当前所在学院、所在校区、所住宿舍楼 寝室,以及其他可能需要的信息。

2. 设计 E-R

根据系统需求,用 Visio 画出所有的 E-R 图。

3. 设计并创建数据库表

完整设计出学生基本信息管理系统的所有数据库表及相应的字段。

使用 SQL Developer 将表创建在数据库中,为这些表建立关系模型并截图记 录。

4. 存入个人信息

将自己的信息存储在相应的数据库表中,并截图记录存储的表数据。

三、实验软件

Oracle数据库、 SQL Developer、Visio

四、实验步骤及数据记录

1、系统需求

以本校为例,目前要新建一个学生基本信息管理系统,具体情况如下:

(1)学生入学时会记录身份信息,包括姓名、性别、出生日期、民族、身份证号、学号、政治面貌、手机号码等相关信息。

(2)学校有多个学院和多个校区。

学生可因转专业而更换所属学院,但其入学时分配的学号不变。

学生分布在所属学院所在的校区,并且可能会根据情况进行调整。例如某学年计算机学院在校区1,第二年可能调整到校区3。

(3)每个校区有多栋宿舍楼,宿舍楼的类别有博士生公寓、硕士生公寓和本科生公寓。

系统需要完整记录学生的基本信息、当前所在学院、所在校区、所住宿舍楼寝室,以及其他可能需要的信息。

2、根据系统需求,用 Visio 画出所有的 E-R 图。

3、设计并创建数据库表

完整设计出学生基本信息管理系统的所有数据库表及相应的字段。

使用 SQL Developer 将表创建在数据库中,为这些表建立关系模型并截图记 录。

4、存入个人信息

将自己的信息存储在相应的数据库表中,并截图记录存储的表数据(部分图涉及隐私,就略了)。

 

 

 

五、实验结论及思考题

1、请举例说明本次设计中的数据库表如何来满足数据库三大范式。

答:

第一范式:将学生所处的寝室分为楼栋号、层数、房间编号而不是直接使用门牌号来记录。

第二范式:未将学院信息与校区信息直接作为一张表,而是分为两个实体,以防止部分以来的形成。

第三范式:在进行模式的合并时仅将学生学院关系集、学生宿舍关系集与学生实体集进行合并,未将学生校区关系集进行合并,若加入学生校区关系集则会在新生成的关系集内部出现传递依赖。

2、用一张视图来展示学生的基本信息、所在学院、所住寝室、所在校区的情况。 请写出创建视图的代码,以及查询该视图信息的 SELECT 命令和结果截图。

 

代码如下

CREATE VIEW STU_INFO AS

SELECT STUDENT1.SNO,SNAME,SGENDER,SBIRTH,SNATION,SIDCARD,SPOLIT,SPHONE,COLLEGE1.COLLEGENAME,CAMPUS1.CAMPUSNAME

FROM STUDENT1,COLLEGE1,CAMPUS1;

SELECT * FROM STU_INFO WHERE SNO='2016010902012';

六、总结及心得体会

      总结:

  1. 首先研究好设计需求,然后根据逻辑关系和实际需要,建立合适的ER关系图,然后再是编写SQL代码,最终插入查询数据,满足数据库服务需要。
  2. 一个好的ER模型图,有利于提高查询的效率。
  3. 数据库的基本轮廓已经大致掌握,以后根据需要来不断深入实际操作学习。

       心得体会:一个优秀的数据库设计需要考虑到各种因素,了解各个事物之间的内部联系,充分考虑到各种可能发生的情况,避免异常的出现,降低数据冗余,要求设计者在设计的过程中十分仔细,谨小慎微。

  

七、对本实验过程及方法、手段的改进建议

       本实验的系统需求不够仔细,对一些细节有较大的缺失。只能做到简单的实际目标,并没有做很大的扩展。

 

 

 

 

 

 

 

 

 

 

 

 

 

源代码:

CREATE TABLE CAMPUS1

(

    CAMPUSNAME VARCHAR2(20) NOT NULL,

    CAMPUSLOCAL VARCHAR2(20) NOT NULL,

    CONSTRAINT CAMPUS1_PK PRIMARY KEY(CAMPUSNAME)

);

CREATE TABLE COLLEGE1

(

    COLLEGENAME VARCHAR2(20) NOT NULL,

    COLLEGECAMPUS VARCHAR2(20) NOT NULL,

    CONSTRAINT COLLEGE1_PK PRIMARY KEY(COLLEGENAME),

    CONSTRAINT COLLEGE1_FK FOREIGN KEY(COLLEGECAMPUS) REFERENCES CAMPUS1(CAMPUSNAME)

);

CREATE TABLE BUILDING1

(

    BUILDNAME VARCHAR2(20) NOT NULL,

    BUILDCAMPUS VARCHAR2(20) NOT NULL,

    CONSTRAINT BUILDING1_PK PRIMARY KEY(BUILDNAME),

    CONSTRAINT BUILDING1_FK FOREIGN KEY(BUILDCAMPUS) REFERENCES CAMPUS1(CAMPUSNAME)

);

CREATE TABLE ROOM1

(

    ROOMID INT NOT NULL,

    ROOMBUILD VARCHAR2(20) NOT NULL,

    CONSTRAINT ROOM1_PK PRIMARY KEY(ROOMID),

    CONSTRAINT ROOM1_FK FOREIGN KEY(ROOMBUILD) REFERENCES BUILDING1(BUILDNAME)

);

CREATE TABLE MAJOR1

(

    MAJORNAME VARCHAR2(20) NOT NULL,

    MAJORCOLLEGE VARCHAR2(20) NOT NULL,

    CONSTRAINT MAJOR1_PK PRIMARY KEY(MAJORNAME),

    CONSTRAINT MAJOR1_FK FOREIGN KEY(MAJORCOLLEGE) REFERENCES COLLEGE1(COLLEGENAME)

);

CREATE TABLE STUDENT1

(

    SNO VARCHAR2(20) NOT NULL,

    SNAME VARCHAR2(20) NOT NULL,

    SGENDER VARCHAR2(20) NOT NULL,

    SBIRTH DATE NOT NULL,

    SNATION VARCHAR2(20) NOT NULL,

    SIDCARD VARCHAR2(30) UNIQUE,

    SPOLIT VARCHAR2(20) NOT NULL,

    SPHONE VARCHAR2(20) NOT NULL,

 

    SMAJOR VARCHAR2(20) NOT NULL,

    SROOM INT NOT NULL,

   

    CONSTRAINT STUDENT1_PK PRIMARY KEY(SNAME),

    CONSTRAINT STUDENT1_FK1 FOREIGN KEY(SMAJOR) REFERENCES MAJOR1(MAJORNAME),

    CONSTRAINT STUDENT1_FK2 FOREIGN KEY(SROOM) REFERENCES ROOM1(ROOMID)

);

 

INSERT INTO CAMPUS1 VALUES('清水河校区','西源大道2006号');

INSERT INTO COLLEGE1 VALUES('信息与通信工程学院','清水河校区');

INSERT INTO BUILDING1 VALUES('本科生公寓19栋','清水河校区');

INSERT INTO ROOM1 VALUES(410,'本科生公寓19栋');

INSERT INTO MAJOR1 VALUES('物联网工程','信息与通信工程学院');

INSERT INTO STUDENT1 VALUES('学号','姓名','男',TO_DATE('1998-09-18','yyyy-mm-dd'),'汉族','身份证号码','共青团员','电话号码','物联网工程',410);

CREATE VIEW STU_INFO AS

SELECT STUDENT1.SNO,SNAME,SGENDER,SBIRTH,SNATION,SIDCARD,SPOLIT,SPHONE,COLLEGE1.COLLEGENAME,CAMPUS1.CAMPUSNAME

FROM STUDENT1,COLLEGE1,CAMPUS1;

SELECT * FROM STU_INFO WHERE SNO='2016010902012';

猜你喜欢

转载自blog.csdn.net/lzj_1314/article/details/84871423