1. 程式人生 > >資料庫設計之邏輯設計

資料庫設計之邏輯設計

邏輯設計
1:將需求轉化成資料庫的邏輯模型
2:通過ER圖的型式對邏輯模型進行展示
3:同所選用的具體的DBMS系統無關

名詞解釋

關係:一個關係對應通常所說的一張表
元組:表中的一行即為一個元組
屬性:表中的一列即為一個屬性,每一個屬性都有一個名稱,稱為屬性名
候選碼:表中的某個屬性組,它可以唯一確定一個元組
主碼:一個關係有多個候選碼,選定其中一個為主碼
域:屬性的取值範圍
分量:元組中的一個屬性值

ER圖例說明

矩形:表示實體集,矩形內寫實體集的名字
菱形:表示聯絡集
橢圓:表示實體的屬性
線段:將屬性連線到實體集,或將實體集連線到聯絡集

資料操作異常及資料冗餘

插入異常:如果某實體隨著另一個實體的存在而存在,即缺少某個實體時無法表示這個實體,那麼這個表就存在插入異常。
更新異常:如果更改表所對應的某個實體例項的單獨屬性時,需要將多行更新,那麼就說這個表存在更新異常。
刪除異常:如果刪除表的某一行來反映某實體例項,失效時導致另一個不同實體例項資訊丟失,那麼這個表中就存在刪除異常。

注意:若一個表中存在插入異常,那它肯定存在刪除異常和更新異常。

資料冗餘:是指相同的資料在多個地方存在,或者說表中的某個列可以由其他列計算得到,這樣就說表中存在資料冗餘。

第一正規化
定義:資料庫表中的所有欄位都是單一屬性,不可再分的。這個單一屬性是由基本的資料型別所構成的,如整數,浮點數,字串等,換句話說,第一正規化要求資料庫中的表都是二維表。(二維表就是由行和列組成的表)
這裡寫圖片描述

第二正規化
定義:資料庫的表中不存在非關鍵欄位對任一候選關鍵欄位的部分函式依賴。
部分函式依賴是指存在著組合關鍵字中的某一關鍵字決定非關鍵字的情況。
換句話說:所有單關鍵字的表都符合第二正規化。
這裡寫圖片描述

修改後的
這裡寫圖片描述
存在的問題:插入異常,刪除異常,更新異常,資料冗餘

通俗解釋
完全依賴:表中只有一個關鍵字(即主鍵),其他屬性的增刪改查的時候定位到這一行都是依賴此關鍵字的。
第二正規化:只能有一個主鍵,不能有複合主鍵,可以就滿足了第二正規化。

由於供應商和商品之間是多對多的關係,所以只有使用商品名稱和供應商名稱才可以唯一標識出一件商品,也就是商品名稱和供應商名稱是一組組合關鍵字。
上表中存在以下的部分函式依賴關係
(商品名稱)—>(價格,描述,重量,商品有效期)
(供應商名稱)—>(供應商電話)

第三正規化
定義:第三正規化是在第二正規化的基礎上定義的,如果資料表中不存在非關鍵欄位,對任意候選關鍵欄位的傳遞函式依賴則符合第三正規化。
這裡寫圖片描述

存在問題:
(分類,分類描述)對於每一個商品都會進行記錄,所以存在資料冗餘,同時也會存在資料deep插入、更新及刪除異常。
這裡寫圖片描述
資料庫設計三正規化:
1NF:列不可分就滿足1NF了。

2NF:不存在部分依賴,比如 (A,B)C。(消除非主屬性對主屬性的傳遞依賴,即完全依賴於主鍵)

3NF:不存在傳遞依賴,比如ABC。(在2NF基礎上消除了傳遞依賴)

BC正規化
定義:在第三正規化的基礎上,資料庫表中如果不存在任何欄位對任一候選關鍵欄位的傳遞函式依賴則符合BC正規化。也就是說如果是複合關鍵字,則複合關鍵字之間也不能存在函式依賴關係
這裡寫圖片描述

