成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一步一步設計你的數據庫之不可輕視的需求分析

運維 數據庫運維
一步一步設計你的數據庫四中我們討論了泛化關系、聚合關系、三元關系等高級實體關系模型構件及其語義。從本次講座開始我將引領大家開始數據庫設計之旅,我們將從需求分析開始,途中將經過概念數據建模、多視圖集成、ER模型轉化為SQL、范式化等過程,最終得到完整、可用的SQL表。

引言:一步一步設計你的數據庫四中我們討論了泛化關系、聚合關系、三元關系等高級實體關系模型構件及其語義。從本次講座開始我將引領大家開始數據庫設計之旅,我們將從需求分析開始,途中將經過概念數據建模、多視圖集成、ER模型轉化為SQL、范式化等過程,最終得到完整、可用的SQL表。

需求分析在數據庫生命周期中至關重要,通常也是涉及人員最多的步驟。數據庫設計師在這個階段必須走訪最終用戶,與他們進行訪談,從而確定用戶想在系統中存儲什么數據以及想怎樣使用這些數據。我們將需求分析分為兩個步驟:1.理解用戶需求;2.提取業務規則。這次我們先討論“理解用戶需求”。

[[30880]] 

設計定制化產品——無論是一個數據庫、一幅平面廣告或一個玩具,都是一個“翻譯”的過程。我們需要把浮現在客戶腦海中的模糊想法、愿望挖掘出來,并“翻譯”成滿足他們需求的現實產品。

這個“翻譯”過程的第一步就是理解用戶的需求。設計最好的訂單處理系統對于需要一個電路設計工具的客戶來說毫無意義。對客戶需求理解的不完全會造成錯誤或無用的設計與開發,這浪費了你、你的團隊還有客戶的時間與金錢。(牢記數據庫是整個應用開發的根基)

制定一個計劃

我們首先制定了一個計劃,其中包含挖掘客戶需求的一系列步驟。遵循這些步驟能更好地理解客戶需求,但在一些項目中我們不需要遵循所有的步驟。舉例來說,如果客戶是單個人且需求很明確時,我們就不需要進行“搞清誰是誰”與“頭腦風暴”了。當客戶的數據需要保密時,我們就不能“嘗試客戶的工作”了。在另一些項目中,調整這些步驟的順序會更為合適。例如我們可能在去拜訪客戶和觀察他們工作之前先進行“頭腦風暴”。

以下按照最普遍的順序列出了各個步驟。大家根據不同項目的情況可進行靈活調整,目標只有一個就是更好地理解用戶需求。

  1. 列出問題清單
  2. 拜訪客戶
  3. 搞清誰是誰
  4. 挖掘客戶大腦
  5. 嘗試客戶的工作
  6. 學習現有操作
  7. 頭腦風暴
  8. 展望未來
  9. 理解客戶的質疑
  10. 弄清客戶的真正需求
  11. 優先級
  12. 確認你的理解
  13. 撰寫需求文檔

下面我們將一一解釋每一個步驟。

我們需要思考,向客戶問些什么問題可以幫助我們了解項目的目標和范疇(scope)。以下幾個方面的問題可以作為起始點。

功能:

以下問題主要涉及系統應完成的功能與目標。

  1. 系統應該做些什么?
  2. 為什么你想建這個系統?
  3. 系統看上去應該是怎樣的?
  4. 需要些什么報表?
  5. 用戶需要自己定義新報表嗎?
  6. 系統的操作者會是誰?

數據需求:

這些問題是為了弄清項目的數據需求。了解需要些什么數據能幫助我們定義數據庫表。

  1. 系統界面上需要展現哪些數據?
  2. 這些數據應該由誰來提供?
  3. 這些數據是如何關聯的?
  4. 這些工作現在是如何處理的?數據來自哪里?

數據完整性:

這些問題能幫助我們在構建數據庫時定義完整性約束。

  1. 哪些數據是必須填寫的?(eg: 一條客戶記錄必須有電話信息嗎?)
  2. 數據的有效域是什么?(eg: 電話號碼是否有格式規定?地址數據應有多長?)
  3. 系統是否需要根據郵編來檢驗城市的有效性?
  4. 系統中是否必須在定義了客戶之后才能下訂單?
  5. 系統要求多高的可用性等級?(系統需要7×24的可用性嗎?數據的備份頻率要多高?)

安全性:

這些問題能幫助我們了解客戶對權限控制與審計方面的需求。

  1. 是否每個用戶都需要一個不同的密碼?
  2. 是否需要控制不同的用戶所能訪問的數據?(eg: 銷售代表有權限看到客戶的信用卡賬號,但訂單錄入專員卻不能)
  3. 存儲在數據庫中的數據是否需要加密?
  4. 誰做了什么操作是否需要記錄以便于審計?(eg: 記錄銷售代表提高客戶級別的操作,在需要時可以追溯操作的原因)
  5. 系統中的客戶分成幾個級別?每個級別的客戶有多少?
  6. 是否已有文檔記錄了用戶的工作與權責?

