数据库设计_数据库设计(一)分析及逻辑设计
?作為一個(gè)后端開(kāi)發(fā)者,數(shù)據(jù)庫(kù)設(shè)計(jì)是我們避不開(kāi)的課題,不管是面試的時(shí)候,還是在真實(shí)工作的情境下,我們的工作不僅僅是將代碼開(kāi)發(fā)出來(lái),根據(jù)開(kāi)發(fā)的項(xiàng)目,設(shè)計(jì)出支撐項(xiàng)目的數(shù)據(jù)庫(kù),也是一個(gè)合格的開(kāi)發(fā)者所應(yīng)該具備的技能之一,這里我將數(shù)據(jù)庫(kù)設(shè)計(jì)分成幾個(gè)重要的部分,以下是我做數(shù)據(jù)庫(kù)設(shè)計(jì)時(shí)的步驟。
數(shù)據(jù)庫(kù)設(shè)計(jì)步驟需求分析
需求分析相信大家都知道,我們?cè)谧鲩_(kāi)發(fā)之前先做需求分析,能讓我們的開(kāi)發(fā)更加順暢,它是我們開(kāi)發(fā)的指南針,好的需求分析能讓我們明確開(kāi)發(fā)的需求,避開(kāi)不需要做的功能需求,減少不必要的時(shí)間,而在數(shù)據(jù)庫(kù)設(shè)計(jì)當(dāng)中,需求分析也同樣重要,當(dāng)然它不需要結(jié)成像是需求文檔一樣的東西,首先要搞清楚為什么要做需求分析。
而經(jīng)過(guò)需求分析,我們也有需要搞清楚的事情,這也是需求分析的目的。首先是項(xiàng)目會(huì)涉及到的實(shí)體,像是在一個(gè)電商項(xiàng)目中,商品就是其中一個(gè)實(shí)體,一般情況下,我們可以將一個(gè)實(shí)體設(shè)計(jì)成一個(gè)表,當(dāng)然這個(gè)不是一定的,需要根據(jù)實(shí)際情況設(shè)計(jì)。其次,也是我認(rèn)為十分重要的一個(gè)步驟,即確定實(shí)體之間的關(guān)系,也就是我們常說(shuō)的一對(duì)一,一對(duì)多以及多對(duì)多。只要確定了這個(gè)關(guān)系,我認(rèn)為就能設(shè)計(jì)出一個(gè)業(yè)務(wù)邏輯上不會(huì)出錯(cuò)的數(shù)據(jù)庫(kù)。
通常情況下,一對(duì)一的表將其中一個(gè)表的主鍵作為另一個(gè)表的外鍵,一對(duì)多的情況將“一”對(duì)應(yīng)的那個(gè)表的主鍵作為“多”的那個(gè)表的主鍵,多對(duì)多的情況就設(shè)計(jì)一個(gè)關(guān)聯(lián)表,將兩表的主鍵存在關(guān)聯(lián)表中做關(guān)聯(lián)關(guān)系,這個(gè)方法在大部分項(xiàng)目中都能夠直接使用,很大程度上減少我設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)間,如果時(shí)間緊急,可以采取這種方式設(shè)計(jì)后再做驗(yàn)證,時(shí)間充足的化還是希望大家按照一定的規(guī)范設(shè)計(jì)數(shù)據(jù)庫(kù)。
最后,確定實(shí)體的屬性,像是商品這個(gè)實(shí)體中,有商品名,價(jià)格等屬性。
邏輯設(shè)計(jì)
以上就是需求分析應(yīng)該做的事情,分析之后,就是做設(shè)計(jì)了,這里涉及到的內(nèi)容就比較理論化,但是前人為我們總結(jié)了設(shè)計(jì)的規(guī)范,讓我們可以比較簡(jiǎn)單的做邏輯設(shè)計(jì)。其中使用到的工具就是 ER 圖。
er圖ER 圖由矩形、菱形、橢圓形和線(xiàn)段組成,使我們可以將需求分析出來(lái)的實(shí)體、屬性、實(shí)體間的關(guān)系由圖體現(xiàn)出來(lái),讓人更加方便看懂理解。
將 ER 圖畫(huà)出來(lái)后,就是使用設(shè)計(jì)范式去做更詳細(xì)的設(shè)計(jì)了。范式是關(guān)系型數(shù)據(jù)庫(kù)的理論基礎(chǔ),是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)過(guò)程中所要遵循的規(guī)則和指導(dǎo)方法,經(jīng)過(guò)設(shè)計(jì)范式的指導(dǎo)設(shè)計(jì),我們就可以得到一個(gè)十分完善,邏輯清晰的數(shù)據(jù)庫(kù)設(shè)計(jì)了。其中,我們主要遵循第一范式、第二范式、第三范式和BC范式,各種范式呈遞次規(guī)范,越高的范式數(shù)據(jù)庫(kù)冗余越小,即滿(mǎn)足第三范式則一定滿(mǎn)足第一第二范式,滿(mǎn)足第二范式一定滿(mǎn)足第一范式。
第一范式:確定表中的每一個(gè)字段都不能再分。下面這張圖就是違反了第一范式,因?yàn)槠渲械挠脩?hù)信息字段還可以再分。
第一范式第二范式:一個(gè)表是復(fù)合主鍵時(shí)(多個(gè)鍵組成唯一識(shí)別),其中一個(gè)候選關(guān)鍵字存在決定非關(guān)鍵字的情況時(shí),就不符合第二范式了,如下圖。
第二范式所以,如果是非復(fù)合主鍵則一定符合第二范式。
第三范式:不能存在傳遞函數(shù)關(guān)系。
第三范式如上圖,商品名稱(chēng)和分類(lèi)在同一表內(nèi),但分類(lèi)又可以決定分類(lèi)描述,這就是傳遞函數(shù)關(guān)系,這時(shí)候,將分類(lèi)和分類(lèi)關(guān)系拆出來(lái)放到另一個(gè)表就可以達(dá)成第三范式了。
第三范式完善以上就是數(shù)據(jù)庫(kù)需求分析和邏輯設(shè)計(jì)的內(nèi)容,這里比較偏向理論,好好的理解這些方法和設(shè)計(jì)范式就能設(shè)計(jì)出項(xiàng)目對(duì)應(yīng)的數(shù)據(jù)庫(kù),能讓我們?nèi)缟茟?yīng)對(duì)工作中需要做的數(shù)據(jù)庫(kù)設(shè)計(jì)相關(guān)的工作了,希望這篇文章能給大家?guī)?lái)幫助,下一篇文章會(huì)講到物理設(shè)計(jì)和數(shù)據(jù)庫(kù)維護(hù)相關(guān)的內(nèi)容,因?yàn)橐粋€(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)僅僅是滿(mǎn)足于業(yè)務(wù)邏輯是不夠的,隨著業(yè)務(wù)的壯大,合理的物理設(shè)計(jì)和維護(hù)十分必要。這里給關(guān)注公眾號(hào)的讀者一個(gè)小小的資源,請(qǐng)?jiān)诤笈_(tái)回復(fù)【數(shù)據(jù)庫(kù)】獲取。
日常發(fā)布初出茅廬程序員一些胡言亂語(yǔ)以及編程資源,漫漫編程路,希望我們一起進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的数据库设计_数据库设计(一)分析及逻辑设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php ajax jquery 表单重复
- 下一篇: 计算机拼图形 比创意教案,拼图形比创意教