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