sql三正規化的理解
做為一條有用的資料,那麼他必須是完整的,也就是資料的完整性,那怎麼才能做到資料的完整性呢?在設計資料庫時我們需要滿足三正規化的要求,那什麼是三正規化呢,三正規化分為三部分,第一步是資料的原子性,所謂原子就是不可分割的最小的單位,我們設計的表裡面的列必須是乙個能夠表達完整的資訊的最小的的列,比如位址」廣州南沙」它雖然是正確的位址了,但是這句話說明了兩個不同的意思,第乙個是廣州市,第二個是南沙區,因此我們要把它們單獨分出了,做成遞迴的樣式,變成每個欄位的原子,比如「廣州」,「南沙」,這樣無論在閱讀上還是運用上都方便了許多,我們要求資料設計的第一正規化是:1.確保每列的原子性
2. 如果每列都是不可再分的最小資料單元(也稱為 最小的原子單元),則滿足第一正規化(1nf)
可以看到上面如果不用第一正規化的話,主鍵會很多,看起來很混亂,說明的物件重複囉嗦,運用起來更加麻煩,所以當做成第一正規化時看起來簡潔,運用起來也很好。不會出現資料的混亂,這樣做免去了手動區找資料,又能確定它的唯一性。在方便的同時,還能減少資料的沉餘,從而達到一箭雙鵰的效果。讓我們的資料庫設計都滿足第一正規化吧。
我們說了,設計資料庫要是三正規化,那麼第一正規化達到了,現在到第二正規化了。
第二正規化是:如果乙個關係滿足第一正規化(1nf)的同時,並且除了主鍵以外的其他列,都依 賴與該主鍵,則滿足第二正規化(2nf)。
並且我們要求每張表只描述一件事情
我們可以看到左邊的表已經滿足了第一正規化,每個欄位都是最小的可以表達完整意思的資料,那麼問題來了,即使是這樣我們看到這張表的時候,給人的感覺是很繞的,它一張表說明了兩種不同的事物,這樣在我們新增資料的時候會讓我們很麻煩,就拿上面的例子來說,我要新增一條訂單,那麼我必須要把產品的資訊一起填上,但現實中,我們並不用這麼麻煩的步驟,我們新增訂單就只管訂單的,跟產品毫無關係,但是我也要保留產品的資訊,那該怎麼辦呢,那麼就要用到我們資料庫設計的第二正規化了,因為第二範是每張表說明同一事物的所有資訊,當我們把這張表分成,訂單和產品兩張表時,我們就可以明確的知道哪張表包含了哪些資訊,這樣做方便我們檢視資料,方便資料的新增修改和刪除,已經還能減少資料的餘沉,簡直一箭多雕了。讓我們把資料庫資料的第二正規化靈活的運用起來。
第三正規化是:如果乙個關係滿足第二正規化(2nf),並且除了主鍵以外的其他列 都不傳遞依賴於主鍵列,則滿足第三正規化(3nf)
第三正規化是滿足第二正規化的同時還有跟這張表有關係的簡介資料我們可以呼叫外來鍵來進行應用,比如我現在有一張學院表,裡面有一條資料「華南理工大學」,該跳的資料的主鍵id是15,那麼同時我們在學生表裡面也有一條資料是「小明」,這條資料的id是」1」,這麼說明小明是哪個學院的呢,我們也有兩張表,一張學院表,一張學生表,這時候我們就要想是先有學生,還是先有學生呢,按照正常邏輯來講,我們是先有學院才有學生,因為學生是學院裡面的,那麼學院就是父表,學生是子表,要先兩張表有關係,我們就也賦予子表 「父表的id「,也就是在小明這條資料裡加上15的學院id,那麼小明就是華南理工大學的了。這樣一來,我們還能看到,我們新增學院時,只要新增只關於學院的資訊就可以了,完全不需要說明裡面有多少學生,是不是很方便,而學生表,一旦要新增,就必須說明該新增學生是哪個學院的,不然資料就不完整,這樣的邏輯跟實際情況完全吻合,這樣的三正規化不僅能讓我們更加好的看出資料,還能方便的對進資料進行操作,真是一種很好的資料設計方式。讓我們靈活運用這種設計方式,讓我們的做出的程式能更加的好用。
三正規化理解
再次強化資料庫正規化,別在犯迷糊 大部分資料庫從業人員都知道關聯式資料庫有三個基本的正規化,即 第一正規化,第二正規化,第三正規化。當然也有牛人知道bc正規化,第四正規化,第五正規化,第六正規化,甚至還有個dk正規化。本人對資料庫的正規化概念也是一知半解的,想想有些可笑,搞資料庫的竟然不了解關聯式資...
三正規化的理解
1nf 字段不可分 2nf 有主鍵,非主鍵字段依賴主鍵 3nf 非主鍵字段不能相互依賴 解釋 1nf 原子性 字段不可再分,否則就不是關聯式資料庫 2nf 唯一性 乙個表只說明乙個事物 3nf 每列都與主鍵有直接關係,不存在傳遞依賴 不符合第一正規化的例子 關聯式資料庫中create不出這樣的表 表...
三正規化的理解
list b 第二正規化 2nf b 單關鍵字的表,或者若為組合關鍵字則必須沒有關鍵字組合鍵中的某個字段 非關鍵字段的表 b 第三正規化 3nf b 在第二正規化的基礎上,資料表中如果不存在傳遞函式依賴 關鍵字段 非關鍵字段x 非關鍵字段y list size large b 第一正規化 1nf b...