实验三 SJK数据库设计

2024-05-01 20:04
文章标签 设计 数据库 实验 sjk

本文主要是介绍实验三 SJK数据库设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实验题目

实验三 SJK数据库设计

实验时间

2023.3.22

实验地点

软件工程基础实验室

实验课时

2

实验目的

​掌握数据库设计基本方法及数据库设计工具。

实验要求

​ 掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式SQL语句生成。能够使用数据库设计工具进行数据库设计。

实验步骤

及内容

 设计一个教务信息系统的数据库。数据库包含院系信息,学生信息,教师信息,课程信息,学生选课信息,考试信息。其中,一个学生属于一个院系,可以选修多门课程。一个教师属于一个院系,可以任教多门课程,一门课程也可以有多个老师任教。一门课程有多个课程安排,可以有多场考试安排。

(1)数据库概念结构设计

​ 识别出学生,教师,院系,课程,考试,课程安排六个实体。每个实体的属性、码如下:

学生Student:学号sno,姓名sname,性别ssex,年龄sage,班级class,院系编号dno。主码:学号sno。

教师teacher:编号tno,姓名tname,性别tsex,年龄tage,院系dno,职称title。主码:编号tno。

院系department:院系名depart_name,院系编号dno,院长编号dean_tno。主码:院系编号dno。

课程course:课程号cno,课程名course_name,学时数hours,学分credit,类型type,开设院系dno。主码:课程号。

课程安排course_arrangement:课程号cno,周次week,节次course_time,教室classroom。主码:课程号cno,周次week,节次course_time

考试安排exam_arrangement:课程号cno,考试时间exam_time,考试时长hours,考试地点classroom。主码:课程号,考试地点。

​ 根据语义,分析实体之间的联系,确定实体之间一对一,一对多和多对多联系。

SQL语句生成

​ 由PowerDesigner生成的SQL语句如下:

if exists(select 1 from sys.sysforeignkey where role='fk_sc_s') then

    alter table sc

       delete foreign key fk_sc_s

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_sd') then

    alter table student

       delete foreign key fk_sd

end if;

