凡是做過資料庫設計的,只要不是大菜鳥,聽到正規化兩個字,馬上就會在腦海中浮現1nf
,2nf
,3nf
,bcnf
這些術語,但是若要大家詳細的將這幾個東東的專業定義描述出來。。。。。。呵呵,至少大部分人都會暈的,什麼功能依賴、函式依賴,~
!@#¥%
……&*
,my god
!反正我是記不住:)
但既然上了it
這條賊船,就無法避免和資料庫設計打交道,醜媳婦總是要見公婆的:)既然無法避免,那就讓我們勇敢的面對,揭開資料庫正規化的神秘面紗,看看到底是乙個醜媳婦還是乙個俊媳婦!!
資料庫正規化本身的定義這裡就不囉嗦了,大家隨便上網搜尋或者找本教材看看,保證隨處可見,我在這裡給大家用通俗的語言描述出來。
在詳細**之前還是囉嗦一句:千萬要注意:正規化只是在設計表的時候用的原則,資料庫其它的設計例如索引、檢視、觸發器、儲存過程等都和正規化沒有關係。
1nf在資料庫設計中其實很簡單:「列不可再分」。
什麼叫列不可再分呢?意思就是每一列只包含乙個屬性,所有屬性的型別都是一樣的。
可能有人看到這裡會說:暈,這還用說,誰設計的資料庫表的列還可以再分呢?其實這句話只對了一部分,下面我們詳細分析為什麼叫只對了一部分。
我們目前說的和用的資料庫都是關聯式資料庫,而關聯式資料庫中是不可能設計乙個列能夠包含兩個不同型別的屬性的;但大千世界,無奇不有,除了關聯式資料庫,還有其它的資料庫,例如物件導向資料庫、xml
資料庫,這種資料庫就可以設計乙個屬性再包含多個子屬,所以1nf
在關聯式資料庫中是天然滿足的,而在其它型別資料庫就不一定了。
看了上面這段話,你是不是長籲一口氣,心裡踏實了,以為就可以從此不管1nf
了呢?非也,資料庫只做了第一層保證,但你還是可以設計不符合1nf
的表來。下面我們給幾個簡單的例子,看看我們如何不遵守1nf。
例子1:student
表有乙個屬性name
,型別為字串。
這個是最簡單的例子,估計很多人都如此設計過,資料庫也不會拒絕我們建立這樣的表,但這個設計是不符合1nf
的,為什麼?很簡單的,名字其實是「有名有姓」的,這其實就是兩個屬性。比如我們要查詢姓「李」的同學有多少,或者查詢同名(例如「狗剩」)的有哪些。這樣的查詢如果只有乙個name
列,呵呵,只能用like
來查詢了,這樣不同的名字方式(例如中國人姓在前,美國人姓在後),like
都需要修改,而且like
還不能利用索引加快查詢速度。
例子2:custom
表中有乙個屬性address。
大家可以自己按照上面的例子自己分析一下,看看會有什麼問題……..
擔心一次寫太多,大家會暈,故分幾次來寫,未完待續。。。。。。
資料庫正規化 掀起你的蓋頭來(1)
分類 資料庫 2009 03 27 20 16 535人閱讀收藏 舉報資料庫 語言儲存 xml 目錄 凡是做過資料庫設計的,只要不是大菜鳥,聽到正規化兩個字,馬上就會在腦海中浮現 1nf,2nf,3nf,bcnf 這些術語,但是若要大家詳細的將這幾個東東的專業定義描述出來。呵呵,至少大部分人都會暈的...
VMware混合雲 掀起你的蓋頭來
vmware混合雲服務 vchs 預計在2013年8月23日正式面向使用者推出。目前開放服務的四個資料中心都在美國。我受邀和全球其他15位vcdx vexpert加入vmware混合雲的earlyaccess program。從而讓我有機會能在這位大家閨秀正式亮相之前一睹芳容。首先 什麼是混合雲。本...
VMware混合雲 掀起你的蓋頭來
vmware混合雲服務 vchs 預計在2013年8月23日正式面向使用者推出。目前開放服務的四個資料中心都在美國。我受邀和全球其他15位vcdx vexpert加入vmware混合雲的earlyaccess program。從而讓我有機會能在這位大家閨秀正式亮相之前一睹芳容。首先 什麼是混合雲。本...