1. 程式人生 > >【資料庫】關於規範化的瞎扯:1NF、2NF、3NF、BCNF

【資料庫】關於規範化的瞎扯:1NF、2NF、3NF、BCNF

首先要理解,什麼是函式依賴、完全函式依賴、部分函式依賴、傳遞函式依賴、碼、候選碼、主碼、全碼、主屬性、非主屬性。
  • 碼(Key):關係中的一個屬性集合,其屬性值可以唯一標識關係中的每個元組。
  • 候選碼(Candidate key):若一個碼的任意一個真子集都不為碼時,稱其為候選碼。
  • 或者換一個定義:設K為R(U)中的屬性或屬性組,若K完全函式確定U,則K為R的候選碼。
  • 主碼:人為選擇的某一個候選碼。
  • 全碼:關係中所有屬性構成的碼。
  • 主屬性 (Prime Attribute):出現在任意一個候選碼中的屬性。
  • 非主屬性:不出現在任何碼中的屬性。
碼的值可以唯一確定一個元組,也即通過查詢給出的值只能查詢到一條資訊。所以只要表中不存在重複記錄,碼不會在關係中出現重複值。接下來是正經的規範化定義:
  • 1NF:每一個分量都是不可分的(最基本的規範化)。
  • 2NF:若R∈1NF,且每個非主屬性都完全函式依賴於R的碼,那麼R∈2NF。
  • 3NF:若R∈2NF,且每個非主屬性都不傳遞依賴於R的候選碼,那麼R∈3NF。
  • BCNF:若R∈2NF,且每個屬性都不傳遞依賴於R的候選碼,那麼R∈BCNF。
  • BCNF:若R∈3NF,且R只有一個候選碼,或者每個候選碼都是單屬性,則R∈BCNF。

接下來是我的瞎扯(真的是瞎扯,大家不要相信):

首先定義一下什麼叫主體類。主體類簡稱主體,是客觀世界存在的一個具有一系列屬性的物件的集合。主體的屬性可分為兩種:預設在研究範圍內不變的本質屬性(比如學生的姓名和學號,課程的課程號和課程名稱,教師的姓名)和可變屬性(比如選課的成績,教師的職稱)。再定義一下什麼叫關係中的主體。
一個關係中所包含的主體是指關係中出現的所有可變屬性所歸屬的主體。比如(學號,課程號,期中成績,期末成績)的主體只有“選課”(學生-課程之間的連線),不能認為“學生”或者“課程”也是這個關係中的主體。但是(學號,學生所在系,課程號,期中成績,期末成績)這個關係的主體就包括“學生”和“選課”,因為出現了“學生所在系”這個可變屬性。那麼,直觀地(很不學術地)理解一下前幾個規範化:2NF實際上是惟一性約束,可以有多個候選碼,但是要求關係中所有候選碼所確定的主體是同一個。同時2NF可以有多個主體,但是要求關係中存在的其他主體與候選碼所確定的主體之間沒有交集。比如關係(學號,姓名,課程號,課程名,課程期中成績,課程期末成績)這個例子。如果已知姓名、課程名沒有重名的話,候選碼有4個:(學號,課程號)(姓名,課程號)(學號,課程名)(姓名,課程名)。但是其對應的主體只有“選課”(學生-課程之間的連線)。因此和關係(學號,課程號,課程期中成績,課程期末成績)一樣滿足2NF。如果在上例中插入任何以“學生”或者“課程”為主體的可變屬性(比如學生住址、學生所在系、課程教師、課程時間)都會使關係不再屬於2NF。因為關係包含的主體增加了,而增加的主體與候選碼所確定的主體之間有交集。不符合2NF怎麼辦呢?把表拆開,把相互有交集的主體分散到不同的關係裡就好了。如果插入的屬性不是以“學生”或者“課程”為主體的可變屬性則不會使關係不屬於2NF。比如關係(學號,課程號,授課教師姓名,授課教師職稱,課程期中成績,課程期末成績)這個例子。如果相同課號課名的課程任課老師有多位的話,候選碼是(學號,課程號)。雖然主體有“選課”(候選碼所確定的主體)和“教師”,但是之間沒有交集。這個例子符合2NF,只是不符合3NF。3NF依然可以有多個候選碼,相對於2NF的區別是隻能有一個主體。為什麼要搞3NF?因為2NF中那些不是候選碼所確定的主體很憋屈,他們不能獨立存在;候選碼所確定的主體也很憋屈,其他主體一變,他們得跟著變來變去。主體既然是主體,總還是分開比較方便。BCNF則只能有一個候選碼,或者每個候選碼都是單屬性。為什麼搞BCNF?因為明明這個關係就一個主體,一個候選碼就能唯一確定了,很多候選碼放在表裡只是在重複,如果不是經常要用到,不如放另一張表裡算了。比如(學號,姓名,課程號),沒重名的時候候選碼是(學號,課程號)(姓名,課程號),點名收作業的時候姓名學號都有點用,張貼成績的時候就可以不用姓名這一欄了。

