記得上學(xué)時(shí)學(xué)數(shù)據(jù)庫(kù),書中說過:“數(shù)據(jù)庫(kù)建模一般實(shí)現(xiàn)到3NF和BCNF,4NF 5NF基本沒用”,造成多年對(duì)4NF和5NF置之不理。
離開學(xué)校7年后的今天,無(wú)事有把數(shù)據(jù)庫(kù)的范式定義拿起來翻翻,發(fā)覺好象我對(duì)4NF和5NF的理解一直有誤?
在做業(yè)務(wù)建模時(shí),不少情況我們會(huì)盡可能地完全反映顯示業(yè)務(wù)關(guān)系,以 廠 采購(gòu)員 和 訂單 為例:
如果業(yè)務(wù)認(rèn)為訂單不屬于特定采購(gòu)員,也即關(guān)系如下:
廠和訂單為1:n的關(guān)系;
廠和采購(gòu)員也為1:n的關(guān)系;
采購(gòu)員與訂單無(wú)關(guān)。
此時(shí),那么我們肯定ORM簡(jiǎn)單得處理為兩個(gè)關(guān)聯(lián)表,這時(shí),不正是符合了4NF么?(如果只建立一個(gè)關(guān)聯(lián)表,表中三個(gè)字段廠id,訂單id,采購(gòu)員id,而后三個(gè)id組成聯(lián)合主鍵,那就是符合了BCNF但不符合4NF了)
而如果關(guān)系更復(fù)雜,一個(gè)訂單可以被多個(gè)采購(gòu)員處理,一個(gè)訂單還可以同屬于多個(gè)廠共享,那么我們一定是建立三個(gè)關(guān)聯(lián)表,獨(dú)立記錄三者間互相的關(guān)系,這不就是遵循了5NF么?
離開學(xué)校7年后的今天,無(wú)事有把數(shù)據(jù)庫(kù)的范式定義拿起來翻翻,發(fā)覺好象我對(duì)4NF和5NF的理解一直有誤?
在做業(yè)務(wù)建模時(shí),不少情況我們會(huì)盡可能地完全反映顯示業(yè)務(wù)關(guān)系,以 廠 采購(gòu)員 和 訂單 為例:
如果業(yè)務(wù)認(rèn)為訂單不屬于特定采購(gòu)員,也即關(guān)系如下:
廠和訂單為1:n的關(guān)系;
廠和采購(gòu)員也為1:n的關(guān)系;
采購(gòu)員與訂單無(wú)關(guān)。
此時(shí),那么我們肯定ORM簡(jiǎn)單得處理為兩個(gè)關(guān)聯(lián)表,這時(shí),不正是符合了4NF么?(如果只建立一個(gè)關(guān)聯(lián)表,表中三個(gè)字段廠id,訂單id,采購(gòu)員id,而后三個(gè)id組成聯(lián)合主鍵,那就是符合了BCNF但不符合4NF了)
而如果關(guān)系更復(fù)雜,一個(gè)訂單可以被多個(gè)采購(gòu)員處理,一個(gè)訂單還可以同屬于多個(gè)廠共享,那么我們一定是建立三個(gè)關(guān)聯(lián)表,獨(dú)立記錄三者間互相的關(guān)系,這不就是遵循了5NF么?