MySQL数据库--学生管理系统数据库设计

目录

  • 学生管理系统数据库设计
  • 学生管理系统功能介绍
  • 数据库设计步骤
  • 第1步: 找对象
  • 第2步:找属性
  • 第3步: 找关系
  • 建表原则
  • 第4步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为1张表
  • 总结: 数据库设计遵循的原则[重点]

学生管理系统数据库设计

设计一套数据库首先要熟悉当前系统有哪些功能,具体的业务流程是什么

学生管理系统功能介绍

一套学校用的学生管理系统,最核心的功能如下

  1. 学生信息管理(增加学生,删除学生,修改学生,查询学生信息==简称:CURD)
  2. 老师信息管理(CURD)
  3. 课程信息管理系统(CURD)
  4. 成绩信息管理系统(CURD)
  5. 违纪信息管理(CURD)
  6. 活动信息管理(CURD)
  7. 物资/设备信息管理(CURD)
  8. 等....

要完成以上所有的功能,需要操作以上对象的相关信息. 以上对象的信息可以按照固定格式存储在数据库中!
数据库设计的第一步就是找出业务相关的的核心对象 ,一类物体/对象的信息固定存储在一张表中!

概念

  • 对象: 生活中的一类物体,程序中叫对象
  • 属性: 物体的名词和形容词的描述,就是对象的属性

数据库设计步骤

数据库设计三大核心的步骤:

  • 1.找对象
  • 2.找属性
  • 3.找关系

第1步: 找对象

分析系统业务中的核心对象.

  • 学生对象----> 学生表(student)
  • 老师对象----> 老师表(teacher)
  • 课程对象----> 课程表(course)
  • 成绩对象----> 成绩表(score)
  • 班级对象----> 班级表(前缀_class,因为user或class等英文单词是程序中的关键字.尽量不直接用)
  • 等.....

注意: 一些隐含的对象可能因为对业务不熟练,可能找不到 ,.比如:学生请假条对象. 活动对象等..... 所以进行数据库设计之前,一定要把系统功能和业务流程整理清楚.当然遗漏的对象可以在需要时再补充.数据库设计没有一步到位的.

第2步:找属性

属性概念: 物体/对象的名词或形容词的描述.学名叫"属性",,每个属性对应表中的1个列!

  • 学生对象(student): 唯一标识id,学号 姓名,性别,年龄,生日,电话,
  • 老师对象(teacher): 唯一标识id,姓名,性别,年龄,电话
  • 课程对象(course): 唯一标识id,课程名,开课时间,课时数量
  • 班级对象(tbl_class) : 唯一标识id,班级编号,人数
  • 成绩对象(score) : id,分数,课程名(可直接引用课程编号), 学生名(可直接引用学生编号)

对象中每个属性就对应表中的每个列
为了避免数据冗余(重复),用学生id和课程id代替名字!
电脑中存储数据是严格区分不同类型的! 年龄:整数int, 名字:字符串;char/varchar/string

第3步: 找关系

表和表之间的关系有: 1---N(1对多) 或 N---1(多对1) 或 1-1(1对1) 或 N--N (多对多)

  • 1-N 或 1-1 或 N-1: 通过主键和外键表示
  • N-N : 一但出现多对多,必须借助一个中间表(关系表)实现
  • 比如 商品和订单表就是 N--N
    • 商品(id,商品编号,名字,数量,价格)
    • 订单(id,订单号, 用户名(id), 总价, 总数量 )

独立一个中间表/关系表(保存另外两张表的主键引用)

id pid(商品编号) oid(订单编号)
1 P001 D001
2 P002 D001
3 P003 D001
4 P001 D002
5 P001 D003
6 P002 D002
#查  订单D001买的所有的商品!
select * from 表名   where oid='D001'
# 查 商品  P001被下单了多少次?
select * from 表名  where pid = 'P001'

#  看:D001 买了几个商品!
select sum(num) from guanxi_product_order
where oid='D001'

建表原则

对象分析出来后就可以建表了,一般建表时遵循的原则如下.
建表规则

  • 1. 同一类的对象信息存储在1张表中!
  • 2. 对象的每个属性对应表中的每个列!
  • 3. 列有具体的数据类型
    • int: 整数
    • 小数: float/doube
    • 日期: date.datetime
    • 字符串:char/varchar
  • 4. 每个表中必须有主键列!
    • 唯一区分一个行的列就交主键列(可以多个)
    • 规则: 为了避免没有主键习惯于添加一个虚拟的主键id(自增)
  • 5. 添加约束(限制条件)
    • 主键: primary key --->特点: 唯一
    • 自增: auto_increment----> 自动增长
    • 默认值: default ----->性别默认为男!
    • 非空: not null--------> 必须有数据
    • 唯一: unique---->不能重复
    • 外键(参考) foreign key:------>成绩表中存班级id,课程id,

第4步: 找特例: 等级明显而且不包含敏感数据的信息建议保持为1张表

比如:地区表 和 员工表

id(地区编号) name code pcode父编号
1 北京 11
2 山东 37
3 济南 3701 37
4 青岛 3702 37
5 海淀 1101 11
6 房山 1102 11
-- 所有省
select * from area where pcode is null

-- 山东省所有的市
select code from area where name= '山东'
select * from area where pcode = 37

select * from area where pcode = (
 select code from area where name= '山东'
)

总结: 数据库设计遵循的原则[重点]