if exists(

   select 1 from sys.systable

   where table_name='student'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table student

end if;

/*==============================================================*/

/* Table: student                                               */

/*==============================================================*/

create table student

(

   sno                  char(12)                       not null,

   sname                char(25)                       null,

   ssex                 char(2)                        null,

   sage                 small int                       null,

   class                char(8)                        null,

   dno                  char(2)                        null,

   constraint PK_STUDENT primary key clustered (sno)

);

alter table student

   add constraint fk_sd foreign key (dno)

      references department (dno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_cd') then

    alter table course

       delete foreign key fk_cd

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_ca_c') then

    alter table course_arrangement

       delete foreign key fk_ca_c

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_exam_c') then

    alter table exam_arrangement

       delete foreign key fk_exam_c

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_sc_c') then

    alter table sc

       delete foreign key fk_sc_c

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_tc_c') then

    alter table tc

       delete foreign key fk_tc_c

end if;

if exists(

   select 1 from sys.systable

   where table_name='course'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table course

end if;

/*==============================================================*/

/* Table: course                                                */

/*==============================================================*/

create table course

(

   cno                  char(8)                        not null,

   cname                char(25)                       null,

   hours                small int                       null,

   credit               small int                       null,

   type                 char(8)                        null,

   dno                  char(2)                        null,

   constraint PK_COURSE primary key clustered (cno)

);

alter table course

   add constraint fk_cd foreign key ()

      references department (dno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_tc_t') then

    alter table tc

       delete foreign key fk_tc_t

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_td') then

    alter table teacher

       delete foreign key fk_td

end if;

if exists(

   select 1 from sys.systable

   where table_name='teacher'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table teacher

end if;

/*==============================================================*/

/* Table: teacher                                               */

/*==============================================================*/

create table teacher

(

   tno                  char(12)                       not null,

   tname                char(25)                       null,

   tsex                 char(2)                        null,

   tage                 small int                       null,

   dno                  char(2)                        null,

   title                char(10)                       null,

   constraint PK_TEACHER primary key clustered (tno)

);

alter table teacher

   add constraint fk_td foreign key (dno)

      references department (dno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_cd') then

    alter table course

       delete foreign key fk_cd

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_sd') then

    alter table student

       delete foreign key fk_sd

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_td') then

    alter table teacher

       delete foreign key fk_td

end if;

if exists(

   select 1 from sys.systable

   where table_name='department'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table department

end if;

/*==============================================================*/

/* Table: department                                            */

/*==============================================================*/

create table department

(

   dno                  char(2)                        not null,

   dame                 char(25)                       null,

   tno                  char(12)                       null,

   constraint PK_DEPARTMENT primary key clustered (dno)

);

if exists(select 1 from sys.sysforeignkey where role='fk_ca_c') then

    alter table course_arrangement

       delete foreign key fk_ca_c

end if;

if exists(

   select 1 from sys.systable

   where table_name='course_arrangement'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table course_arrangement

end if;

/*==============================================================*/

/* Table: course_arrangement                                    */

/*==============================================================*/

create table course_arrangement

(

   cno                  char(8)                        not null,

   week                 small int                       not null,

   course_time          char(12)                       not null,

   classroom            char(10)                       null,

   constraint PK_COURSE_ARRANGEMENT primary key clustered (cno, week, course_time)

);

alter table course_arrangement

   add constraint fk_ca_c foreign key (cno)

      references course (cno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_exam_c') then

    alter table exam_arrangement

       delete foreign key fk_exam_c

end if;

if exists(

   select 1 from sys.systable

   where table_name='exam_arrangement'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table exam_arrangement

end if;

/*==============================================================*/

/* Table: exam_arrangement                                      */

/*==============================================================*/

create table exam_arrangement

(

   cno                  char(8)                        not null,

   exam_time            char(10)                       null,

   classroom            char(10)                       not null,

   hour                 small int                       null,

   constraint PK_EXAM_ARRANGEMENT primary key clustered (cno, classroom)

);

alter table exam_arrangement

   add constraint fk_exam_c foreign key (cno)

      references course (cno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_sc_c') then

    alter table sc

       delete foreign key fk_sc_c

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_sc_s') then

    alter table sc

       delete foreign key fk_sc_s

end if;

if exists(

   select 1 from sys.systable

   where table_name='sc'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table sc

end if;

/*==============================================================*/

/* Table: sc                                                    */

/*==============================================================*/

create table sc

(

   sno                  char(12)                       not null,

   cno                  char(8)                        not null,

   grade                small int                       null,

   constraint PK_SC primary key clustered (sno, cno)

);

alter table sc

   add constraint fk_sc_c foreign key (cno)

      references course (cno)

      on update restrict

      on delete restrict;

alter table sc

   add constraint fk_sc_s foreign key (sno)

      references student (sno)

      on update restrict

      on delete restrict;

if exists(select 1 from sys.sysforeignkey where role='fk_tc_c') then

    alter table tc

       delete foreign key fk_tc_c

end if;

if exists(select 1 from sys.sysforeignkey where role='fk_tc_t') then

    alter table tc

       delete foreign key fk_tc_t

end if;

if exists(

   select 1 from sys.systable

   where table_name='tc'

     and table_type in ('BASE', 'GBL TEMP')

) then

    drop table tc

end if;

/*==============================================================*/

/* Table: tc                                                    */

/*==============================================================*/

create table tc

(

   tno                  char(12)                       not null,

   cno                  char(8)                        not null,

   term                 char(8)                        not null,

   class                char(8)                        null,

   constraint PK_TC primary key clustered (tno, cno, term)

);

alter table tc

   add constraint fk_tc_c foreign key (cno)

      references course (cno)

      on update restrict

      on delete restrict;

alter table tc

   add constraint fk_tc_t foreign key (tno)

      references teacher (tno)

      on update restrict

      on delete restrict;

实验结果及分析

经检验,实验基本达到预期效果。数据库的设计的基本步骤包括数据库概念结构设计、逻辑结构设计,物理结构设计。其中概念结构设计通常用E-R图表示。逻辑结构设计比较重要,需要从E-R图转换得到,并需要完成一些细节,进行调整优化。物理结构设计则需要完成存储路径的设计和存储结构的设计,需要根据实际情况进行设计。例如每个关系的存储结构,具体的数据类型和长度都要符合实际,同时尽量减小开销。使用类似PowerDesigner的工具可以辅助设计,方便的进行模型间的转化,并可以直接生成SQL语句,有必要掌握使用的基本方法。

这篇关于实验三 SJK数据库设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952553

相关文章

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Oracle 数据库数据操作如何精通 INSERT, UPDATE, DELETE

《Oracle数据库数据操作如何精通INSERT,UPDATE,DELETE》在Oracle数据库中,对表内数据进行增加、修改和删除操作是通过数据操作语言来完成的,下面给大家介绍Oracle数... 目录思维导图一、插入数据 (INSERT)1.1 插入单行数据,指定所有列的值语法:1.2 插入单行数据,指

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手