三大範式的歸納與舉例_三大範式

來源:互聯網
上載者:User

本文以Java程式員的眼光來解釋三範式,並附上例子,和這樣設計會出現哪些問題。來更加通俗的講述一下3大範式。最後附上BC範式的一點理解。


第一範式,每一個列不可再分。

對應我們設計就是不能出現重複的列。這個是關聯式資料庫的基礎沒有人會犯這個錯誤(資料庫也不讓)。

下面舉一個我們可能會犯錯的例子。

學生表,(姓名,班級,年齡,性別,家庭住址,班主任姓名,班主任職稱,所選課程,課程學分)。

這裡如果是教育局查看所有所有的表,可能會出現,統計一下北京通州區的學生數量,統計一下北京海澱區的學生數量。這樣沒有辦法統計了。所以在這個背景下,我們設計應該是。學生表(姓名,班級,年齡,性別,家庭所在市,家庭所在區,班主任姓名,班主任職稱,所選課程,課程學分)。

理解:設計資料庫的時候,根據業務最好把東西拆分成合適的粒子。我們還出現一個2的情況,就是欄位不夠了,也不能隨便加資料庫欄位,我就把一個備用欄位,中間用,“,”作為分隔字元,放了好多東西,最後要分類統計,就2了。


第二範式,在第一範式的基礎上,非主屬性依賴於主屬性。

還是上面的例子。

主屬性,候選碼,都是唯一的意思(也就是資料庫中的主鍵)。如果學生姓名是唯一的,學生姓名也就是碼,那麼就有了主屬性。如果每個學生只選擇一門課程。那麼課程也是唯一依賴于姓名。但是實際生活中,學生很容易重名,學生也要選擇多門課程。所以以上違背第二範式。改變為,學生表(學號,姓名,班級,年齡,性別,家庭所在市,家庭所在區,班主任姓名,班主任職稱,所選課程號) ,課程表(課程號,課程名稱,課程學分)。

理解:程式中必須設定主鍵,一對多關聯性必須差分開,多對多也是一樣。有的時候為了連表方便也把名稱和主鍵都放在另一個表裡。這樣就省去連表了,但是會出現一種情況

教師的名稱改變了,但是你學生表的老師名稱沒有改變。


第三範式,消除非主屬性傳遞依賴。

學生表(學號,姓名,班級,年齡,性別,家庭所在市,家庭所在區,班主任姓名,班主任職稱,所選課程號)

這時候,班主任依賴於學號,班主任名稱依賴於班主任,間接依賴於學號,這就是傳遞依賴應該變為。

學生表(學號,姓名,班級,年齡,性別,家庭所在市,家庭所在區,班主任編號,所選課程號)

教師表(教師編號,姓名,職稱)

理解:程式中除了主鍵其他資訊不能出現在其他表中。(也就是任意兩個表,不能出現重複的非主鍵欄位)


BC範式,消除主屬性傳遞依賴

假設學校腦抽,讓錄指紋方便打卡。學生表(學號,姓名,班級,年齡,性別,家庭所在市,家庭所在區,指紋)

這裡就會出現指紋是唯一的,指紋依賴於學號,那麼就出現了主屬性依賴。

如果學生退學了,指紋資訊也消失了,這個系統如果想要建立一個指紋庫,那麼不符合需求了。

這是候差分成,學生表(學號,姓名,班級,年齡,性別,家庭所在市,家庭所在區,指紋ID)。指紋表(指紋ID,指紋)

理解:1對1關係,最好也進行差分。


以上是個人理解,如果有錯誤,望讀者指出,謝謝。



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.