MySQL數據庫--學生管理系統數據庫設計

[toc]html

學生管理系統數據庫設計

設計一套數據庫首先要熟悉當前系統有哪些功能,具體的業務流程是什麼python

學生管理系統功能介紹

一套學校用的學生管理系統,最核心的功能以下數據庫

  1. 學生信息管理(增長學生,刪除學生,修改學生,查詢學生信息==簡稱:CURD)
  2. 老師信息管理(CURD)
  3. 課程信息管理系統(CURD)
  4. 成績信息管理系統(CURD)
  5. 違紀信息管理(CURD)
  6. 活動信息管理(CURD)
  7. 物資/設備信息管理(CURD)
  8. 等....

要完成以上全部的功能,須要操做以上對象的相關信息. 以上對象的信息能夠按照固定格式存儲在數據庫中! 數據庫設計的**第一步就是找出業務相關的的核心對象 **,一類物體/對象的信息固定存儲在一張表中!數據庫設計

概念網站

  • 對象: 生活中的一類物體,程序中叫對象
  • 屬性: 物體的名詞和形容詞的描述,就是對象的屬性

數據庫設計步驟

數據庫設計三大核心的步驟:spa

  • 1.找對象
  • 2.找屬性
  • 3.找關係

第1步: 找對象

分析系統業務中的核心對象.設計

  • 學生對象----> 學生表(student)
  • 老師對象----> 老師表(teacher)
  • 課程對象----> 課程表(course)
  • 成績對象----> 成績表(score)
  • 班級對象----> 班級表(前綴_class,由於user或class等英文單詞是程序中的關鍵字.儘可能不直接用)
  • 等.....

**注意: 一些隱含的對象可能由於對業務不熟練,可能找不到 **,.好比:學生請假條對象. 活動對象等..... 因此進行數據庫設計以前,必定要把系統功能和業務流程整理清楚.固然遺漏的對象能夠在須要時再補充.數據庫設計沒有一步到位的.code

第2步:找屬性

屬性概念: 物體/對象的名詞或形容詞的描述.學名叫"屬性",,每一個屬性對應表中的1個列!htm

  • 學生對象(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= '山東'
)

遵循數據庫設計三大範式

  • 第一範式: 原子性 根據業務須要保證表中的每一個列不可再拆分.好比: 簡單存儲學生信息地址列就夠用了. 可是電商類網站地址須要拆分爲省,市,縣,鄉,村
  • 第二範式: 相關性 保證表中的每一個列都和主鍵相關,只要知足一類物體的信息保存在1張表中,就知足第二範式
  • 第三範式: 直接相關性 這個通常用於多個列聯合做爲主鍵的中間表,其餘列必須和每一個組件直接相關,而不能只和某一個列有關係.

參考:https://www.cnblogs.com/knowledgesea/p/3667395.html

總結: 數據庫設計遵循的原則[重點]

前提: 熟悉項目的業務流程!

  • 一類對象信息保存張表中
  • 表中必須有主鍵列(爲了防止沒有主鍵習慣添加虛擬主鍵列id,id通常設置爲自增)
  • 添加約束保證數據完整性
    • 主鍵
    • 惟一
    • 自增
    • 非空
    • 外鍵(實現1-N)
    • 默認值
  • 多對對必須獨立一個關係表
  • 注意: 等級明顯而且無敏感信息的數據能夠經過自關聯實現!
  • 遵照: 數據庫設計三大範式(三大原則)
相關文章
相關標籤/搜索