Loading AI tools
資料庫規範化的一個級別 来自维基百科,自由的百科全书
關係數據庫設計的域鍵範式 (Domain-key normal form, DK/NF),是數據庫規範化的一個級別,以去除關係不包含於域約束(domain constraint)的其他約束。
域約束指出給定屬性的取值範圍。鍵約束指出這幾個屬性唯一確定了表中的一行。
域鍵範式使得一個關係的所有約束都是鍵與域(domain)定義的邏輯蘊涵;因而執行對鍵與域上的限制與條件後,將導致所有的約束都滿足。滿足域鍵範式,使得數據庫避免了不是清晰的域約束或鍵約束的一般性約束。這種一般性約束往往需要特殊編程(如存儲過程)來檢驗是否滿足。
第三範式、BC範式、第四範式與第五範式是域鍵範式的特例。因為函數依賴、多值依賴與連接(join)依賴都可以轉換為(超)鍵。這些範式對域約束沒有討論,可看作沒有域約束。
下表違反了DKNF:
Wealthy Person (富人) |
Wealthy Person Type (富人類型) |
Net Worth in Dollars (美元淨值) |
---|---|---|
Steve | Eccentric Millionaire | 124,543,621 |
Roderick | Evil Billionaire | 6,553,228,893 |
Katrina | Eccentric Billionaire | 8,829,462,998 |
Gary | Evil Millionaire | 495,565,211 |
(假定富人屬性包括了預定集樣本集中所有富人的名字;富人類型屬性取值為'Eccentric Millionaire', 'Eccentric Billionaire', 'Evil Millionaire', 'Evil Billionaire';美元淨值屬性取值為大於等於1,000,000的整數)
在富人類型屬性與美元淨值屬性之間存在約束,即使不能從一個屬性推得另一個屬性:Eccentric Millionaire或Evil Millionaire的美元淨值應在1,000,000 到 999,999,999,而Eccentric Billionaire或Evil Billionaire的美元淨值應大於等於1,000,000,000。該約束既不是域約束(domain constraint)也不是鍵約束(key constraint)。因為不能用域約束或鍵約束來保證表中不出現不一致的Wealthy Person Type / Net Worth。
違反DKNF的問題可把Wealthy Person Type屬性域改為兩個值:'Evil'與'Eccentric',而百萬富翁還是十億富翁的狀態可通過Net Worth in Dollars屬性確定,因此沒有損失信息。
Wealthy Person | Wealthy Person Type | Net Worth in Dollars |
---|---|---|
Steve | Eccentric | 124,543,621 |
Roderick | Evil | 6,553,228,893 |
Katrina | Eccentric | 8,829,462,998 |
Gary | Evil | 495,565,211 |
Status (狀況) |
Minimum (最少) |
Maximum (最多) |
---|---|---|
Millionaire | 1,000,000 | 999,999,999 |
Billionaire | 1,000,000,000 | 999,999,999,999 |
表之間的關係(Relationships)如果不能表示為外鍵,顯然違反域鍵範式。例如,"Parent ID"屬性可以指向幾張表中的某個,這取決於另外的屬性"Parent Type", 這違反了DKNF.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.