存在下列關係因此不符合BCNF要求:
(供應商)—>(供應商聯絡人)
(供應商聯絡人)—>(供應商)
並且存在資料操作異常及資料冗餘
這裡寫圖片描述

總結
第一,二,三正規化解決的是非主屬性的關係。BC 正規化解決的是主屬性的關係;

第一正規化:就是原子性,欄位不可再分割,(列屬性不能在細分為子列)
第二正規化:就是完全依賴,沒有部分依賴;【非主屬性不能依賴於主鍵的一部分,要完全依賴於主鍵(主鍵是複合鍵)】
第三正規化:沒有傳遞函式依賴。【非主屬性之間的依賴】
BC正規化: 解決部分主鍵依賴於非主鍵部分(複合關鍵字之間也不能存在函式依賴關係)。

相關推薦

資料庫設計邏輯設計

邏輯設計 1:將需求轉化成資料庫的邏輯模型 2:通過ER圖的型式對邏輯模型進行展示 3:同所選用的具體的DBMS系統無關 名詞解釋 關係:一個關係對應通常所說的一張表 元組:表中的一行即為一個元組 屬性:表中的一列即為一個屬性,每一個

資料庫結構設計邏輯設計和物理設計

1、資料庫結構設計的步驟 需求分析:全面瞭解產品設計的儲存需求 邏輯設計:設計資料的邏輯儲存結構 物理設計:根據所用的資料庫特點進行表結構設計                   關係型資料庫:

MySQL5.7資料庫優化設計

一個數據庫、表設計的優劣會影響到資料庫的效能,所以合理的設計資料庫是非常重要的。 最近看了MySQL5.7手冊,手冊第八章就是關於優化的,第十一章詳細的介紹了各個欄位。如果你有興趣可以去看看,相信會收穫頗豐。下面根據手冊及結合平時開發經驗還有大學學的資料庫原理來

公交查詢系統的設計詳細設計程序流程圖(1)

程序流程圖 前面的博客我寫過公交查詢系統設計的數據流圖,實體聯系圖和狀態轉換圖,老師給任務了,這次寫的是程序流程圖。 之前的公交查詢系統:http://13271983.blog.51cto.com/13261983/1970591 用戶登錄模塊:功能描述:該系統的用戶為普通用戶和管理員,都有自己的登錄賬

公交查詢系統的設計詳細設計程序流程圖(2)

軟件工程接著上期博客的討論,程序流圖繼續畫。公交查詢系統模塊1車次信息查詢功能描述:普通用戶登錄成功後可以進入到個人主界面,用戶可以進行車次信息查詢。車次信息查詢是為用戶提供按公交車的車號查詢,並顯示該公交車的相關信息(如:公車的起點站和終點站,車子檔次和票價等信息)。2站點信息查詢功能描述:用戶登錄成功後即

公交查詢系統的設計詳細設計程序流程圖(3)

軟件工程車次信息管理模塊1刪除車次功能描述:分頁列出車次信息表中所有的車次信息,選擇操作中的刪除,就可以將對應的車次信息刪除,但是在刪除車次信息的時候需要先刪除車次與站點關系表中所有對應該車次的信息。2添加車次功能描述增加車次的詳細信息,包括:車次號,起點站,終點站,票價,車檔次。在添加起點站和終點站的時候,

mysql數據庫設計物理設計