環境:

這些問題能幫助我們了解當前項目將代替其他什么系統或流程,以及項目將與其他哪些系統進行交互。

1.當前項目是要代替或升級現有的某系統嗎?

•是否有描述現有系統的文檔?

•現有系統的哪些功能是需要的?哪些是不需要的?

•現有系統處理些什么數據?這些數據是如何存儲的?數據之間是如何關聯的?

•是否有關于現有系統數據的文檔?

2.當前項目必須與其他哪些系統交互?

•項目與其他系統之間如何交互?

•新項目是否需要向現有系統提供數據?如何提供?

•新項目是否需要接收現有系統的數據?如何接收?

•是否有關于其他系統的文檔?

3.客戶的整個業務流程是怎樣的?(了解在整個業務流程中當前項目的作用)

拜訪客戶

了解我們要設計和搭建的系統的最好方式是詢問客戶。拿著我們在上一步中準備的問題清單安排與客戶進行會面。這不會像閑聊那么輕松,向客戶了解需求是一個冗長且折磨人的過程。

有時我們的窮追猛問會使客戶筋疲力竭感到不快。在這些時候我們必須更為耐心,可以分幾次多次會議來了解需求,每次針對幾個問題或流程。我們的目標是對我們要解決的問題有一個完全且徹底的理解。

即使我們的項目只是去解決整個業務中的一小部分問題,我們也要試圖去了解客戶的整體業務流程,這可能會給我們帶來意想不到的收獲。

搞清誰是誰

意識到不同的客戶可能對項目有不同的愿景。我們需要分辨出誰是領導,誰是積極支持者,誰是旁觀者,誰是唱反調者。

以下列出了一些常見的客戶角色:

  1. 項目發起人——一般是管理層的某位領導,他是項目的最高推動者。他會為項目協調資源,解決項目遇到的一些障礙,但他不會參與到項目每天的事務中。
  2. 項目執行負責人——他對于客戶的需求和整個業務最為了解。他是了解用戶需求階段最重要的人,他必須有足夠的時間來幫助我們定義項目目標以及回答我們的問題。當別人對某業務環節遲疑不決時,我們需要向他請教。
  3. 客戶代表——客戶代表是回答我們問題的人,他們也可能成為系統的最終用戶。他們可能是某一部分業務的專家,我們需要與多個客戶代表進行訪談來了解業務全貌。
  4. 利益相關者——這是項目將影響到的人,其中某些人可能同時也是客戶代表。這些人可能對項目也有興趣,但未必對系統都有發言權。我們在進行系統設計時也需要考慮對這些人的影響(特別是附帶損害)。
  5. 唱反調者——這是我們需要關注的一些人。如果唱反調者只是讓其他人理性或現實地來看待項目,而并不是徹底反對這個項目的話,他將是我們非常好的資源,他將幫助我們說服其他對項目抱有不切實幻想的客戶。而如果唱反調者對整個項目抱有抵觸時,我們就必須非常小心,有時需要項目執行負責人出面來協調這些人。

挖掘客戶大腦

一旦搞清楚誰是誰之后,我們就要與項目執行負責人討論客戶需要什么。客戶希望的解決方案是怎樣的,需要包含什么數據,怎樣呈現,以及不同數據之間如何關聯。

與盡可能多的利益相關者進行交流,我們需要考慮每個人的意見,但心中要牢記項目執行負責人最為理解客戶的需求并具有最終決定權。

根據項目的規模,這一過程短則幾個小時,長則需要幾周才能完成。

嘗試客戶的工作

觀察客戶每日的工作能幫助我們更好的理解業務。如果我們能做一會兒客戶的工作來了解其中包括的內容那就最好了。

即使我們不能實際嘗試客戶的工作,一般我們還是可以坐在他們身邊近距離觀察。告訴客戶我們將稍稍降低他們的工作效率并問一些愚蠢且惱人的問題,之后我們就可以開問了。在這個過程中要進行記錄,學習盡可能多的東西。有些時候外行者的一些看法可能轉化為客戶怎么也不會想到的好主意。

學習現有操作

在嘗試客戶的工作之后,我們還可以看一下是否有其他途徑能了解現有流程。通常公司有描述客戶角色和職責的操作手冊或文檔。

尋找客戶現在使用的數據存儲方式,可能是關系型數據庫系統或是電子表格或是紙質的單據等等。了解這些數據是怎樣使用的,之間是如何關聯的。一般物理數據庫之間是通過包含冗余信息來相互關聯的,如:客戶ID。

