目錄
一、前言
二、應(yīng)用系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)的基本流程
三、數(shù)據(jù)庫模型設(shè)計(jì)
1、概念結(jié)構(gòu)設(shè)計(jì)階段
2、邏輯結(jié)構(gòu)設(shè)計(jì)階段
3、物理結(jié)構(gòu)設(shè)計(jì)階段
四、小結(jié)
一、前言
GaussDB數(shù)據(jù)庫是一款企業(yè)級(jí)分布式數(shù)據(jù)庫,支持集中式和分布式兩種部署形態(tài)。它面向金融互聯(lián)網(wǎng)交易和政企OA/辦公等場(chǎng)景,具有安全可靠、超高性能、簡(jiǎn)單易用等優(yōu)勢(shì)。
在GaussDB中,數(shù)據(jù)建模是非常重要的一部分。數(shù)據(jù)建模是指根據(jù)業(yè)務(wù)需求和數(shù)據(jù)特點(diǎn),將現(xiàn)實(shí)世界中的實(shí)體、屬性、關(guān)系等概念抽象出來,并用一定的方式表示成計(jì)算機(jī)可以理解的形式。數(shù)據(jù)庫模型設(shè)計(jì)的目的是為了建立一個(gè)能夠滿足業(yè)務(wù)需求的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),使得數(shù)據(jù)的存儲(chǔ)、查詢、更新等操作更加高效、可靠、安全。
在GaussDB中,可以使用E-R圖來進(jìn)行數(shù)據(jù)建模,E-R圖也稱實(shí)體-聯(lián)系圖(Entity Relationship Diagram),提供了表示實(shí)體類型、屬性和聯(lián)系的方法,用來描述現(xiàn)實(shí)世界的概念模型,它可以幫助您更好地理解您的業(yè)務(wù)邏輯并將其轉(zhuǎn)換為關(guān)系模型。
二、應(yīng)用系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)的基本流程
應(yīng)用系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)基本流程簡(jiǎn)圖:
第一步:需求分析:主要包括數(shù)據(jù)、功能、性能等
第二步:數(shù)據(jù)庫設(shè)計(jì):主要包括概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)、物理結(jié)構(gòu)設(shè)計(jì)等
第三步:數(shù)據(jù)庫實(shí)施:選擇數(shù)據(jù)庫軟件,并進(jìn)行落地。
第四步:數(shù)據(jù)庫系統(tǒng)運(yùn)行、維護(hù)和優(yōu)化。
其中數(shù)據(jù)庫設(shè)計(jì)(Database Design)是E-R設(shè)計(jì)模型中的主要環(huán)節(jié)。
三、數(shù)據(jù)庫模型設(shè)計(jì)
本節(jié)結(jié)合GaussDB數(shù)據(jù)庫的相關(guān)知識(shí)點(diǎn),以簡(jiǎn)單的訂單模型舉例來演示數(shù)據(jù)庫模型的設(shè)計(jì)過程。
數(shù)據(jù)庫模型設(shè)計(jì)主要分以下3個(gè)階段:
1、概念結(jié)構(gòu)設(shè)計(jì)階段
概念數(shù)據(jù)模型(CDM)是按用戶的觀點(diǎn)來對(duì)數(shù)據(jù)和信息建模,其目標(biāo)是統(tǒng)一業(yè)務(wù)概念,作為業(yè)務(wù)人員和技術(shù)人員之間溝通的橋梁,確定不同實(shí)體之間的最高層次的關(guān)系。其特征包括:
- 面向用戶,反映用戶的業(yè)務(wù)需求
- 抽象性強(qiáng),不涉及具體實(shí)現(xiàn)細(xì)節(jié)
- 層次結(jié)構(gòu)清晰,各層之間有一定的關(guān)系
- 可擴(kuò)展性好,可以方便地添加新的實(shí)體和關(guān)系等。
所以這個(gè)階段,我們主要完成從需求中抽象出示實(shí)體集和關(guān)系集。
示例系統(tǒng):訂單系統(tǒng),實(shí)體(訂單、客戶、供應(yīng)商、商品、地址)。
實(shí)體集之間關(guān)系集梳理:
1)客戶與訂單是一對(duì)多
2)客戶與地址是一對(duì)一
3)供應(yīng)商與地址是一對(duì)一
4)供應(yīng)商與商品是一對(duì)多
5)訂單與商品是一對(duì)多
如圖, 確定不同實(shí)體之間的最高層次的關(guān)系:
2、邏輯結(jié)構(gòu)設(shè)計(jì)階段
邏輯數(shù)據(jù)模型(LDM)盡可能詳細(xì)地描述數(shù)據(jù), 邏輯數(shù)據(jù)模型的特征包括:
- 包括所有實(shí)體和它們之間的關(guān)系
- 指定了每個(gè)實(shí)體的所有屬性
- 指定外鍵(標(biāo)識(shí)不同實(shí)體之間關(guān)系的鍵)
- 關(guān)系表規(guī)范化等。
如圖, 完善每個(gè)實(shí)體的屬性:???????
3、物理結(jié)構(gòu)設(shè)計(jì)階段
物理數(shù)據(jù)模型(PDM)表示如何在數(shù)據(jù)庫中構(gòu)建模型。 物理數(shù)據(jù)庫模型顯示所有表結(jié)構(gòu),包括列名,列數(shù)據(jù)類型,列約束,主鍵,外鍵以及表之間的關(guān)系。物理數(shù)據(jù)模型的功能包括:
- 規(guī)范所有表和列
- 外鍵用于標(biāo)識(shí)表之間的關(guān)系。
- 物理上的考慮可能導(dǎo)致物理數(shù)據(jù)模型與邏輯數(shù)據(jù)模型有差異
- 不同的RDBMS的物理數(shù)據(jù)模型將有所不同,例如MySQL和GaussDB之間列的數(shù)據(jù)類型可能有所不同。
- 目標(biāo)是指定如何用數(shù)據(jù)庫模式來實(shí)現(xiàn)邏輯數(shù)據(jù)模型,以及真正的保存數(shù)據(jù)。
如圖,完成所有實(shí)體轉(zhuǎn)換為表,轉(zhuǎn)換所有關(guān)系集為相關(guān)表的外鍵,轉(zhuǎn)換所有屬性為列。
?
針對(duì)上面的物理數(shù)據(jù)模型設(shè)計(jì)時(shí),GaussDB數(shù)據(jù)庫有如下字段設(shè)置規(guī)范建議:
- 合理選用字符串?dāng)?shù)據(jù)類型。優(yōu)先使用變長(zhǎng)字符類VARCHAR。只有該字段輸入確定為固定字符則使用定長(zhǎng)字符類型,或需要自動(dòng)補(bǔ)充空格,才使用CHAR(n)。
- 字符類型字段不應(yīng)存儲(chǔ)數(shù)字類型的數(shù)據(jù)。如果對(duì)存儲(chǔ)在字符類型字段中的數(shù)據(jù)進(jìn)行數(shù)值計(jì)算,或者與數(shù)值進(jìn)行比較操作(如置于過濾條件中),會(huì)帶來不必要的數(shù)據(jù)類型轉(zhuǎn)換的開銷,同時(shí)該字段上的索引可能失效,影響查詢性能。
- 字符類型字段不應(yīng)存儲(chǔ)時(shí)間或日期類數(shù)據(jù)。如果對(duì)存儲(chǔ)在字符類型字段中的數(shù)據(jù)與日期類數(shù)據(jù)進(jìn)行計(jì)算或比較操作(如置于過濾條件中),會(huì)帶來不必要的數(shù)據(jù)類型轉(zhuǎn)換的開銷,同時(shí)該字段上的索引可能失效,影響查詢性能。
- 對(duì)于明確不存在NULL值的字段加上NOT NULL約束。對(duì)于NOT NULL字段,優(yōu)化器在某些場(chǎng)景下會(huì)進(jìn)行特殊優(yōu)化,可較大提升查詢性能。
- 相關(guān)聯(lián)字段的數(shù)據(jù)類型應(yīng)保持一致。在進(jìn)行關(guān)聯(lián)操作時(shí),如果字段類型不一致,會(huì)帶來數(shù)據(jù)類型轉(zhuǎn)換開銷。
- 大字段(例如varchar(1000)、varchar(4000))不建議超過8個(gè)。
- 字段定義時(shí)建議同時(shí)創(chuàng)建COMMENT注釋信息,以便于未來維護(hù)。
- 不建議對(duì)表預(yù)留字段。大部分場(chǎng)景下可支持快速新增、刪除表字段,或者修改字段的DEFAULT值。
- 盡量使用高效的數(shù)值類數(shù)據(jù)類型。在滿足業(yè)務(wù)精度的情況下,選擇的優(yōu)先級(jí)從高到低依次為整數(shù)、浮點(diǎn)數(shù)、NUMERIC。
- 合理設(shè)置數(shù)值字段的數(shù)據(jù)類型,根據(jù)取值范圍選擇合適的數(shù)值類型,盡量少用NUMERIC/DECIMAL類型。NUMERIC和DECIMAL等價(jià),NUMERIC(或DECIMAL)數(shù)據(jù)類型操作對(duì)CPU消耗較高。
數(shù)據(jù)庫模型設(shè)計(jì)的三個(gè)主要階段匯總?cè)缦拢?/strong>
- 概念數(shù)據(jù)模型設(shè)計(jì)階段:實(shí)體、關(guān)系集
- 邏輯數(shù)據(jù)模型設(shè)計(jì)階段:實(shí)體、關(guān)系集、屬性、主鍵、外鍵
- 物理數(shù)據(jù)模型設(shè)計(jì)階段:表、列名、列數(shù)據(jù)類型、主鍵、外鍵
四、小結(jié)
通常,數(shù)據(jù)建模是為了讓查詢更簡(jiǎn)單、更高效。在現(xiàn)實(shí)場(chǎng)景中,如果要想高效的使用好數(shù)據(jù)庫,那么一個(gè)優(yōu)秀的數(shù)據(jù)建模是必不可少的。數(shù)據(jù)模型是應(yīng)用系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)的基礎(chǔ),而數(shù)據(jù)庫則是數(shù)據(jù)模型實(shí)現(xiàn)的工具。本文建模后是在GaussDB數(shù)據(jù)庫平臺(tái)上進(jìn)行落地實(shí)驗(yàn)的,其邏輯與思路與大多少關(guān)系型數(shù)據(jù)庫基本通用。文章來源:http://www.zghlxwxcb.cn/news/detail-499662.html
——結(jié)束?文章來源地址http://www.zghlxwxcb.cn/news/detail-499662.html
到了這里,關(guān)于數(shù)據(jù)庫模型設(shè)計(jì)案例分享(GaussDB版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!