hat 無效 tex upd 設計 名稱 default nds 自定義 一、存儲引擎 推薦使用Innodb,這也是mysql默認使用的存儲引擎,支持事務 二、屬性的選擇 字符選擇: 1、char,存定長,速度快,存在空間浪費的可能,會處理尾部空格,上限255字節。(u

設計路-設計工具(powerDesigner)

            今天終於抽出點時間來做點筆記了,時間真是一把殺豬刀 時間長了不用 真的很快就忘記了。好了不囉嗦了 下面我們來學習一下一款設計工具,當然了想成為一個設計師,熟練的使用一款設計 工具是比不可少的。這方面的工具也是非常多的

ORACLE資料庫學習邏輯結構

 邏輯結構 資料庫邏輯結構包含表空間、段、範圍(extent)、資料塊和模式物件。 (一)表空間 一個數據庫劃分為一個或多個邏輯單位,該邏輯單位稱為表空間類似於sybase下的裝置。(TABLESPACE)。一個表空間可將相關的邏輯結構組合在一起。DBA可

一個實際專案Java架構設計總體設計

1      總體架構模組圖 1.1   抽象架構模組圖   1.2   具體技術架構模組圖 如上圖示所,框架主要包括了: l  MVC開發框架 l  工作流技術 l  使用者、許可權、角色管理 下面分別詳細介紹。 2      MVC方案 2.1   檢視層技術方案(view) 在

可用性質量屬性設計系統設計

您可參考右側導航欄瞭解博文涉及內容。 一、故障,錯誤,BUG的區別 在瞭解一個系統的可用性可以從瞭解系統故障開始。但是什麼是故障,錯誤,bug? 故障與錯誤是經常容易被混淆的兩個概念,故障、錯誤、BUG之間是有區別的。 軟體程式碼由於人為因素寫錯了或者考慮不周全,成為了錯誤。 有錯誤的軟體存在一定缺陷,該缺

[分散式服務]海量網際網路服務設計降級設計

![](https://img2020.cnblogs.com/blog/610439/202003/610439-20200328185036314-1856960036.png) [TOC] 上週在 [[分散式服務\]海量網際網路服務設計的有損價值觀](https://www.cnblogs.com/

一步一步開始FPGA邏輯設計 - 高速介面PCIe(轉)

reference: https://blog.csdn.net/jackxu8/article/details/53288385   這篇文章主要針對Xilinx家V6和K7兩個系列的PFGA,在Linux和Windows兩種系統平臺下,基於Xilinx的參考案例XAPP1052的基

資料庫設計三大正規化NF

       國內絕大多數院校用的王珊的《資料庫系統概論》這本教材,某些方面並沒有給出很詳細很明確的解釋,與實際應用聯絡不那麼緊密,你有這樣的疑問也是挺正常的。我教《資料庫原理》這門課有幾年了,有很多學生提出了和你一樣的問題

資料庫設計反三正規化的理解

反三正規化是基於第三正規化所調整的,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。具體做法是: 在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加欄位,減少了查詢時的關聯,提高查詢效率,因為在資料

資料庫設計三正規化的的理解

目的:  為了降低資料冗餘,消除資料插入異常、更新異常、刪除異常。在設計資料庫時正規化要求越嚴謹則設計出來的表則越多資料結構越靈活。 定義: 第一正規化(1NF):資料表中的每一列(每個欄位)必須是不可拆分的最小單元,也就是確保每一列的原子性; 第二正規化(2NF):滿足1NF後,

資料庫設計規範化--------幾種正規化詳解

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的、結構明晰的,同時,不會發生插入(insert)、刪除(delete)和更新(update)操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。  

架構設計資料庫從主備到主主的高可用方案」

在網際網路專案中,當業務規模越來越大,資料越來越多,隨之而來的就是資料庫壓力會越來越大。慢慢就會發現,資料庫層可能已經成為了整個系統的關鍵點和效能瓶頸了,因此實現資料層的高可用就成為了我們專案中經常要解決的問題。 本文我們就來聊一聊如何實現資料儲存層的高可用方案。在保障資料層的高效能與高穩定方面,最容易想到的

架構設計資料庫叢集方案」

在之前的文章中,我們知道資料庫服務可能已經成為了很多系統的效能關鍵點,甚至是瓶頸了。也給大家介紹了資料庫伺服器從主備架構、到主從架構、再到主主架構的基礎方案。但如果單臺機器已經不能滿足完整業務資料儲存的時候,我們就需要考慮採用多機甚至多中心的部署方案了。 今天我們就再來聊一聊,在多機環境下,資料庫叢集的架構方

資料庫設計欄位型別

1.一般的一個數據庫中欄位的型別有text,int,tinyint,datetime,vachar,char這幾個 2.它們的長度一般設定為: 型別       長度     小數點 text--》0          (存放文字,文章) datetime--》長度,