域鍵範式
關係資料庫設計的域鍵範式( Domain-key normal form ,DK / NF),是資料庫規範化的一个級別,以去除關係無包含著域的約束(domain constraint)的其他的約束。
域約束指出予定屬性的取值範圍。鍵約束指出這幾个屬性唯一確定了表中的一行。
域鍵範式予一个關係的所有的約束攏是鍵和域(domain)定義的邏輯蘊涵;因為執行對鍵與域的限制佮條件了後,共致使所有的約束攏滿足。滿足域鍵範式,予資料庫避免著毋是清楚的域約束抑是鍵約束的一般性約束。這種一般性約束往往需要特殊編程(如存儲過程)來檢驗敢有滿足。
第三範式、BC 範式、第四範式佮第五範式是域鍵範式的特例。因為函數依賴、多值依賴佮連接(join)依賴攏會當轉換做(超)鍵。遮的範勢相信若無討論,通看干焦賰的約束。
例
下跤是違反著 DKNF:
( 假定好額人屬性包括了預定集樣本集中所有好額人的名;富人類型屬性取值為'Eccentric Millionaire','Eccentric Billionaire','Evil Millionaire','Evil Billionaire';美金淨值屬性取值為大於等於一 , 零 , 零的整數 )
佇富人類型屬性佮美金淨值屬性之間存在約束,就算袂當對一个屬性捒甲另外一个屬性:Eccentric Millionaire 抑是 Evil Millionaire 的美金淨值應該佇一 , 零 , 空到九百九十九 , 九百九十九 , 九百九十九,而且 Eccentric Billionaire 抑是 Evil Billionaire 的美金淨值應大於等於一 , 零 , 零 , 零。該約束既然毋是域約束(domain constraint)嘛毋是鍵約束(key constraint)。 因為袂使用域約束抑是鍵約束來保證表中無出現無一致的 Wealthy Person Type / Net Worth。
違反 DKNF 的問題會當共 Wealthy Person Type 屬性域改做兩个值:'Evil'佮'Eccentric',百萬富翁抑是十億富翁的狀態會當通過 Net Worth in Dollars 屬性確定,因此無損失信息。
外鍵
表之間的關係(Relationships)若袂當表示為外鍵,顯然違反著域鍵範式。比如講," Parent ID " 屬性會當指向幾張表示的某一个,這就決定佇另外的屬性 " Parent Type " , 這違反了 DKNF .
參見
- 引用完整性
- 資料庫正規化
參考文獻
外部連結
- Database Normalization Basics by Mike Chapple ( About . com )
- An Introduction to Database Normalization by Mike Hillyer .
- Normalization by ITS , University of Texas .
- A tutorial on the first 三 normal forms by Fred Coulson
- Description of the database normalization basics by Microsoft