iT邦幫忙

0

[鷹問]資料庫正規化一問

  • 分享至 

  • xImage

目前老鷹在設計資料庫中,
剛好有看到正規化這個詞,
請問各位大神 大大 前輩們
資料庫要如何設計才比較合乎正規化??

請各位大大 前輩 大神們 指點一二~~!
謝謝

看更多先前的討論...收起先前的討論...
看到這問題
我不由得濕了眼眶
抱抱

你為什麼不問
晚上那裡還訂得到位子吃大餐呢
或者到蟹堡王來找我也可以
做菜
明天要去找蟹老闆,
那就代表看的到海棉寶寶了開心
跟海綿兄 沒有見過面!
希望可以認識一下海綿兄~~!
來探討 宮保雞丁如何做毆飛
老鷹現在的新情人好像是資料庫.
前不久老鷹來宜蘭,我跟他唬爛了一堆資料庫的事情.
唉,我錯了,我應該拿D槽讓他copy一部分才對. Orz
yuanshang iT邦新手 4 級 ‧ 2014-02-16 00:55:23 檢舉
合乎正規化是必要的也是好的,在 relational algebra 上這樣可以保證資料關係間之簡潔及一致姓 (Data integrity)。 然而一些少數狀況下,有人會刻意的 Denormalization,減少過多複雜的 join ,來增進資料查詢的效率(當然是要經過測試的),所以某些table (或 views)並不一定要正規化,視您的功能需求為先。供您參考
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
22
賽門
iT邦超人 1 級 ‧ 2014-02-14 15:45:40
最佳解答

正規化是為關聯式資料庫系統的設計而發展出來的方法。
由下而上評估關聯表綱要是否符合正規化型式(Normal Form)。
正規化型式的目的在:

  • 去除資料表結構中的重覆性(Redundancy),例如學生姓名只要出現在學籍基本資料表中,不用在成績資料表與選課資料表中出現
  • 去除不一致相依性(Inconsistent Dependency),例如學生王大同在成績資料表中,有五個不同課程的成績,對照學籍基本資料表中,兩個課程對照記錄A,三個課程對照記錄B,記錄A與B均- 指向相同的王大同,發生資料不一致的情形。

正規化型式是用來設計資料庫中資料表結構的方法。
有六個正規化型式

  • 第一正規化型式(First Normal Form)
  • 第二正規化型式(Second Normal Form)
  • 第三正規化型式(Third Normal Form)
  • Boyce-Codd正規化型式(Boyce-Codd Normal Form)
  • 第四正規化型式(Fifth Normal Form)
  • 第五正規化型式(Sixth Normal Form)
    通常做到第三正規化型式或Boyce-Codd正規化型式即可。

煩請老鷹看我的簡報

看更多先前的回應...收起先前的回應...

謝謝賽大分享~~!
資料庫設計的好 程式寫的少
最近對這句話 很有感覺
筆記謝謝

賽大簡報剛剛很快的看了一下.
MySQL有好幾種引擎,儲存的方式不太一樣的.
當然簡報的目的是快速讓人有一基本的了解,所以難免會有不周全之處.建議還是可以補充一下,那是MyISAM引擎下的儲存狀況.

總裁 iT邦好手 1 級 ‧ 2014-02-14 16:07:52 檢舉
  • 第四正規化型式(Fifth Normal Form)
  • 第五正規化型式(Sixth Normal Form)

到底是5還是6呀????....暈

賽門 iT邦超人 1 級 ‧ 2014-02-14 16:15:54 檢舉

cdfu提到:
到底是5還是6呀????

4=5
5=6

火星算術...偷笑

賽門 iT邦超人 1 級 ‧ 2014-02-14 16:17:06 檢舉

hitomitanaka提到:
建議還是可以補充一下,那是MyISAM引擎下的儲存狀況.

謝謝小雨大的說明....謝謝
我會再修訂簡報內容。

pantc328 iT邦高手 1 級 ‧ 2014-02-14 16:37:44 檢舉

啪啪手,可以考公務員了
我隨便拉都可以拉幾百個關聯,而且不會出錯
但我就是寫不出,什麼是一階正規化,什麼是二階正規化..

賽門 iT邦超人 1 級 ‧ 2014-02-14 17:12:59 檢舉

pantc328提到:
可以考公務員了

咳~~P大不要把我推入火坑好嗎?

一尾 iT邦研究生 1 級 ‧ 2014-02-14 17:19:41 檢舉

看完簡報
這樣的正規化好像別家資料庫也可以這樣做
讚

賽門 iT邦超人 1 級 ‧ 2014-02-14 17:30:34 檢舉

select提到:
好像別家資料庫也可以這樣做

係滴.....拍手

4
hanker
iT邦新手 3 級 ‧ 2014-02-17 08:24:24

第一階正規劃 : 將系統程式會用到的資料全部都放在一個資料表理
第二階正規劃 : 將系統程式會用到的資料依據主要的分類存放在不同的資料表理。
第三階正規劃 : 除將系統程式會用到的資料依據主要的分類存放在不同的資料表理,再依照次要的分類存放在不同的資料表理。
第四階正規劃 :除將系統程式會用到的資料依據主要的分類存放在不同的資料表理,再依照次要的分類存放在不同的資料表理外,另外再分出非必要的分類。

畢業七年了,只記得大約是這樣,總而言之就是資料表的類別越分越細,不過基本上是分到第三~四階,因為越分越細的結果是資料庫的負擔會越重,造成效能低落。如果還想要詳細資料的話,可以參考"資料庫設計"的書籍或課程。

看更多先前的回應...收起先前的回應...

似乎與一般流傳的版本不太一樣.

賽門 iT邦超人 1 級 ‧ 2014-02-17 08:46:36 檢舉

好像是資料倉儲(Data Warehousing)的概念...

總裁 iT邦好手 1 級 ‧ 2014-02-17 09:30:54 檢舉

To 小雨:
這表示....我們都老了....落寞

pantc328 iT邦高手 1 級 ‧ 2014-02-17 10:57:28 檢舉

哈~
我只知道
把醫院出生死亡資料庫倒入戶政資料庫
把法院離婚資料庫倒入戶政資料庫
把警察失蹤戶口倒入戶政資料庫
再把戶政資料庫倒入警政的戶口查查資料庫
再把戶政資料庫倒入役政資料庫
再把這些資料反轉後正規化
然後就整個一團亂

player iT邦大師 1 級 ‧ 2014-02-17 14:36:09 檢舉

大量資料異動
要用佇列(Queue)啦
資料不要随便倒
要倒的資料要先分別Intsert一個資料表先暫存 (多一個欄位來判別是否已處理過)
然後排程去抓暫存用的資料表
去依序處理 (處理過的資料, 在判別用的欄位註記)
才不會讓原本的資料表被卡死

我要發表回答

立即登入回答