MySqL(加餐)

范式

第一范式

  • 數據庫表的每一列都是不可分割的原子數據項,而不能是集合,數組,對象等非原子數據。
  • 在關系型數據庫的設計中,滿足第一范式是對關系模式的基本要求。不滿足第一范式的數據庫就不能被稱為關系數據庫。

第一范式實際上只要用普通的數據類型描述每一個元素,就可以滿足第一范式。

如下就不滿足第一范式 ,因為學校中有多個數據類型。

修改之后就滿足第一范式,雖然有很多冗余項。

第二范式

候選鍵實際上就是標識數據唯一性的。

如圖內容就不滿足第二范式,

  • 這張表中使用學號 + 課程名定義復合主鍵來唯一標識一個學生某門課程的成績,這也是這張表的主要作用。
  • 學生是通過學號來確定的,學生的姓名、年齡和性別和課程沒有關系,即學生的信息只依賴學號,不依賴課程名;學分是通過課程來確定的,課程的學分與學生沒有關系,即學分只依賴課程名,不依賴學生
  • 對于使用復合主鍵的表,如果一行數據中的有些列只與復合主鍵中的一個或其中幾個列有關系,那么就說他存在部分函數依賴,也就不滿足第二范式

簡單來說,學生姓名年齡,性別都只依賴于學號,課程名的學分只依賴于課程名。但是成績同時依賴于學號和課程名。

解決方法:應該要設計三張表,即學生表,課程表,成績表。

這時候就可以通過三張表將學生內容組合在一起了,排除了部分函數依賴,不存在復合主鍵就天生滿足第二范式。

可能會出現的問題:

  1. 數據冗余
    學生的姓名、年齡、性別和課程的學分在每行記錄中重復出現,造成了大量的數據冗余。(多個考試有個記錄)

  2. 更新異常
    如果要調整 MySQL 的學分,那么就需要更新表中所有關于 MySQL 的記錄,一旦執行中斷導致某些記錄更新成功,某些數據更新失敗,就會造成表中同一門課程出現不同學分的情況,出現數據不一致問題。

  3. 插入異常
    目前這樣的設計,成績與每一門課和學生都有對應關系,也就是說只有學生參加選修課程考試取得了成績才能生成一條記錄。當有一門新課還沒有學生參加考試取得成績之前,那么這門新課在數據庫中是不存在的,因為成績為空時記錄沒有意義。

  4. 刪除異常
    把畢業學生的考試數據全都刪除,此時課程和學分的信息也會被刪除掉,有可能導致一段時間內,數據庫里沒有某門課程和學分的信息。

第三范式

在滿足第二范式的情況下,不存在非關鍵字段,對任一候選鍵的依賴傳遞。

實際上像學院就可以通過學號找到,也就是學院依賴于學號,因為找到了學號也就是找到了學生所屬的學院。所以此時就可以對表進行拆分。

把表進行拆分,通過學院Id來進行關聯就可以了,第三范式我認為是第二范式的擴充,從一個關系找到另外一個關系就是依賴。

反范式設計

當我們不想要太多次表關聯查詢,就可以使用反范式進行設計表結構,比如我不想關聯表進行查詢學院名稱,就可以直接在學生表進行字段的增加。減少表連接操作,提升效率。

數據庫設計過程

我們一般通過E-R圖來表示實體和實體之間的關系。

E-R 圖包含了以下三種基本成分:

  • 實體:即數據對象,用矩形框表示,比如用戶、學生、班級等。
  • 屬性:實體的特性,用橢圓形或圓角矩形表示,如學生的姓名、年齡等。
  • 關系:實體之間的聯系,用菱形框表示,并標明關系的類型,并用直線將相關實體與關系連接起來。

一對一

我們可以在drawio上繪制這些關系圖,E-R圖有一對一,一對多,多對多的關系

一對多

多對多

如果我們生成多張表,并且滿足三個范式,就可以畫出如下的關系圖,根據考試的成績關聯在一起。

數據庫設計練習

用戶表和賬戶表一對一

