㈠ 資料庫設計
說起資料庫設計,相信大家都明白怎麼回事,但說起資料庫設計的重要性,我想大家也只是停留在概念上而已,到底如何重要?怎麼重要呢?今天就將我至今為止的理解向大家闡述下。
一個不良的資料庫設計,必然會造成很多問題,輕則增減欄位,重則系統無法運行。我先來說說資料庫設計不合理的表現吧:
1. 與需求不符
因為這個原因造成的改動量往往是最大。如果進入編碼階段的話,很可能會直接讓你崩潰掉。
2. 性能低下
含有大數據量的表之間的關聯過多;沒有合理的欄位設計來用於查詢而造成的SQL查詢語句很復雜;對於大數據量的表沒有採用有效的手段去處理;濫用視圖等。
3. 數據完整性喪失
含有主外鍵關系的表之間關聯欄位的設計方式不合理,造成更新與刪除操作後程序容易出錯或不完善;使用了已經刪除或丟失掉的數據。
4. 可擴展性性太差
表設計的與業務綁定的太緊密、單一,造成表的可拓展性、可修改性太差,無法新需求的要求。
5. 非必要數據冗餘量太大
沒用的垃圾數據存儲過多,不僅佔用資源,還影響查詢效率。
6. 不利於計算或統計
缺少必要的聯系性或統計性欄位或用於計算統計的欄位分散於多個表中,造成計算統計的步驟繁瑣,甚至無法計算統計。
7. 沒有詳盡的數據記錄信息
缺少必要的欄位,造成無法跟蹤數據變化、用戶操作,也無法進行數據分析。
8. 表之間的耦合性太大
多張表之間關聯的過於緊密,造成一張表發生變化而影響到其他表。
9. 欄位設計考慮不周
欄位長度過短或欄位類型過於明確,造成可發揮、可拓展的空間太小。
大多數的程序員對於軟體開發的出發點認識不是很明確,總是認為實現功能才是重要的,在簡單了解完基本需求後就急忙進入編碼階段,對於資料庫設計思考的比較少、比較簡單,大多設計都只停留在表面上,這往往是要命的,會為系統留下很多隱患。要麼是寫代碼開發過程中才發現問題,要麼就是系統上線運轉後沒多久就出現問題,還有可能給後期維護增加了很多工作量。如果到了那個時候再想修改資料庫設計或進行優化等同於推翻重來。
資料庫是整個軟體應用的根基,是軟體設計的起點,它起著決定性的質變作用,因此我們必須對資料庫設計高度重視起來,培養設計良好資料庫的習慣,是一個優秀的軟體設計師所必須具備的基本素質條件!
那麼我們要做到什麼程度才是對的呢?下面就說說資料庫設計的原則
1. 資料庫設計最起碼要佔用整個項目開發的40%以上的時間
資料庫是需求的直觀反應和表現,因此設計時必須要切實符合用戶的需求,要多次與用戶溝通交流來細化需求,將需求中的要求和每一次的變化都要一一體現在資料庫的設計當中。如果需求不明確,就要分析不確定的因素,設計表時就要事先預留出可變通的欄位,正所謂「有備無患」。
2. 資料庫設計不僅僅停留於頁面demo的表面
頁面內容所需要的欄位,在資料庫設計中只是一部分,還有系統運轉、模塊交互、中轉數據、表之間的聯系等等所需要的欄位,因此資料庫設計絕對不是簡單的基本數據存儲,還有邏輯數據存儲。
3. 資料庫設計完成後,項目80%的設計開發在你腦海中就已經完成了
每個欄位的設計都是有他必要的意義的,你在設計每一個欄位的同時,就應該已經想清楚程序中如何去運用這些欄位,多張表的聯系在程序中是如何體現的。換句話說,你完成資料庫設計後,程序中所有的實現思路和實現方式在你的腦海中就已經考慮過了。如果達不到這種程度,那當進入編碼階段後,才發現要運用的技術或實現的方式資料庫無法支持,這時再改動資料庫就會很麻煩,會造成一系列不可預測的問題。
4. 資料庫設計時就要考慮到效率和優化問題
一開始就要分析哪些表會存儲較多的數據量,對於數據量較大的表的設計往往是粗粒度的,也會冗餘一些必要的欄位,已達到盡量用最少的表、最弱的表關系去存儲海量的數據。並且在設計表時,一般都會對主鍵建立聚集索引,含有大數據量的表更是要建立索引以提供查詢性能。對於含有計算、數據交互、統計這類需求時,還要考慮是否有必要採用存儲過程。
5. 添加必要的(冗餘)欄位
像「創建時間」、「修改時間」、「備注」、「操作用戶IP」和一些用於其他需求(如統計)的欄位等,在每張表中必須都要有,不是說只有系統中用到的數據才會存到資料庫中,一些冗餘欄位是為了便於日後維護、分析、拓展而添加的,這點是非常重要的,比如黑客攻擊,篡改了數據,我們便就可以根據修改時間和操作用戶IP來查找定位。
6. 設計合理的表關聯
若多張表之間的關系復雜,建議採用第三張映射表來關聯維護兩張表之間的關系,以降低表之間的直接耦合度。若多張表涉及到大數據量的問題,表結構盡量簡單,關聯也要盡可能避免。
7. 設計表時不加主外鍵等約束性關聯,系統編碼階段完成後再添加約束性關聯
這樣做的目的是有利於團隊並行開發,減少編碼時所遇到的問題,表之間的關系靠程序來控制。編碼完成後再加關聯並進行測試。不過也有一些公司的做法是乾脆就不加表關聯。
8. 選擇合適的主鍵生成策略
主鍵生成策略大致可分:int自增長類型(identity、sequence)、手動增長類型(建立單獨一張表來維護)、手動維護類型(如userId)、字元串類型(uuid、guid)。int型的優點是使用簡單、效率高,但多表之間數據合並時就很容易出現問題,手動增長類型和字元串類型能很好解決多表數據合並的問題,但同樣也都有缺點:前者的缺點是增加了一次資料庫訪問來獲取主鍵,並且又多維護一張主鍵表,增加了復雜度;而後者是非常佔用存儲空間,且表關聯查詢的效率低下,索引的效率也不高,跟int類型正好相反。
終上所述,我們可見資料庫設計在整個軟體開發的起到的舉足輕重的作用,尤其是我說的設計原則的第一點,資料庫與需求是相輔相成的,我經常把軟體開發比作汽車製造。汽車製造會經過圖紙設計,模型製作,樣車製造,小批量試生產,最後是批量生產等步驟。整個過程環環相扣,後一過程是建立在前一過程正確的前提基礎之上的。如果在圖紙設計階段發現了一個紕漏,我們可以重新進行圖紙設計,如果到了樣車製造階段發現這個錯誤,那麼我們就要把從圖紙設計到樣車製造的階段重來,越到後面發現設計上的問題,所付出的代價越大,修改的難度也越大。
資料庫設計難度其實要比單純的技術實現的難很多,他充分體現了一個人的全局設計能力和掌控能力,所以在今後的項目中大家一定要著重培養這方面的能力,這里我將我的經驗分享給了大家,希望能對大家有所幫助。
㈡ 試述資料庫設計的基本步驟.
答:(1)需求分析階段:需求收集和分析,得到數據字典和數據流圖.(2)概念結構設計階段:對用戶需求綜合、歸納與抽象,形成概念模型,用E-R圖表示.(3)邏輯結構設計階段:將概念結構轉換為某個DBMS所支持的數據模型.(4)資料庫物理設計階段:為邏輯數據模型選取一個最適合應用環境的物理結構.(5)資料庫實施階段:建立資料庫,編制與調試應用程序,組織數據入庫,程序試運行.(6)資料庫運行和維護階段:對資料庫系統進行評價、調整與修改.
㈢ 資料庫軟體架構設計的要點
資料庫軟體架構設計,要關注哪些要點?
方法/步驟
在IT系統架構設計中,資料庫的設計,占據著很重要的地位。那麼主要面臨哪些問題,需要考慮哪些因素呢?
面對數據量過大的問題,通常需要通過分片技術來解決,目前應用較多的是哈希分片。
因為通過范圍簡單分片,可能造成各庫的壓力不均;而統一路由,會增加訪問前查詢的壓力。
通過主從復制的分組,既可以解決可用性的問題,還可以實現一定的性能提升。
資料庫的軟體架構設計,要關注可用性、性能、一致性和擴展性四個方面。
解決可用性的主要思路就是冗餘——站點冗餘、服務冗餘、數據冗餘……
冗餘帶來的可用性問題,就是數據一致性的問題,要保證數據一致性,可以考慮雙寫同步。
擴展性能一般有三種方式——增加索引、增加從庫和增加緩存,要結合實際情況分析應用。
架構的設計是一個動態優化的過程,要綜合考慮幾個方面的因素,尋找合適的平衡點。
㈣ 資料庫設計
根據以上數據內容分析,當前遙感綜合調查基礎資料庫主要由各個專題資料庫(以矢量數據為主)、公共資料庫(既有矢量數據又有柵格數據,前者如1∶25萬基礎地理數據,後者如1∶25萬DEM資料庫和1∶25萬ETM+遙感影像)等構成,同時整個系統還必須具備自身的擴展機制,隨著用戶和應用的不斷變化,資料庫的內容也必將隨之變化。因此,遙感綜合調查基礎資料庫設計的主導思想是,利用ArcSDE技術提供的Multiuser Geodatabase模型組織復雜的空間數據,建立一個開放的、靈活的空間資料庫。
Geodatabase由矢量要素數據集、柵格數據集、TIN數據集、空間域、規則等部件構成。它對通常所要處理和表達的地理空間要素,如矢量、柵格、三維表面、網路、地址等進行了統一的描述,並引入了這些地理空間要素的行為、規則和關系(ESRI,2001)。而遙感綜合調查基礎資料庫只存儲其中的矢量要素數據集、柵格數據集等幾種類型。基於Geodatabase的遙感綜合調查數據模型如圖11.4所示。
設計Geodatabase與設計普通的資料庫是相同的,也分成兩個基本步驟——邏輯數據模型的表達和資料庫模型的物理實施,即邏輯設計和物理設計。邏輯設計是空間數據在用戶或應用中的表現形式,物理設計主要是空間數據在存儲介質里的具體儲存方式。邏輯數據模型是對所要研究的現實世界的有關數據而建立的一個抽象的關聯結構,以描述這些數據之間的邏輯關系。它完全獨立於具體系統實現和處理過程,區別於物理數據模型,即它不是一個在資料庫管理系統中的表結構,不化解或消除實體間的多對多關系,更接近於現實世界,是一個訪問數據的基本視圖。可以說邏輯層是物理層的表現,而物理層是邏輯層的基礎。
圖11.4基於GeoDatabase的遙感綜合調查數據模型
圖11.5邏輯層與物理層的聯系
從邏輯設計的角度來看,本系統基礎資料庫的設計思路是:資料庫→子庫→圖層→空間實體,庫可以包含多個子庫,子庫用來存放不同比例尺或不同用途的空間數據,再根據項目設計書的要求對每一個子庫做大類和圖層的劃分。從物理設計的角度來看,最終反映在ArcSDE的物理資料庫模型則是GEODATABASE→FEATUREDATASET→FEATURECLASS→FEATURE(如圖11.5)所示。
㈤ SQL資料庫設計
帳號 int(4) 主鍵
社區昵稱 varchar(20) 大小可變把20該成你規定的社區昵稱大小
密碼 varchar(20) 大小可變把20該成你規定的密碼長度
電子郵箱 varchar(50)
性別 bit(1) 0代表女1代表男或者反之
所屬學院 int(4) 字典表裡所屬學院的ID
真實姓名 varchar(20)
出生日期 varchar(10) 用「-」把用戶選擇的「年-月-日」這樣組合起來
籍貫 int(4) 字典表裡籍貫的ID
提示問題 int(4) 字典表裡提示問題的ID
問題答案 varchar(20) 大小可變把20該成你規定的問題答案大小
證件類型 int(4) 字典表裡證件類型的ID
證件號碼 varchar(20)
幾個復選框(幹嘛用的)
欄位名稱你就自己取吧。
再建一個字典表
id int(4) 主鍵
名稱 varchar(20) 放籍貫,學院,證件類型,提示問題的名稱等
類型 int(4) 是個標記,說明這個名稱是那類(1是籍貫,2是學院,3是證件類型,4是提示問題等)