自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員應知應會之數(shù)據(jù)庫設計的那些事兒

數(shù)據(jù)庫 新聞
在做一個項目之前,完全了解項目用戶的業(yè)務流程,是對于開發(fā)團隊素質(zhì)的一個重要考驗。

對于很多應用系統(tǒng)來說,數(shù)據(jù)庫結(jié)構(gòu)是應用運行的基礎,這就好像房子的地基一樣,地基不牢,地動山搖。當應用程序建立之后,再改數(shù)據(jù)庫表結(jié)構(gòu),就會導致很多不必要的冗余工作量。

然而很多開發(fā)團隊卻非常不重視這個過程,數(shù)據(jù)庫及接口的設計極其隨意。甚至還有一些大神認為,數(shù)據(jù)庫和接口的改變是避免不了的事情,做項目就是做完之后試試看,不行再改??梢哉f,從方法論上就存在問題,就好像修路一樣,修好了挖,挖好了修,反反復復,來來回回,開發(fā)者和用戶都苦不堪言。

說了這么多,下面我們來正式介紹一下數(shù)據(jù)庫設計的整個流程。

數(shù)據(jù)庫設計的基本步驟包括以下幾個方面:

一、需求分析階段

需求分析是整個數(shù)據(jù)庫設計的基礎和核心,需求分析的結(jié)果是否能準確地反映用戶的實際需求,將直接影響到后面各個階段的設計,并影響到設計結(jié)果是否合理、實用。這一階段要收集和分析用戶對系統(tǒng)的信息需求和處理需求,以及后續(xù)可以存在的擴展功能,從而得到設計系統(tǒng)所必需的信息,建立系統(tǒng)的需求說明文檔。

在很多項目中,存在的最大問題就是開發(fā)團隊對于項目,沒有從日常使用者的角度去考慮問題,對項目所涉及的業(yè)務流程不熟悉,完全根據(jù)用戶的描述來被動設計。而往往不懂技術(shù)的用戶描述是不完備的,最終導致完全的項目在用戶試用之后發(fā)現(xiàn)很多問題,導致工作量的大幅增加。

因此,在做一個項目之前,完全了解項目用戶的業(yè)務流程,是對于開發(fā)團隊素質(zhì)的一個重要考驗。

二、概念設計階段

概念設計是數(shù)據(jù)庫設計的關鍵所在,這一階段通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體DBMS的概念模型,并且用E-R圖表示出來。

概念模型也稱為信息模型,用于信息世界的建模,實現(xiàn)了由現(xiàn)實世界到信息世界的第一層抽象。

信息世界涉及的主要概念有:

1、實體(Entity):現(xiàn)實世界中存在的可以相互區(qū)分的事物或概念,如一個學生

2、實體集(Entity Set):同一類實體的集合,如全體學生

3、屬性(Attribute):實體所具有的特征,如學生姓名、性別

4、碼/鍵(Key):唯一標識實體的屬性集,例如學生的學號

5、聯(lián)系(Relationship):實體集之間的對應關系,如一個教師教多個學生、多個學生選多門課

概念模型最常用的表示方法是P.P.S.Chen在1976年提出的實體-聯(lián)系(Entity-Relationship)模型,簡稱E-R模型或E-R圖

三、邏輯結(jié)構(gòu)設計階段

這一階段在概念模型的基礎之上,根據(jù)轉(zhuǎn)換規(guī)則導出一種DBMS支持的邏輯數(shù)據(jù)庫模型,比如說目前最常用的關系型數(shù)據(jù)庫,該模型應滿足數(shù)據(jù)庫存取、一致性及運行等方面的用戶需求,并且在一定程度上,對些模型進行優(yōu)化。

