注意代價高的關系

2022-02-01    分類: 網站建設

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

在生活中,除非我們是受虐狂,否則都會努力建立和維護平衡的關系。理想情況下,我們在關系中投人的與我們得到的基本一樣多。當段人際關系傾斜向某個人了,那么另一方就會不高興,從而重新評估這段關系,可能就此結束它。雖然本書不是講人際關系的,但在人際關系中存在的付出=回報的等式同樣適用于數據庫中的關系。
數據庫關系是由數據模型決定的,而數據模型抓住了數據的基數和參照完整性規(guī)則。要理解這是如何實現(xiàn)的,以及為什么它如此重要,就需要理解構建數據模型需要的基礎步驟,這些步驟將生成數據定義語言DDL)的可,即表和列。雖然這一流程有很多變體,但對于關系模型來說,第一步通常都是定義實體
實體可以是獨立存在的任何東西,如物理對象、事件或概念。實體之間可以存在關系,實體和關系都可以具有描述它們的屬性。打個比方,實體就是名詞,關系就是動詞,修飾實體的屬性就是形容詞,修飾關系的屬性就是副詞。
實體可以是某個事物的實例,例如客戶的訂單,可以具有訂單ID和總價這樣的屬性。把同種類型的實體集合起來就形成了實體集。在數據庫中,實體相當于表中的一行,而實體集相當于表。描述實體特有屬性的是表的主鍵。主鍵通過唯一標識實體的實例實現(xiàn)了實體完整性。外鍵描述實體間關系的特有屬性。外鍵把不同實體集中的兩個實體關聯(lián)在起,從而實現(xiàn)了弓引用完整性。最常用的實體、關系和屬性的圖解表示法是實體關系圖(ERD)。ERD展示了實體集間的基本關系,是一對一對多還是多對多
一旦定義和映射了實體、關系和屬性,設計數據模型就剩下最后一步了:規(guī)范化。規(guī)范化數據模型的主要目的是,確保存儲數據的方式允許在保證數據完整性的情況下對數據進行插入、更新選擇和刪除的操作傾即CRUD,CreateReadUpdateDelete)不規(guī)范的數據模型具有高度的數據冗余,這意味著數據完整性問題的風險更大。范式是逐級構建的,這意味著滿足第二范式的數據庫也必須滿足第一范式。下面的補充說明介紹了最常見的范式。如果一個數據庫至少滿足第三范式,就可以認為它是規(guī)范的。
范式
下面是數據庫中常用的范式。滿足高級范式表明必須滿足低級范式。通常,如果數據庫滿足第三范式,我們就說它是規(guī)范的。
口第一范式。按照Codd的定義,表最初應該表示一個關系且表中沒有重復的分組。雖然Codd詳細定義了“關系”,但是“重復的分組”這個概念仍然引起了爭議。爭論的內容有是否允許表中存在表,是否允許域為空。最重要的概念是能夠創(chuàng)建一個主關鍵字。
口第二范式。所有非主關鍵字域都不能只依賴于組合關鍵字的部分。
口第三范式。所有非主關鍵字城必須依賴于主關鍵字。Boyce-Cod范式。每個決定因素都是候選的關鍵字。
口第四范式。一種記錄類型中不存在多值依賴。
口第五范式。表中的每個非平凡連接依賴都是由候選主關鍵字決定的。
口第六范式。不存在非平凡連接依賴。
前三種范式的簡便記憶法是“1-一主關鍵字,2一完整的主關鍵字3一只能依賴于主關鍵字”。
你可能已經想到了,實體間的關系會對數據存儲、提取和更新的有效性產生巨大的影響。由于這些關系定義了如何分割和共享數據庫,所以它們在擴展中也扮演著重要的角色。假設我們想根據訂單確確認服務對數據庫進行Y軸分割,那么如果訂單實體與其他實體關系緊密,那么這種分割就可能造成問題。在分割之后再試圖理清這種關系網很困難。在設計階段多花費點兒時間,在分割數據庫時就只需要花費原來的1/10甚至1/100的精力。
對于擴展性來說,數據關系的最后一個關鍵點是在查詢中如何連接表。當然,這不僅是由數據模型定義的,也是由在應用中創(chuàng)建報表和新頁面的開發(fā)人員定義的。這里我們不是要詳細介紹優(yōu)化查詢的步驟,要說的是新的查詢都應該由熟悉數據模型且能力根強的DBA申貸,在把們投入到生產環(huán)境之前,還要分析性能方面的特征。
你可能已經注意到了,在通過規(guī)范化提高數據完整性的愿望和在數據庫中使用的關系程度之間是有關系的。采用的范式越高,在創(chuàng)建表時的關系越多,對重復的值這種情況尤其如此。在數據庫設計方面,幾年前被當作原則使用的東西(即采用的范式越高越好),現(xiàn)在大型交易系統(tǒng)設計時,都要進行權衡了。這種權衡與風險和成本、成本和質量、時間和成本等之間的權衡是相似的,即一方的下降通常會導致另一方的上升。通常,要提高可擴展性,我們會降低采用的范式。
因為要連接表,所以SQL査詢很慢,可以采用以下幾種方法解決。首先是對查詢進行調優(yōu)。如果這種方法無效,另一種方法是創(chuàng)建視圖、物化視圖、摘要表等,可以對連接進行預處理。還有一種方法是不要在査詢中進行連接,而是把數據集讀到應用中,在應用的內存中進行連接。雖然這種方法比較復雜,但在數據庫中進行連接通常是最難擴展的,而該方法把連接移出了數據庫,放在應用服務器層上,那么用更多的商用硬件進行水平擴展會更容易一些。最后一個辦法是追溯到業(yè)務需求上。通常,我們的業(yè)務合作伙伴會提出不同的解決方案,在解釋時會說,現(xiàn)有的請求報表的方法需要增加10%的硬件,而刪除一行會減小報表的復雜度,而得到的網站設計業(yè)務價值基本是相同的。

網站欄目:注意代價高的關系
標題URL:http://www.bm7419.com/news27/143427.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供響應式網站、關鍵詞優(yōu)化、品牌網站制作網站排名、微信小程序網站制作

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設