相關推薦

linuxlinux命令檢視linux伺服器的jdkTomcatmysqlmaven版本號

目錄 一、jdk 一、jdk 輸入命令,可以看到jdk版本是:1.8.0_181: cd ~ java -version 二、Tomcat (1)切換到Tomcat安裝目錄的bin目錄下: cd /usr/local/tomcat8-dev/b

sparkSpark運算元RDD基本轉換操作–mapflagMapdistinct

map將一個RDD中的每個資料項,通過map中的函式對映變為一個新的元素。 輸入分割槽與輸出分割槽一對一,即:有多少個輸入分割槽,就有多少個輸出分割槽。 hadoop fs -cat /tmp/lxw1234/1.txthello worldhello sparkhello

DeepLab V2基於深度卷積網孔洞演算法和全連線CRFs的語義影象分割

【譯】DeepLab:基於深度卷積網、孔洞演算法和全連線CRFs的語義影象分割 Author: Liang-Chieh Chen 摘要 在這項工作中有三個主要貢獻具有實質的實用價值: 第一,使用上取樣濾波器進行卷積,或者將“多孔 convolut

關係資料庫的幾種正規化(1NF2NF3NFBCNF

關係資料庫的正規化就是設計關係資料表的一種規範,不同正規化代表的不同的規範等級。 達到的等級越高,設計出的資料庫表就越合理,問題越少。否則就會出現重複資料(資料冗餘),插入、刪除、修改等異常。 要理解關係資料庫的正規化,首先需要弄清楚幾個概念。 1. 什麼是碼 2. 什麼是

1NF2NF3NFBCNF3NFBCNF的區別)

候選碼:若關係中的某一組屬性的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼;主碼:若一個關係有多個候選碼,則選定其中一個為主碼;主屬性&&非主屬性:候選碼的諸屬性都稱為主屬性,不包含在任何候選碼中的屬性稱為非主屬性;1NF       滿足最低要

資料庫關於規範化瞎扯1NF2NF3NFBCNF

首先要理解,什麼是函式依賴、完全函式依賴、部分函式依賴、傳遞函式依賴、碼、候選碼、主碼、全碼、主屬性、非主屬性。碼(Key):關係中的一個屬性集合,其屬性值可以唯一標識關係中的每個元組。候選碼(Candidate key):若一個碼的任意一個真子集都不為碼時,稱其為候選碼。或

mpich2圖文教程mpich2的安裝配置測試vs配置命令列測試(沒有使用)

轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/83549093 【安裝mpich2】 1、開啟“mpich2-1.4.1p1-win-ia32.msi。 2、點選“Next”。 3、點選“N

統計建模兩種文化(第四五部分)

謝絕任何不通知本人的轉載,尤其是抄襲。   Abstract  1. Introduction  2. ROAD MAP 3. Projects in consulting 4. Return to the university 5. The

jmeterjmeter監聽器圖形結果聚合報告用表格察看結果指標報告分析

