優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利
優(yōu)惠活動(dòng) - 12周年慶本月新客福利

注意代價(jià)高的關(guān)系

注意數據模型中的關(guān)系。在設計數據模型時(shí),添加表和列時(shí),或者編寫(xiě)查詢(xún)時(shí),要從長(cháng)遠角度考慮實(shí)體間的關(guān)系如何影響性能和可擴展性的情形。在設計數據模型時(shí),要考慮到將來(lái)的數據庫分割和其他可能的數據需求。在實(shí)現了數據模型后,才發(fā)現它有問(wèn)題,此時(shí)修復的成本很高,可能是設計階段修復它的成本的100倍。事先考慮好,仔細策劃數據模型。要采用范式,考慮將來(lái)可能如何分割數據庫及應用可能有哪些需求。



在生活中,除非我們是受虐狂,否則都會(huì )努力建立和維護平衡的關(guān)系。理想情況下,我們在關(guān)系中投人的與我們得到的基本一樣多。當段人際關(guān)系傾斜向某個(gè)人了,那么另一方就會(huì )不高興,從而重新評估這段關(guān)系,可能就此結束它。雖然本書(shū)不是講人際關(guān)系的,但在人際關(guān)系中存在的付出=回報的等式同樣適用于數據庫中的關(guān)系。

數據庫關(guān)系是由數據模型決定的,而數據模型抓住了數據的基數和參照完整性規則。要理解這是如何實(shí)現的,以及為什么它如此重要,就需要理解構建數據模型需要的基礎步驟,這些步驟將生成數據定義語(yǔ)言DDL)的可,即表和列。雖然這一流程有很多變體,但對于關(guān)系模型來(lái)說(shuō),第一步通常都是定義實(shí)體

實(shí)體可以是獨立存在的任何東西,如物理對象、事件或概念。實(shí)體之間可以存在關(guān)系,實(shí)體和關(guān)系都可以具有描述它們的屬性。打個(gè)比方,實(shí)體就是名詞,關(guān)系就是動(dòng)詞,修飾實(shí)體的屬性就是形容詞,修飾關(guān)系的屬性就是副詞。

實(shí)體可以是某個(gè)事物的實(shí)例,例如客戶(hù)的訂單,可以具有訂單ID和總價(jià)這樣的屬性。把同種類(lèi)型的實(shí)體集合起來(lái)就形成了實(shí)體集。在數據庫中,實(shí)體相當于表中的一行,而實(shí)體集相當于表。描述實(shí)體特有屬性的是表的主鍵。主鍵通過(guò)唯一標識實(shí)體的實(shí)例實(shí)現了實(shí)體完整性。外鍵描述實(shí)體間關(guān)系的特有屬性。外鍵把不同實(shí)體集中的兩個(gè)實(shí)體關(guān)聯(lián)在起,從而實(shí)現了弓引用完整性。最常用的實(shí)體、關(guān)系和屬性的圖解表示法是實(shí)體關(guān)系圖(ERD)。ERD展示了實(shí)體集間的基本關(guān)系,是一對一對多還是多對多

一旦定義和映射了實(shí)體、關(guān)系和屬性,設計數據模型就剩下最后一步了:規范化。規范化數據模型的主要目的是,確保存儲數據的方式允許在保證數據完整性的情況下對數據進(jìn)行插入、更新選擇和刪除的操作傾即CRUD,Create Read Update Delete)不規范的數據模型具有高度的數據冗余,這意味著(zhù)數據完整性問(wèn)題的風(fēng)險更大。范式是逐級構建的,這意味著(zhù)滿(mǎn)足第二范式的數據庫也必須滿(mǎn)足第一范式。下面的補充說(shuō)明介紹了最常見(jiàn)的范式。如果一個(gè)數據庫至少滿(mǎn)足第三范式,就可以認為它是規范的。
 
范式

下面是數據庫中常用的范式。滿(mǎn)足高級范式表明必須滿(mǎn)足低級范式。通常,如果數據庫滿(mǎn)足第三范式,我們就說(shuō)它是規范的。

口第一范式。按照Codd的定義,表最初應該表示一個(gè)關(guān)系且表中沒(méi)有重復的分組。雖然Codd詳細定義了“關(guān)系”,但是“重復的分組”這個(gè)概念仍然引起了爭議。爭論的內容有是否允許表中存在表,是否允許域為空。最重要的概念是能夠創(chuàng )建一個(gè)主關(guān)鍵字。