頭腦風暴

此刻我們已經對客戶的業務和需求較為了解了。為了確認沒有什么遺漏,我們需要安排頭腦風暴。召集項目執行負責人和盡可能多的客戶代表與利益相關者,向他們描述前期了解到的需求情況,之后讓他們暢所欲言談談其中有什么問題或還缺什么。

在這個過程中我們不急于答應或排除任何客戶的要求,我們先把客戶說到的東西記錄下來,并確定這些方面我們已經考慮到了。在正式開發前,我們會與項目執行負責人一起根據項目的規模與交付期限確定需求的優先級。

展望未來

在頭腦風暴過程中思考一下將來的需求。問問客戶他們的業務在將來是否會變化或他們希望系統將來能包含什么功能。

我們可以把他們的一些想法放入當前的項目中,即使不能也可以使我們知道將來可能會有些什么擴展,在設計數據庫時我們能預先留有余地。

理解客戶的質疑

一些熱心且懂些技術的用戶會跑來建議我們如何設計系統,應該創建怎樣結構的數據表。我們可能覺得這些建議毫無意義甚至可笑。但在忽視這些建議之前我們應謹慎思考用戶提出這些建議或質疑的深層原因是什么。客戶比我們更了解業務,他們的建議或質疑中可能蘊含著我們還未了解到的業務變化點或某些特殊業務情況。

弄清客戶的真正需求

有時客戶并不了解自己的真正需求。他們能看到問題的表象,但未必清楚其根源。我們需要幫助客戶尋找到問題的根源并針對問題的源頭提出解決方案。

有時客戶認為數據庫或新系統能神奇般的提高銷售,減少成本。事實上一個設計精良的數據庫能減少輸入差錯,提高操作效率,提供數據報表,幫助客戶管理數據等等。我們在與客戶溝通的過程中需要告訴他們新系統能做些什么,不能做些什么,讓客戶建立起正確的預期。

優先級

經過先前的步驟,我們已列出一張長長的期望功能列表。其中的某些功能可能不切實際或超出了當前項目的范疇。為了使項目規模可控,我們要與客戶一起定義功能的優先級。

一般我們可以把功能分為三個等級。第一優先級是在本期開發中必須包含的功能,沒有完成這些功能意味著項目的失敗。第二優先級是可以放到下一期開發的功能,當第一優先級的功能完成后,我們可以把第二優先級的部分功能提到當期開發。第三優先級是那些相對不重要或超出項目范疇的功能,我們可以忽略這些功能。

有些情況下優先級是可能轉化的。當第一優先級的某功能非常難實現時,我們可以與客戶進行溝通,確認該功能是否如此重要,是否能移到第二優先級中以避免影響項目進度。當第二優先級中的某些功能很容易實現,我們可以把該功能調整到第一優先級列表中。但做這些調整之前必須與客戶溝通,得到客戶的認可。

驗證你的理解

梳理我們對業務和需求的理解,并一一與客戶進行確認。當客戶說“但是”、“除了”、“有時”等詞時,我們要特別當心,確認客戶只是強調了我們已經知道的東西,而沒有出現新的情況。在這個階段客戶可能會想到他們之前沒有考慮到的例外情況。

例外情況是數據庫設計的大害。在需求分析階段把例外情況挖掘出來,我們才能在數據庫設計時有所準備。例如,我們向客戶確認退貨流程說:“到這里收貨員會輸入RMA號并點擊完成按鈕是嗎?”客戶可能會說:“嗯…這是大多數情況,但有時沒有RMA號,收貨員會填入None。”這就是一個客戶之前沒有告訴我們的重要例外情況,我們必須立刻記錄下來。再有一個例子,假設客戶使用的紙質訂單有配送地址與賬單地址兩個欄目。我們向客戶確認時說:“訂單需要有一個配送地址和一個賬單地址。”客戶打斷說:“有時我們需要兩個配送地址,因為訂單不同部分可能要送到不同的地方。”,并找出一張訂單,第二個配送地址被標注在訂單的邊沿處。這是一個重大例外,在紙上可以很容易的進行標注,但在數據庫的一個表單元中增加一個地址是不可能的。只有知道這一例外,我們才能用設計的方法解決這一需求。

撰寫需求文檔

需求文檔描述了我們要構建的系統,該文檔也被稱為需求規格說明。需求文檔要講清楚我們將構建怎樣的系統,該系統會完成什么工作,包含哪些功能點,并描述客戶如何使用該系統來解決他們的問題。需求文檔明確了項目將完成的功能,這也避免了系統交付時出現爭執的情況。

需求文檔中應定義可交付成果,即里程碑。里程碑是可直觀展現并能驗證的中間成果。客戶通過里程碑能衡量項目的進度。在需求文檔中還需定義最終交付成果,這也是確定項目是否完成的標準。