當用戶賬戶表一對一的時候,我們就可以在用戶表中多創建一個賬戶主鍵id進行維護,這樣就能通過該id查找到賬戶表中的內容。

一對多的關系

如果一個班級對應著多個學生,那么學生表中就要創建一個字段來存儲對應的班級id。在多方的表中增加字段。

多對多的關系

如果是學生和課程多對多的話,我們建立關系就要進行增加另外一張表的方式來進行操作,多建立一張成績表,分別記錄學生和課程的關系。

逆向導出EE-R圖

?如圖即為逆向導出EER圖,就能看到表之間的關聯關系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【redis】基于工業界技術分享的內容總結

Redis 實踐指南與核心概念 一、Java 中常用的 Redis 使用場景與實踐 緩存(Caching) 場景:熱點數據、頻繁訪問的數據,如商品詳情、用戶信息。通過緩存減少數據庫壓力,提高系統響應速度。 工業界實踐: 淘寶…

服務端之nestJS常用異常類及封裝自定義響應模塊

MENU前言常用異常類(由nestjs/common提供)示例自定義異常(可選)自定義響應模塊前言 在NestJS中,nestjs/common提供了大量的內置異常類,主要用于在控制器、服務等層拋出特定的HTTP錯誤響應。 常用異常類&…

數據鏈路層、NAT、代理服務、內網穿透

目錄 一. 以太網 以太網幀格式 二. MAC地址 三. MTU 四. ARP協議 五. NAT NAPT 六. 代理服務器 正向代理 反向代理 七. 內網穿透 八. 內網打洞 一. 以太網 ? "以太網" 不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內 容, 也包含了一些物理層…

Rust在CentOS 6上的移植

Rust已不支持Cent OS 6 rhel是Redhat 發布的Red Hat Enterprise Linux的簡稱,使用rhel源代碼編譯的CentOS,最新的版本是CentOS 7,于2024年停止支持。而更古老的CentOS 6,則在2020年就已經結束了。 而面對如此老舊的系統&#xf…

C++音視頻開發:基礎面試題

音視頻領域技術門檻高,學習資料稀缺,體系化書籍和開發工具有限,新手入門困難。音視頻開發涉及眾多任務:音頻(采集、編解碼、降噪等)、視頻(采集、編解碼、圖像處理)、實時傳輸&#…

C++刷題 - 7.27