目錄 一、圖形結果 二、聚合報告 三、用表格察看結果 一、圖形結果   橫座標:時間。(單位:毫秒)  縱座標:處理時間。(單位:毫秒) 樣本數目:樣本數目 = 執行緒數(請求使用者數)* 請求次數 。(單位:

資料庫MySQL資料庫優化

1. MySQL架構 MySQL整體架構圖如下: 2. 查詢執行流程 查詢執行的流程是這樣的: 連線 客戶端發起一條Query請求,監聽客戶端的‘連線管理模組’接收請求 將請求轉發到‘連線進/執行緒模組’ 呼叫‘使用者模組’來進行授權檢查 通過

終極指南變數提升作用域和閉包

原文作者:Tyler McGinnis 原文連結:tylermcginnis.com/ultimate-gu… 文中部分連結可能需要梯子。 歡迎批評指正。 說出來可能嚇你一跳,在我看來,理解Javascript的最重要最基本的思路就是理解執行上下文。吃透了執行上下文,你就能更好地學

OpenCV邊緣檢測Sobel拉普拉斯運算元

邊緣 邊緣(edge)是指影象區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影象分割、紋理特徵和形狀特徵等影象分析的重要基礎。 影象強度的顯著變化可分為: 階躍變化函式,即影象強度在不連續處的兩邊的畫素灰度值有著顯著的差異;

資料庫資料庫負載均衡讀寫分離技術

隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於一個大型的網際網路應用,每天百萬級甚至上億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。 一、負載均衡技術 負載均衡叢集是由一組相互獨立的計算機系統構成,通過

資料庫SQL高階*MySQL資料庫之“函式和操作符”(數值函式部分#常用#方便查閱使用)#資料庫SQL知識彙總#(四)-2018.11.27- #轉載#

四、數值函式 4.1 算數操作符 DIV整數除法。 類似於 FLOOR(),然而使用BIGINT 演算法也是可靠的。 4.2 數學函式 若發生錯誤,所有數學函式會返回 NULL 。 ABS(X):返回X 的絕對值。該函式支援使用BIGINT值。

資料庫事務事務的四大特性(ACID)三大併發問題四種鎖四大隔離級別以及它們的實現

資料庫事務 事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。 (資料庫引擎innoDB是支援事務的(預設每一條sql語句為一個事務),MyISAM不支援事務。) 在關係資料庫中,

資料庫三級模式二級對映

# 三級模式和二級對映 在資料模型中有**“型”**(Type, T)和**“值”**的概念。 - **型:**是指對某一類資料的結構和屬性的說明 > **類比:**類 - **值:**是型的一個具體賦值。 > **類比:**物件 **模式和例項:** - **模式:**是資料庫中全體資料的邏輯結構和特徵的

ucosii筆記1移植

err color border 工作 mrc pro read cfg mut 前言 ucosii的代碼,可以分為兩部分:與cpu無關的代碼,與cpu有關。移植的主要工作就是修改與cpu有關的部分代碼。 ucosii的代碼結構 與cpu無關的代碼

python qt(pyqt)的文件打開文件保存文件夾選擇對話框

utf spl 文件對話框 出現 tin ans none 轉換 選擇文件夾 import PyQt4.QtCore,PyQt4.QtGui # 獲取文件路徑對話框 file_name = QFileDialog.getOpenFileName(self,"open

C++可變參數列表處理宏va_listva_startva_end的使用

sin 不同 struct rto snprintf 指定 cnblogs 最小 多個 VA_LIST是在C語言中解決變參問題的一組宏他有這麽幾個成員: 1)va_list型變量: #ifdef _M_ALPHA typedef struct{ char*  

轉載Caffe學習運行caffe自帶的兩個簡單例子

0.00 練習 siam 其它 sudo 單例 復制 腳本 policy 原文:http://www.cnblogs.com/denny402/p/5075490.html 為了程序的簡潔,在caffe中是不帶練習數據的,因此需要自己去下載。但在caffe根目錄下的data