官术网_书友最值得收藏!

1.2.4 數(shù)據(jù)建模

我們使用的是關(guān)系型數(shù)據(jù)庫,數(shù)據(jù)建模就是設(shè)計(jì)數(shù)據(jù)庫的表結(jié)構(gòu),這項(xiàng)工作可以在功能設(shè)計(jì)之前,也可以在功能設(shè)計(jì)之后,也可以同時(shí)進(jìn)行,不同的團(tuán)隊(duì)有不同的工作方式。一般來說,越是復(fù)雜、大型的系統(tǒng),數(shù)據(jù)建模工作越重要,也越應(yīng)該盡早進(jìn)行。良好的數(shù)據(jù)庫結(jié)構(gòu)可以讓數(shù)據(jù)流清晰,可以降低功能設(shè)計(jì)與開發(fā)的難度,特別是一旦發(fā)生了需求變更,可以靈活應(yīng)對(duì)。對(duì)軟件開發(fā)有點(diǎn)兒經(jīng)驗(yàn)的人都知道,一旦軟件投入使用,修改數(shù)據(jù)庫結(jié)構(gòu)是非常致命的。

1.實(shí)體關(guān)系

所謂實(shí)體,可以理解為可以看得見摸得著的事物的種類,如員工、供應(yīng)商、原料等。注意,數(shù)據(jù)庫設(shè)計(jì)所說的實(shí)體是事物的種類,不是個(gè)體,“員工”是一種實(shí)體,而“張三”只是這種實(shí)體下的一個(gè)實(shí)例。每一種實(shí)體都有若干屬性信息,如“員工”實(shí)體,包含工號(hào)、身份證號(hào)碼、生日等各種屬性。

在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)之前,首先要分析好本系統(tǒng)需要管理哪些實(shí)體,這些實(shí)體的關(guān)系如何。相信大部分讀者都知道實(shí)體關(guān)系圖(E-R圖),這個(gè)工具就是用來分析實(shí)體關(guān)系的,本書以實(shí)戰(zhàn)為宗旨,不會(huì)在這方面說得太多,但并不表示這方面的知識(shí)不重要,相反,在進(jìn)行數(shù)據(jù)庫設(shè)計(jì)時(shí),它應(yīng)該始終在腦中盤旋。

現(xiàn)實(shí)世界中實(shí)體之間的關(guān)系一般有三種:一對(duì)一、一對(duì)多、多對(duì)多。

一對(duì)一的關(guān)系:如果實(shí)體A與實(shí)體B是一對(duì)一的關(guān)系,那么表示實(shí)體A中的一個(gè)實(shí)例,在實(shí)體B中或者沒有實(shí)例,或者只有唯一一個(gè)實(shí)例可以與之對(duì)應(yīng),并且,實(shí)體B中的一個(gè)實(shí)例,在實(shí)體A中也是或者沒有實(shí)例,或者只有唯一一個(gè)實(shí)例可以與之對(duì)應(yīng)。

一對(duì)多的關(guān)系:如果實(shí)體A與實(shí)體B是一對(duì)多的關(guān)系,那么表示實(shí)體A中的一個(gè)實(shí)例,在實(shí)體B中可以對(duì)應(yīng)多個(gè)實(shí)例,而實(shí)體B中的一個(gè)實(shí)例,在實(shí)體A中只能對(duì)應(yīng)一個(gè)實(shí)例。

多對(duì)多的關(guān)系:如果實(shí)體A與實(shí)體B是多對(duì)多的關(guān)系,那么表示實(shí)體A中的一個(gè)實(shí)例,在實(shí)體B中可以對(duì)應(yīng)多個(gè)實(shí)例,而實(shí)體B中的一個(gè)實(shí)例,在實(shí)體A中也可以對(duì)應(yīng)多個(gè)實(shí)例。

在現(xiàn)實(shí)業(yè)務(wù)中,一對(duì)一的關(guān)系其實(shí)非常少,一對(duì)多的關(guān)系也不多見,大部分情況下都是多對(duì)多的關(guān)系。

2.范式

所謂范式,是指數(shù)據(jù)庫中的表滿足的準(zhǔn)則。

第一范式,所有表的屬性(在數(shù)據(jù)庫中,屬性就是字段,這兩者是同義詞)不可分。這個(gè)大概是歷史遺留問題,對(duì)于關(guān)系型數(shù)據(jù)庫管理系統(tǒng)來說,表的屬性都是不可分的。

第二范式,所有表的非主屬性依賴于主屬性。這個(gè)可以理解成所有表都需要有個(gè)關(guān)鍵字,只要有關(guān)鍵字自然就滿足了第二范式。