貪心算法的詳細邏輯這個問題的最優解可以用 貪心算法 在 O(N) 時間 內解決。它的核心思想是:每次操作盡可能覆蓋最長的連續非零區間,并通過數學分析發現:最小操作次數等于所有“上升臺階”的高度差之和。1. 直觀理解假設 steps [1, 2, 3, 2,…

音頻3A處理簡介之AGC(自動增益控制)

在音頻通話和視頻會議中,音頻自動增益控制AGC模塊的主要作用:? 穩定音頻信號的輸出電平。無論麥克風采集信號的強弱(如用戶離麥克風遠近程度不同),盡可能保證音頻采集模塊的輸出音量保持相對一致,不會偏大…

web前端打包apk包

我用的是HBuilder工具,可視化更便捷,目前我這操作的apk包是不需要上架的,所以跟實際需要上架的可能還有些出入 首先先新建個項目,選擇5App模式 把目前需要打包的內容上傳到服務器,我們以嵌套的形式進行打包,找到index.…

Ansible提權sudo后執行報錯

1.問題 配置了sudo提權信息后,執行ansible-play報錯,報錯信息如下:2.原因 sudo沒有執行**/bin/sh的權限,而ansible腳本中依賴/bin/sh**,所以報錯了: 查看日志sudo tail -f /var/log/secure3.解決方式 修改*…

.NET報表控件ActiveReports發布v19.0——正式兼容 .NET 9

ActiveReports 是一款專注于 .NET 和 .NET Core 平臺的報表控件。通過拖拽式報表設計器,可以快速地設計 Excel表格、Word文檔、圖表、數據過濾、數據鉆取、精準套打等類型報表,全面滿足 WinForm、ASP.NET、ASP.NET MVC、WPF 平臺中各種報表的開發需要。同…

SCI論文選詞煉句

標準句子不能啰嗦;詞不能有問題,得是SCI中經常出現的,符合上下文的。SCI論文中常出現的摸棱兩可的詞單詞涵義例子Architecture指 整體系統設計方案,如網絡層次結構、模塊組合、激活函數選擇等深度學習模型架構Structure更泛泛&…

Qt deleteLater 延遲刪除原理

deleteLater 調用 事件發送 void QObject::deleteLater() {QCoreApplication::postEvent(this, new QDeferredDeleteEvent()); }首先該對象繼承QObject調用deleteLater, 內部會發送刪除事件QCoreApplication::postEvent(this, new QDeferredDeleteEvent()) 到事件循…

TypeScript SDK 升級:通過 Upload Relay 賦能更多應用

自 3 月主網上線以來,Walrus 開發者社區持續展現出強勁的發展勢頭: 當前 Walrus 已存儲超 758 TB 數據,為數百個項目提供支持。在 2025 年 6 月舉辦的 Sui Overflow 黑客松上,Walrus 成為最受歡迎的數據層。該賽事共收到 599 個項…

C#線程同步(二)鎖

目錄 1.lock 2.Monitor 3.鎖的其它要注意的問題 3.1同步對象的選擇 3.2什么時候該上鎖 3.3鎖和原子性 3.4嵌套鎖 3.5 死鎖 3.6 性能 4.Mutex 5.Semaphore 1.lock 讓我們先看一段代碼: class ThreadUnsafe {static int _val1 1, _val2 1;static void G…

鴻蒙智能居家養老系統構思(續二)—— 適老化烹飪中心詳細構思

一、背景在“寫給華為鴻蒙智家 —— 智能居家養老系統構思”一文中,結合對居家養老的理解及個人體驗,提出了基于鴻蒙OS實現居家養老系統的粗略構思。其中包含“吃得好”。當老人到了不能隨性外出活動、只能在家消耗時光時,除了一些看看電視、…

高斯透鏡公式(調整鏡頭與感光元件之間的距離時,使得不同距離的物體在感光元件上形成清晰的影像)

當使用定焦鏡頭時,仍然可以調整鏡頭與感光元件(或膠片)之間的距離時,使得不同距離的物體在感光元件上形成清晰的影像。對此可以用高斯透鏡公式進行解釋: 一、透鏡成像的基本原理 在光學中,一個基本的公式是…

預過濾環境光貼圖制作教程:第三階段 - GGX 分布預過濾

核心目標 GGX 分布是 PBR 中模擬粗糙表面高光反射的主流模型,其核心是通過統計分布描述微表面的朝向概率。本階段的目標是: 基于第一階段生成的環境圖集,預計算 6 個級別的 GGX 過濾結果(對應不同粗糙度); 使用蒙特卡洛采樣(Monte Carlo Sampling)加速 GGX 卷積計算;…

Spring框架與AutoCAD結合應用

什么是AutoCAD? AutoCAD簡介 AutoCAD是由美國Autodesk公司開發的計算機輔助設計(CAD)軟件,廣泛應用于建筑、工程、制造、產品設計等領域。它支持2D繪圖和3D建模,提供精確的圖形工具和自動化功能,幫助用戶高效創建技術圖紙和模型。 主要功能 2D繪圖:提供直線、圓弧、多…

Java 學習筆記:常用類、String 與日期時間處理

作為一名名 Java 初學者,最近在學習過程中整理了一些關于常用類、String 類以及日期時間處理的知識點。這些內容是 Java 基礎中的重點,也是日常編程練習中頻繁用到的工具,掌握它們能讓我們在寫代碼時更加得心應手。今天把這些筆記分享出來&am…

Android常用的adb和logcat命令

ADB ADB,即 Android Debug Bridge 是一種允許模擬器或已連接的 Android 設備進行通信的命令行工具,它可為各種設備操作提供便利,如安裝和調試應用,并提供對 Unix shell(可用來在模擬器或連接的設備上運行各種命令&…