前提: 熟悉项目的业务流程!

  • 一类对象信息保存张表中
  • 表中必须有主键列(为了防止没有主键习惯添加虚拟主键列id,id一般设置为自增)
  • 添加约束保证数据完整性
    • 主键
    • 唯一
    • 自增
    • 非空
    • 外键(实现1-N)
    • 默认值
  • 多对对必须独立一个关系表
  • 注意: 等级明显并且无敏感信息的数据可以通过自关联实现!
  • 遵守: 数据库设计三大范式(三大原则)

原文地址:https://www.cnblogs.com/bignote/p/11610070.html

时间: 2024-08-04 10:56:50

MySQL数据库--学生管理系统数据库设计的相关文章

学生管理系统——数据库

1.项目分层 view层:视图层 controller层:控制层 service层:业务层 dao层:数据库访问层 domain:实体包 tools:工具类 2.jar包 3.配置文件 4.程序设计 (1)domain包,主要存放javabean package pers.zhb.student.domain; public class Course { private String courseno; private String cname; private String type; pri

JDBC应用、控制台连MySQL接数据库实现学生管理系统的登录注册、增删改查

**=====================连接数据库=====================** package com.sore.jdbc; import java.sql.*; public class Jdbc { static Connection conn=null; //创建连接桥 public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); //加载驱动 S

创新课程管理系统数据库设计心得

因为创新课程管理系统这一个项目,是一个从无到有,没有标准可以去参考的一个项目. 这个项目专门针对该课程进行设计,所以需求的功能点很多,因此数据库有多次设计,更改再推翻重新设计再更改. 因为用户有多个类型,系统管理员,学校管理员,老师,助教,学生. 一开始的时候想把每一个都单独设计为一个表,然后登陆的时候选择身份后直接在对应的表里面进行查找即可.所以当时的用户表是如下的: 后来经过小班讨论课,又觉得可以把所有的用户全部放在一个表里面,即一个User表里面有所有用户的资料,不过这样会导致许多字段的空

【乱写代码坑人系列】ZJUT数据库大型实验 - 学生管理系统(二):项目规划

学生管理系统(二)项目规划 学生管理系统(一)建立项目 好吧这部分应该放在第一的,但是我忘了(逃.其实也差不多啦,反正上一篇也没说什么啊哈哈. 先说项目要求.项目要求的是建立一个管理系统,用来对本地的数据库进行增删查改,把.mdf 文件直接拿来改会被老师打的,所以还是要有一个图形界面. 图形界面要有几个页面:登录,主窗口,学院.老师.学生.课程.成绩的管理,要能看到详细信息,能够批量删除什么的.为了装逼可以考虑加入与Office的连接,不过这个是后话,做好基础功能再玩. 数据库要这么几个表:学院

思维导图学 Linux Shell攻略之干货篇 mysql数据库脚本管理系统

以结果为导向的学习,才是最有效率学习.笔者以前也曾经隔三差五的学习linux shell编程来着.给我的感觉就是,今天学了,后天忘了,一星期之后就白学了. 还好,最近自己平时没啥事,一直照着<linux shell攻略>,学做一些小例子,看着自己写的shell程序,简单的几行程序,实现一些好玩的效果,信心满满.不知不觉间,慢慢坚持了2周. 说说自己的干货吧.其实就是一个linux 操作mysql数据库脚本管理系统. 功能谈不上复杂,就是在平时工作中,笔者要维护多套业务系统,这些业务系统主要功能

基于python的学生管理系统(含数据库版本)

这次支持连接到后台的数据库,直接和数据库进行交互,实现基本的增删查改 1 #!/usr/bin/python3 2 # coding=utf-8 3 """ 4 ***********************help document**************************************** 5 Usage: 6 this is a simple student grades system,now is simple 7 when start the p

MySQL基础/数据库和表的设计

MySQL基础 一:安装MySQL(按步骤操作,如果下载后使用不了,试着用360安全卫士卸载MySQL,清除残留的,方便在下载造成不必要的麻烦:如果这样也不行,那就需要重做系统在进行下载) 二:创建数据库/表 黑窗口:1:输入密码 2:show databases:查看数据库 3:create database 库名:创建库 4:use 库名:使用库 5:create table 表名:创建表( 列名数据类型(约束条件),    //用逗号隔开 ): 6:show tables:查看库里有哪些表

&lt;linux shell 攻略&gt; 庖丁解牛 mysql数据库脚本管理系统

操作界面 这个小系统一共包含4个脚本 sh 功能 备注 oneKey.sh 主程序,调用其他程序,对外提供功能 menu.sh 勾画菜单 function.sh 提供操作数据库接口 valid.sh 操作mysql数据库,验证数据 menu.sh 画字符菜单 #!/bin/bash function print_main_menu(){ cat <<EOF ####################################### #    1)创建数据库                 

Linux学习之路--MySQL(1)数据库介绍及安装方法【18】---20180117

一.数据库的发展史简要 1.数据库的发展史 萌芽阶段-----文件系统使用磁盘文件来存储数据 初级阶段-----第一代数据库出现了网状模型.层次模型的数据库 中级阶段-----第二代数据库关系型数据库和结构化查询语言 高级阶段-----新一代数据库"关系-对象"型数据库 2.文件管理系统的缺点 编写应用程序不方便 数据冗余不可避免 应用程序依赖性 不支持对文件的并发访问 数据间联系弱 难以按用户视图表示数据 无安全控制功能 3.数据的时代 涉及的数据量大 数据不随程序的结束而消失 数据