用例圖是一種非常好的需求分析工具,可以作為需求文檔的一部分。用例圖的最主要功能就是用來表達系統的功能性需求或行為。用例圖從業務角度上體現誰來使用系統、用戶希望系統提供什么樣的服務,以及用戶需要為系統提供的服務,也便于軟件開發人員最終實現這些功能。在官方文檔中用例圖包含六個元素,分別是:參與者(Actor)、用例(Use Case)、關聯關系(Association)、包含關系(Include)、擴展關系(Extend)以及泛化關系(Generalization)。但是有些UML的繪圖工具多提供了一種直接關聯關系(Directed Association)。

  1. 參與者:是指用戶在系統中扮演的角色
  2. 用例:是指外部可見的系統功能,對系統提供的服務進行描述
  3. 關聯關系:連接參與者和用例,表示該參與者代表的外部系統實體與該用例描述的系統需求有關
  4. 包含關系:是來自于用例的抽象,即從數個不同的Use Case中,分離出公共的部分,而成為可以復用的用例
  5. 擴展關系:表示某一個用例的對話流程中,可能會根據條件臨時插入另外一個用例,而前者稱為基礎用例后者稱為擴展用例
  6. 泛化關系:一個用例可以被特別列舉為一個或多個用例,這被稱為用例泛化

eg:用戶管理的用例圖如下所示,圖中人形圖標表示參與者,橢圓表示用例(圖的出處請參見“總結與參考”)

 

[[30882]] 

主要內容回顧

1. 搞清哪個客戶扮演哪個角色

2. 從客戶的腦海中挖掘信息

3. 尋找關于用戶角色、職責、現有流程和現有數據的文檔

4. 觀察客戶的工作,學習他們的業務操作

5. 進行頭腦風暴,把收集到的功能需求點按優先級分成第一、第二和第三級

6. 確認對客戶需求的理解

7. 撰寫需求文檔,包含可驗證的里程碑和用例

原文鏈接:http://www.cnblogs.com/DBFocus/archive/2011/05/28/2061142.html

【編輯推薦】

  1. 一步一步設計你的數據庫一
  2. 一步一步設計你的數據庫二
  3. 一步一步設計你的數據庫三
  4. 一步一步設計你的數據庫四
  5. 數據庫設計,你了解多少 

 

責任編輯:艾婧 來源: 博客園
相關推薦

2011-10-13 10:18:50

設計數據庫

2011-03-28 13:47:12

數據庫設計

2011-05-10 09:19:55

數據庫設計

2011-06-09 15:16:54

數據庫設計

2011-04-25 15:22:26

數據庫設計

2011-04-11 14:51:25

數據庫設計

2013-03-18 16:09:27

JavaEEOpenfire

2022-08-29 15:19:09

CSS煙花動畫

2009-07-06 19:29:37

云計算私有云服務器虛擬化

2012-03-22 10:33:33

思杰XenDesktop

2022-09-30 15:37:19

Web網站服務器

2021-03-17 07:07:21

系統程序員SDI

2023-09-05 07:52:43

2017-08-24 08:31:41

2019-11-04 10:06:19

MySQL索引

2010-07-12 17:10:23

Android應用程序

2017-11-29 11:14:52

離線緩存URL協議緩存

2020-02-02 19:53:57

數據庫數據庫優化SQL優化

2011-06-07 16:03:48

匿名SQL Server

2018-03-07 15:24:41

PythonMySQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97色在线视频| 99热在线观看精品 | 久久久噜噜噜www成人网 | 密室大逃脱第六季大神版在线观看 | 91大片| www.成人免费视频 | 中文字幕一区二区三区在线乱码 | 少妇无套高潮一二三区 | 国产福利网站 | 日韩av在线一区 | 国产精品欧美一区二区三区 | www国产成人免费观看视频,深夜成人网 | 亚洲成人自拍 | 欧美成年网站 | 日日操日日干 | 91超碰caoporn97人人 | 亚洲天堂色 | 中文字幕不卡视频在线观看 | 午夜精品影院 | 国产欧美日韩一区二区三区在线观看 | 四虎在线观看 | 亚洲一区视频在线播放 | 国产精品不卡视频 | 精品国产不卡一区二区三区 | 国产一区二区三区在线观看免费 | 少妇特黄a一区二区三区88av | 福利社午夜影院 | 成人黄色在线 | 精品久久久久久久久久久久 | 九色一区| 欧美不卡网站 | 香蕉二区| 国产精品欧美一区二区三区 | 欧美精品一区二区三区四区五区 | 在线观看国产视频 | 成人一区二区三区在线 | 日本a级大片 | 男人的天堂久久 | 丁香久久 | 午夜一级大片 | 91亚洲精华国产 |