例如,一個一對一的E-R模型,可以建立一個單表,比如說班級,對班主任,是一對一的關系,那么只需要一張表。而一個一對多的關系,則需要兩張表,比如說班級對學生,就需要把班級設置為一張表,而將班級號作為學生表里的一個外鍵。多對多的關系,就需要設計三張表,比如說學生和課程,就需要學生、課程、學生選的課程三張表來反映三者之間的關系。

四、物理結(jié)構(gòu)設計階段

為邏輯數(shù)據(jù)模型選取一個最適合應用環(huán)境的物理結(jié)構(gòu),利用已經(jīng)確定的邏輯結(jié)構(gòu)的結(jié)果以及DBMS提供的方法、技術(shù),以設計出高效可實現(xiàn)的數(shù)據(jù)庫結(jié)構(gòu)。但一般情況下,在關系型數(shù)據(jù)庫中,數(shù)據(jù)的存取對用戶是透明的,所以對物理設計考慮會相對少一點。尤其是現(xiàn)在有了諸如Spring Data Jpa之類的持久層框架之后,開發(fā)者的精力可以主要放在實體之間的關系上面。

五、數(shù)據(jù)庫實施階段

根據(jù)邏輯設計和物理設計的結(jié)果建立數(shù)據(jù)庫,編寫與調(diào)試應用程序,將數(shù)據(jù)錄入到數(shù)據(jù)庫中,同時進行數(shù)據(jù)庫系統(tǒng)的試運行。

以上就是數(shù)據(jù)庫設計的幾個重要步驟,在實際操作中,最重要的是正確劃分實體和實體間的對應關系,而這也是優(yōu)秀開發(fā)者與普通開發(fā)者最大的區(qū)別之一。往往優(yōu)秀的開發(fā)者可以看透一個項目之間存在的實體,和實體間的對應關系,從而方便快捷地確定項目的數(shù)據(jù)庫基礎。而普通或者低劣的開發(fā)人員,則很有可能將實體關系搞得一團糟,最終在實際應用中才發(fā)現(xiàn)表設計存在較大的缺陷,最終不得不耗費大量的工作量來解決這個問題。

就好像地心說時代,天文學家用本輪均輪,等大小齒輪咬合模擬的方式來推演太陽、月亮和各行星的軌道。一開始只有地球、太陽、月亮的時候還很好擬合,但是隨著多顆行星的發(fā)現(xiàn),到了哥白尼時代,需要模擬的齒輪已經(jīng)達到了上百個,導致人們苦不堪言。但是,改成以太陽為中心的話,那么一切就清爽直觀了。

數(shù)據(jù)庫設計也是如此,如果實體之間的關系沒有理順,那么最終將嚴重影響項目的開發(fā)質(zhì)量。讀者們,你們被實體關系設計得很糟糕的數(shù)據(jù)庫結(jié)構(gòu)坑過嗎?如果被坑過,歡迎說出你的故事哦。

責任編輯:張燕妮 來源: Android開發(fā)中文站
相關推薦

2023-05-06 07:24:22

程序員視頻算法

2022-11-04 07:12:24

JavaScript基準測試

2022-11-07 08:51:24

數(shù)據(jù)庫開發(fā)笛卡爾積

2022-12-02 07:16:29

MySQL函數(shù)日期

2013-05-24 09:14:39

國企程序員程序員

2011-05-26 10:04:30

程序員

2011-05-31 09:22:39

程序員

2022-04-18 11:05:36

開源github代碼庫

2010-07-27 16:21:25

程序員

2011-05-31 09:37:53

程序員

2011-06-02 09:56:21

程序員團隊精神

2011-06-02 09:02:36

程序員

2011-05-24 13:47:25

程序員

2021-05-22 10:01:45

PythonPython列表Python程序開發(fā)

2011-05-31 10:50:36

程序員

2011-03-22 10:49:53

2022-07-20 00:03:10

Python列表字典推導

2023-05-10 08:41:40

二叉樹遍歷算法

2013-04-22 09:15:20

2019-01-30 14:14:16

LinuxUNIX操作系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號