###项目简介

[TOC=4,6]

所有的关于技术细节的讨论和实现都是基于一定的项目背景的,所以首先来介绍下我做的项目情况。这里要介绍的项目是一个**作业管理系统**。对你没看错,就是一个简单的学生交作业老师改作业然后给出评分的信息管理系统。说它简单,是因为它太平常,我们整个上学期间都在重复做这个事情,而细细想来它也很有代表性,所牵涉到的数据关系以及操作**完全可以满足入门学习实践任何一个框架的要求**。首先我们从用例的角度来看看它有哪些使用者。

####用例分析

该系统的使用者分为三种,分别是:

(1)学生

学生通过该系统定期查看老师布置的作业、完成它们、查看老师给出的评分。

(2)老师

老师通过使用该系统,布置作业给学生。当然,想的细一点就是首先要选择他所带的班级,然后给这些班级布置作业。

(3)管理员

管理员主要做一些信息维护工作,比如管理学生的信息,管理老师的信息,管理班级的信息等。

从用例的分析上来看,该系统的功能较简单,一目了然。

####系统牵涉到的关键元素

笔者并不打算按照传统的软件工程的文档来写项目的概述,而是想用自己的方式更快更直接的让您可以了解项目。通过上面的讲述,提取一下,该项目牵涉的关键元素主要有 **学生、教师、班级、作业(老师布置的作业和学生提交的作业)**。下面看看他们自己的关系是什么?

####各个元素间的关系

(1)学生和班级的关系

这个不用多说,学生和班级当然是**多对一**的关系,一个班级有多个学生,每个学生都属于某个班级。

(2)班级和教师的关系

这个需要想的细一些,一个老师可以带不同的班级,一个班级也可以由不同的老师带,所以它们是**多对多**的关系。**所有多对多的关系都可以拆分为两个一对多的关系**。而这时候需要一个第三方元素来保存班级和老师的对应关系。确定了教师带哪些班级后,在系统中老师就可以为这些班级布置作业了。

(3)教师和作业的关系

跟在学校学习期间的常识一样,教师可以布置多个作业,一个作业只能由一个老师来布置,所以是**一对多**的关系

(4)作业和班级的关系

每个班级的所有学生布置的作业都是一样的,一个班级可以被布置多个作业,所以是**多对一**的关系。

(5)学生提交的答案和学生、作业的关系

学生交作业后产生的答案需要记录在系统中,这个答案和学生是一对一的关系和作业也是一对一的关系,所以需要保留学生和作业的主键作为外键。(数据库层面)

####关系数据库建模

知道了哪些元素和关系后,那我们就可以进行数据库建模了,数据库关系图如下所示:

![](https://box.kancloud.cn/b83164064984e159102ef4e2a86a2695_918x545.png)

把表大概注解一下,以防英文不大好的童鞋搞不清楚:

**(1)tb_student——学生表**

主要字段包括:

*stu_id ——学生ID(主键、自动增长)

*stu_no——学号(学生使用学号作为用户名登陆本系统)

*stu_name——姓名

*password——登陆密码

*class_id——班级ID(外键,用于和班级建立多对一的关系)

*new_task_number——未完成作业的数目(用于提醒学生)

**(2)tb_clas——班级表**

主要字段包括:

*clas_id——班级ID(主键、自动增长)

*clas_name——班级名称

**(3)tb_teacher——教师表**

主要字段:

*teacher_id ——教师ID(主键、自动增长)

*user_name——用户名(教师使用工号作为用户名登陆本系统)

*realname——姓名

*password——登陆密码

**(4)tb_teacher_clas——教师班级关系表(存放教师和班级的对应关系)**

还记得我们前面讲过教师和班级是多对多的关系,所以需要一个关系表用来存放他们的关系。

主要字段:

*clas_id ——班级ID(外键)

*teacher_id ——教师ID(外键)

**(5)tb_task—— 作业表**

作业表中存放老师布置的作业,它需要弄清楚是哪个老师布置的,所以需要保留教师表的主键为它的外键

主要字段:

*task_id ——作业ID(主键、自动增长)

*task_title——作业标题

*task_content——作业内容

*submit_date——布置日期

*finish_date——截止日期

* teacher_id——教师ID(外键用于和教师表建立关系)

**(6)tb_task_class——作业班级关系表**

由于一个作业可以布置给不同的班级,一个班级也可以布置多个作业,因此作业和班级是多对多的关系,需要用一个关系表来保存对应关系:

*task_id——作业ID(外键)

*clas_id——班级ID(外键)

**(7)tb_submit——学生提交作业后将答案保存在本表中**

该表也是本系统中最重要的表,保存学生做作业的答案,并记录老师给学生的打分。该表需要明确是哪个学生提交的,提交的是哪个作业,所以需要保留学生表和作业表的主键作为外键:

*submit_id——提交ID(主键、自动增长)

*task_id——作业ID

*stu_id——学生ID

*submit_content——提交的内容

*score——作业得分

*attach_url——附件路径(如果有的话)

好了,有了我上述关于关键元素以及它们之间的关系,想必数据库关系图一定很好理解吧,如果有什么问题,欢迎大家在评论中给出,本节到此结束!

php项目简介,一、项目简介 · ThinkPHP5项目开发“填坑”实录 · 看云相关推荐

  1. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

  2. Android项目开发填坑记-Fragment的onAttach

    背景 现在Android开发多使用一个Activity管理多个Fragment进行开发,不免需要两者相互传递数据,一般是给Fragment添加回调接口,让Activity继承并实现. 回调接口一般都写 ...

  3. Android 项目开发填坑记 - 使用 MultiDex 解决 64K 限制

    如果移动端访问不佳,请访问 –> Github版 背景 Android 的 classLoader 在加载 APK 的时候限制了class.dex 包含的 Java 方法数,其总数不能超过655 ...

  4. Android 项目开发填坑记 - 谷歌商店上架被拒 Apps On Device

    关键词:谷歌商店被拒.数据安全表单.已安装应用.Policy Declaration.Data Safety Section.App Activity Data Type.Apps On Device ...

  5. 一对一课时记录php,一对一关联 · thinkphp5.0 文档学习记录 · 看云

    ## 一对一关联 | 版本 | 功能调整 | | --- | --- | | 5.0.5 | 增加关联自动写入和删除 | | 5.0.4 | 增加关联属性绑定到父模型功能 | ### 定义 定义一对一 ...

  6. php输出tab,设置Tab按钮列表 · DolphinPHP1.5.0完全开发手册-基于ThinkPHP5.1.41LTS的快速开发框架 · 看云...

    ## setTabNav('tab列表', '当前tab') 先来个例子 ~~~ public function index($group = 'tab1') { $list_tab = [ 'tab ...

  7. thinkphp5.1 php7,空白目录 · 细数ThinkPHP5.1.7版本新特性 · 看云

    >[danger] 官方已经在前不久发布了ThinkPHP`5.1.7`版本,`5.1`版本相较于`5.0`版本而言,本身更加严谨和规范,更接近主流设计思想.近半年来,`5.1`版本更新频繁,此 ...

  8. 海豚php表格,表格选取(1.4.3+) · DolphinPHP1.5.0完全开发手册-基于ThinkPHP5.1.41LTS的快速开发框架 · 看云...

    ## addSelectTable('name值', '标题', '提示', '表格列头' , '表格数据', '选择内容的url']) 标识符:`selectTable` >[info]1.4 ...

  9. 海豚php 授权价格,数据授权(1.3.2+) · DolphinPHP1.5.0完全开发手册-基于ThinkPHP5.1.41LTS的快速开发框架 · 看云...

    >[info]本章节仅适用于1.3.2版本以上 从`1.3.2`版本开始,数据授权修改为分模块设置,模块内可分组. ![](https://box.kancloud.cn/06c277f6954 ...

最新文章

  1. 常用构建数据科学应用程序的七个Python库
  2. spring源码分析之spring-core asm概述
  3. 论文笔记:MobileNet v2
  4. Hejr 6-8 - aamsaafanqs Blog - Blogster
  5. linux安装jdk、tomcat
  6. 三维重建12:室内三维物体的位姿识别论文列表
  7. 全国计算机等级考试题库二级C操作题100套(第06套)
  8. php将已有图片缩放尺寸,PHP图片重新采样及大小缩放-imagecopyresampled用法实例
  9. 【IoT最佳实践】设备获取实时天气信息
  10. Objectove-c单例模式
  11. WindowsServices_无法拷贝文件到服务器
  12. 用户节点cdn有什么用处
  13. ORACLE中null的排序问题
  14. postman接口导入
  15. 股票预测pythonlstm_LSTM预测股票涨跌--结合技术分析视角(一)
  16. 基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现
  17. ApacheCN Python 译文集(二)20211110 更新
  18. java调用kettle自定义kettle.properties配置文件路径
  19. Ubuntu下mingw和aarch64交叉编译x264/x265/openssl/freetype2的ffmpeg
  20. 中基协:推荐使用电子合同

热门文章

  1. 【已解决】未解决-mimikatz尝试获取win10明文口令报错
  2. 策略思维:市场的三个放弃点
  3. ffplay使用soundtouch实现倍速播放
  4. linux sipp 呼叫转移_开源VoIP/电话 - linux学习笔记 - CSDN博客
  5. webgis二次开发
  6. 机器学习-朴素贝叶斯
  7. 计算机的第一级存储器有,计算机等级考试题库重点!一级MS Office第二章“存储器”...
  8. 分布式智能微电网的建设方案与应用场景播报文章
  9. 从架构设计看线程池,无源码分析
  10. 使用yolov5训练自己的模型修改的地方