- 軟件需求分析實(shí)戰(zhàn)
- 楊長(zhǎng)春編著
- 1842字
- 2022-07-27 19:16:45
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ì)字段值有沒有什么特殊要求,等等。
- 軟件需求分析實(shí)戰(zhàn)
- Apache Pulsar原理解析與應(yīng)用實(shí)踐
- 結(jié)構(gòu)BIM應(yīng)用教程
- SQL Server應(yīng)用與開發(fā)范例寶典
- 軟件秘笈:設(shè)計(jì)模式那點(diǎn)事
- MATLAB之幻方
- 微信小程序開發(fā)詳解
- 移山之道:VSTS軟件開發(fā)指南
- 分布式高可用算法
- Windows API開發(fā)詳解:函數(shù)、接口、編程實(shí)例
- 軟件性能測(cè)試、分析與調(diào)優(yōu)實(shí)踐之路
- 軟件測(cè)試進(jìn)階之路:測(cè)試路上你問我答
- 穩(wěn)敏兼顧:數(shù)字化研發(fā)管理實(shí)戰(zhàn)
- 中文版 Pro-ENGINEER野火5.0 技術(shù)大全
- JSP應(yīng)用開發(fā)與實(shí)踐