時間:2022-11-16 04:30:01 | 來源:信息時代
時間:2022-11-16 04:30:01 來源:信息時代
數(shù)據(jù)庫規(guī)范化設(shè)計 : 為建立結(jié)構(gòu)更合理的關(guān)系數(shù)據(jù)庫,消除存儲異常,減少數(shù)據(jù)冗余,便于插入、刪除和更新等操作,將初步設(shè)計得到的關(guān)系集合轉(zhuǎn)化為滿足一定條件的關(guān)系集合的過程。滿足范式要求的數(shù)據(jù)庫設(shè)計將為得到結(jié)構(gòu)清晰的,同時可避免數(shù)據(jù)冗余和操作異常的數(shù)據(jù)庫奠定基礎(chǔ)。規(guī)范化設(shè)計主要基于規(guī)范化理論,利用形式化方法,基于主鍵和函數(shù)依賴的關(guān)系,對邏輯數(shù)據(jù)模型進行分解,確保設(shè)計所得的數(shù)據(jù)模型結(jié)構(gòu)合理。所采用的手段是在數(shù)據(jù)模型滿足不同規(guī)則的前提下,使數(shù)據(jù)模型具有最小的冗余和最大的穩(wěn)定性,避免非規(guī)范化數(shù)據(jù)庫中的數(shù)據(jù)更新異常,分解之后的關(guān)系模式相對原來的關(guān)系模式降低了部分完整性約束。規(guī)范化過程是模型化和設(shè)計關(guān)系數(shù)據(jù)庫的重要環(huán)節(jié)。
一般而言,范式作為指導(dǎo)性原則提供了一種理論的依據(jù),數(shù)據(jù)庫的邏輯設(shè)計(包括各種表和表間關(guān)系)是優(yōu)化關(guān)系數(shù)據(jù)庫的核心。
關(guān)系模式規(guī)范化設(shè)計的基本思想是通過對關(guān)系模式進行分解,用一組等價的關(guān)系子模式來代替原有的關(guān)系模式,消除數(shù)據(jù)依賴(包括函數(shù)依賴和多值依賴)中不合理的部分,分解后的關(guān)系模式集合應(yīng)當與原關(guān)系模式“等價”,一個關(guān)系僅描述一個實體或者一種實體間的聯(lián)系。這一過程必須在保證無損連接性、保持函數(shù)依賴性的前提下進行,即確保不破壞原有數(shù)據(jù)信息,并可將分解后的關(guān)系通過自然連接恢復(fù)原關(guān)系而不丟失信息,并保持屬性間合理的聯(lián)系。
數(shù)據(jù)庫規(guī)范化設(shè)計的特征就是使用正規(guī)的方法來將數(shù)據(jù)分為多個相關(guān)的表。擁有大量窄表(列較少的表)是規(guī)范化數(shù)據(jù)庫的特征,而擁有少量寬表(列較多的表)是非規(guī)范化數(shù)據(jù)庫的特征。
范式是數(shù)據(jù)庫被規(guī)范化程度或深度的一種衡量方法。范式主要有: 第一范式、第二范式、第三范式、Boyce-Codd范式、第四范式、第五范式。規(guī)范化處理有一個初始需求,即實體中的每個實例都必須有一個唯一的標識或主鍵,對于產(chǎn)品系統(tǒng)來說,通常只到第三范式。從第三范式往上,對其使用通常在應(yīng)用程序中看不到價值或成效。第三范式是標準的,第三范式之上的范式的概念可能會用在特殊的場合中來解決特殊的問題。
規(guī)范設(shè)計的基本規(guī)則遵從概念單一化“一事一表”原則,即一個關(guān)系模式描述一個實體或?qū)嶓w間的一種聯(lián)系。規(guī)范的實質(zhì)就是概念的單一化?;驹瓌t: 每一個表必須有主鍵; 表應(yīng)該只存儲單一類型實體的數(shù)據(jù),試圖在表中存儲過多的信息會妨礙對表的數(shù)據(jù)進行有效、可靠的管理;表應(yīng)避免可為空的列。
表中的列可定義為允許空值。盡管在個別情況下,允許空值有用,但是最好少用空值,因為空值需要進行特殊的處理,這樣會增加數(shù)據(jù)操作的復(fù)雜性。如果某一表中有幾個可為空的列,并且列中的幾行有空值,則應(yīng)考慮將這些列置于鏈接到主表的其他表中。將數(shù)據(jù)存儲在兩個獨立的表中可使主表的設(shè)計更為簡單; 一個表內(nèi)不應(yīng)有重復(fù)的行或重復(fù)的列。
規(guī)范化的缺點是由于分解產(chǎn)生了許多新表,每個表有相對較少的列,且這些列必須使用主鍵/外鍵關(guān)系連接起來,以便將信息一起返回給用戶使用。分解表有兩個重要影響: 第一是性能,合并數(shù)據(jù)需要的連接減慢了處理速度并加重了硬件負擔(dān); 第二是增加了開發(fā)者編寫查詢代碼并返回所需信息的難度,如果表沒有正確地連接,那么關(guān)系數(shù)據(jù)庫就有可能返回笛卡兒積,從而造成許多無用結(jié)果。
反規(guī)范化(denormalization)設(shè)計的基本思想是出于數(shù)據(jù)庫性能原因?qū)σ?guī)范化數(shù)據(jù)庫的再考慮,適當?shù)亟档鸵?guī)范化程度,甚至拋棄關(guān)系模式的范式,修改表結(jié)構(gòu)以允許存在一些冗余數(shù)據(jù)?,F(xiàn)實世界并不總是依從于某一完美的數(shù)學(xué)化的關(guān)系模式,強制性地對事物進行規(guī)范化設(shè)計,形式上顯得簡單化,內(nèi)容上趨于復(fù)雜化,更重要的是導(dǎo)致數(shù)據(jù)庫運行效率的降低。反規(guī)范化不再要求一個表只描述一個實體或者實體間的一種聯(lián)系。其主要目的在于提高數(shù)據(jù)庫的運行效率。但反規(guī)范化也是有代價的,在反規(guī)范化的數(shù)據(jù)庫中,數(shù)據(jù)冗余不斷增長,當一個數(shù)據(jù)庫被反規(guī)范化時,必須考慮如何管理冗余數(shù)據(jù)。
微信公眾號
版權(quán)所有? 億企邦 1997-2022 保留一切法律許可權(quán)利。