口第二范式。所有非主關(guān)鍵字域都不能只依賴(lài)于組合關(guān)鍵字的部分。
 
口第三范式。所有非主關(guān)鍵字城必須依賴(lài)于主關(guān)鍵字。Boyce-Cod范式。每個(gè)決定因素都是候選的關(guān)鍵字。

口第四范式。一種記錄類(lèi)型中不存在多值依賴(lài)。

口第五范式。表中的每個(gè)非平凡連接依賴(lài)都是由候選主關(guān)鍵字決定的。

口第六范式。不存在非平凡連接依賴(lài)。

前三種范式的簡(jiǎn)便記憶法是“1-一主關(guān)鍵字,2一完整的主關(guān)鍵字3一只能依賴(lài)于主關(guān)鍵字”。

你可能已經(jīng)想到了,實(shí)體間的關(guān)系會(huì )對數據存儲、提取和更新的有效性產(chǎn)生巨大的影響。由于這些關(guān)系定義了如何分割和共享數據庫,所以它們在擴展中也扮演著(zhù)重要的角色。假設我們想根據訂單確確認服務(wù)對數據庫進(jìn)行Y軸分割,那么如果訂單實(shí)體與其他實(shí)體關(guān)系緊密,那么這種分割就可能造成問(wèn)題。在分割之后再試圖理清這種關(guān)系網(wǎng)很困難。在設計階段多花費點(diǎn)兒時(shí)間,在分割數據庫時(shí)就只需要花費原來(lái)的1/10甚至1/100的精力。

對于擴展性來(lái)說(shuō),數據關(guān)系的最后一個(gè)關(guān)鍵點(diǎn)是在查詢(xún)中如何連接表。當然,這不僅是由數據模型定義的,也是由在應用中創(chuàng )建報表和新頁(yè)面的開(kāi)發(fā)人員定義的。這里我們不是要詳細介紹優(yōu)化查詢(xún)的步驟,要說(shuō)的是新的查詢(xún)都應該由熟悉數據模型且能力根強的DBA申貸,在把們投入到生產(chǎn)環(huán)境之前,還要分析性能方面的特征。

你可能已經(jīng)注意到了,在通過(guò)規范化提高數據完整性的愿望和在數據庫中使用的關(guān)系程度之間是有關(guān)系的。采用的范式越高,在創(chuàng )建表時(shí)的關(guān)系越多,對重復的值這種情況尤其如此。在數據庫設計方面,幾年前被當作原則使用的東西(即采用的范式越高越好),現在大型交易系統設計時(shí),都要進(jìn)行權衡了。這種權衡與風(fēng)險和成本、成本和質(zhì)量、時(shí)間和成本等之間的權衡是相似的,即一方的下降通常會(huì )導致另一方的上升。通常,要提高可擴展性,我們會(huì )降低采用的范式。

因為要連接表,所以SQL査詢(xún)很慢,可以采用以下幾種方法解決。首先是對查詢(xún)進(jìn)行調優(yōu)。如果這種方法無(wú)效,另一種方法是創(chuàng )建視圖、物化視圖、摘要表等,可以對連接進(jìn)行預處理。還有一種方法是不要在査詢(xún)中進(jìn)行連接,而是把數據集讀到應用中,在應用的內存中進(jìn)行連接。雖然這種方法比較復雜,但在數據庫中進(jìn)行連接通常是最難擴展的,而該方法把連接移出了數據庫,放在應用服務(wù)器層上,那么用更多的商用硬件進(jìn)行水平擴展會(huì )更容易一些。最后一個(gè)辦法是追溯到業(yè)務(wù)需求上。通常,我們的業(yè)務(wù)合作伙伴會(huì )提出不同的解決方案,在解釋時(shí)會(huì )說(shuō),現有的請求報表的方法需要增加10%的硬件,而刪除一行會(huì )減小報表的復雜度,而得到的網(wǎng)站設計業(yè)務(wù)價(jià)值基本是相同的。

本文地址:http://havencoinwallet.com//article/3494.html
相關(guān)文章:
最新文章:
国产免费丝袜调教视频爱剪辑|国产小受18asian|国产福利91精品一区二区三区|久久久青草大香|欧美丰满熟妇xxxx性