第三范式,所有表的非主屬性只依賴于主屬性。這個(gè)可以理解成,所有非主屬性不會(huì)依賴于其他非主屬性。假設(shè)有個(gè)訂單表管理銷售訂單,在這個(gè)表里面存儲(chǔ)客戶信息時(shí)(訂單號(hào)為主屬性,客戶依賴于訂單號(hào)),只要存儲(chǔ)客戶代號(hào)就可以了,不要把客戶名稱也存儲(chǔ)在這里。

BC范式,這是第三范式的補(bǔ)充,針對(duì)那種主屬性有多個(gè)字段的表,所有非主屬性依賴于主屬性,但不能只依賴于主屬性的一部分字段。

在設(shè)計(jì)數(shù)據(jù)庫時(shí),一個(gè)重要的思想是,不能違反范式,如果違反范式,那么要有這么做的充足理由,并且對(duì)后果有清醒的認(rèn)識(shí)。

3.?dāng)?shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫設(shè)計(jì)就是設(shè)計(jì)本軟件在數(shù)據(jù)庫中需要哪些表,這些表有什么關(guān)系,每個(gè)表包括哪些字段等。

表:表是根據(jù)實(shí)體設(shè)計(jì)的,但要知道,數(shù)據(jù)庫中的表跟實(shí)體之間是有本質(zhì)區(qū)別的,現(xiàn)實(shí)世界中的同一實(shí)體,在數(shù)據(jù)庫設(shè)計(jì)時(shí)可能會(huì)根據(jù)業(yè)務(wù)要求設(shè)計(jì)多個(gè)表來表達(dá)它,因?yàn)樵诓煌臉I(yè)務(wù)場(chǎng)景中,需要處理、保存的屬性信息區(qū)別很大;也有可能在現(xiàn)實(shí)世界中的多個(gè)實(shí)體,在數(shù)據(jù)庫設(shè)計(jì)時(shí)只設(shè)計(jì)一個(gè)表來表達(dá)它,因?yàn)殡m然這些實(shí)體牽涉到不同的業(yè)務(wù)場(chǎng)景,但需要處理、保存的屬性信息相同。

表的關(guān)系:數(shù)據(jù)庫中表的關(guān)系有兩種,一對(duì)一與一對(duì)多。數(shù)據(jù)庫中的表是沒有多對(duì)多的直接關(guān)系的,一般情況下,現(xiàn)實(shí)業(yè)務(wù)中一個(gè)多對(duì)多的關(guān)系會(huì)被轉(zhuǎn)換成數(shù)據(jù)庫中的兩個(gè)一對(duì)多的關(guān)系。數(shù)據(jù)庫中表跟表之間的關(guān)系絕大部分都是一對(duì)多的關(guān)系,在數(shù)據(jù)庫中通過在“多”表中建立外鍵(Foreign Key)來建立這種關(guān)系。一對(duì)一關(guān)系在數(shù)據(jù)庫設(shè)計(jì)中出現(xiàn)得不多。

字段:對(duì)字段的處理比對(duì)表、關(guān)系的處理要簡(jiǎn)單得多,無非就是根據(jù)業(yè)務(wù)上需要處理的信息決定在表中設(shè)計(jì)哪些字段,根據(jù)信息的內(nèi)容決定使用什么數(shù)據(jù)類型、需要的字段長(zhǎng)度等。另外,即使字段設(shè)計(jì)出了問題,對(duì)未來工作的影響也小得多,一般不會(huì)像表與表關(guān)系出問題那樣傷筋動(dòng)骨。

數(shù)據(jù)字典:數(shù)據(jù)建模完成后,需要有文檔對(duì)這個(gè)數(shù)據(jù)模型進(jìn)行詳細(xì)說明,這就是數(shù)據(jù)字典應(yīng)該充當(dāng)?shù)慕巧?shù)據(jù)字典需要描述的內(nèi)容主要包括:這個(gè)數(shù)據(jù)模型中有哪些表,每個(gè)表包括哪些字段,每個(gè)字段的類型、長(zhǎng)度、取值范圍是什么,哪些字段是外鍵關(guān)聯(lián)字段,對(duì)字段值有沒有什么特殊要求,等等。

主站蜘蛛池模板: 江达县| 淅川县| 囊谦县| 会昌县| 神木县| 澎湖县| 乌兰县| 新昌县| 汉川市| 崇州市| 阿图什市| 讷河市| 常熟市| 微博| 巫山县| 会宁县| 庆阳市| 安达市| 红安县| 湛江市| 虹口区| 吉首市| 鹤峰县| 浠水县| 新疆| 哈尔滨市| 沭阳县| 衡水市| 大埔县| 石狮市| 康乐县| 宝清县| 吉木乃县| 方城县| 同德县| 同江市| 江川县| 兴化市| 固始县| 巴塘县| 寿光市|