1. 程式人生 > >關係型資料庫設計總結

關係型資料庫設計總結

一、設計階段流程

  1. 規劃階段:主要工作是對資料庫的必要性和可行性進行分析。確定是否需要使用資料庫,使用哪種型別的資料庫,使用哪個資料庫產品。
  2. 概念階段:主要工作是收集並分析需求。識別需求,主要是識別資料實體和業務規則。對於一個系統來說,資料庫的主要包括業務資料和非業務資料,而業務資料的定義,則依賴於在此階段對使用者需求的分析。需要儘量識別業務實體和業務規則,對系統的整體有初步的認識,並理解資料的流動過程。理論上,該階段將參考或產出多種文件,比如“用例圖”,“資料流圖”以及其他一些專案文件。如果能夠在該階段產出這些成果,無疑將會對後期進行莫大的幫助。

    記錄使用者需求時,可以使用一些技巧,當然這部分內容有些可能會超出資料庫設計人員的職責:

    • 努力維護一系列包含了系統設計和規格說明資訊的文件,如會議記錄、訪談記錄、關鍵使用者期望、功能規格、技術規格、測試規格等。
    • 頻繁與干係人溝通並收集反饋。
    • 標記出你自己新增的,不屬於客戶要求的,未決內容。
    • 與所有關鍵干係人儘快確認專案範圍,併力求凍結需求。

    此外,必須嚴謹處理業務規則,並詳細記錄。在之後的階段,將會根據這些業務規則進行設計。當該階段結束時,你應該能夠回答以下問題:

    • 需要哪些資料?
    • 資料該被怎樣使用?
    • 哪些規則控制著資料的使用?
    • 誰會使用何種資料?
    • 客戶想在核心功能介面或者報表上看到哪些內容?
    • 資料現在在哪裡?
    • 資料是否與其他系統有互動、整合或同步?
    • 主題資料有哪些?
    • 核心資料價值幾何,對可靠性的要求程度?

    並且得到如下資訊:

    • 實體和關係
    • 屬性和域
    • 可以在資料庫中強制執行的業務規則
    • 需要使用資料庫的業務過程
  3. 邏輯階段:主要工作是繪製E-R圖,或者說是建模。主要就是識別實體關係,其次還應該考慮屬性的域(值型別、範圍、約束)。
  4. 實現階段:主要針對選擇的RDBMS定義E-R圖對應的表,考慮屬性型別和範圍以及約束。
  5. 物理階段:是一個驗證並調優的階段,是在實際物理裝置上部署資料庫,並進行測試和調優。

二、設計原則

  1. 降低對資料庫功能的依賴:功能應該由程式實現,資料庫僅僅負責資料的儲存,以達到最低的耦合。
  2. 定義實體關係的原則
    當定義一個實體與其他實體之間的關係時,需要考量如下:

    • 牽涉到的實體 識別出關系所涉及的所有實體。
    • 所有權 考慮一個實體“擁有”另一個實體的情況。
    • 基數考量一個實體的例項和另一個實體例項關聯的數量。

    關係與表數量:

    • 描述1:1關係最少需要1張表。
    • 描述1:n關係最少需要2張表。
    • 描述n:n關係最少需要3張表。
  3. 列意味著唯一的值:如果表示座標(0,0),應該使用兩列表示,而不是將“0,0”放在1個列中。

  4. 列的順序:習慣上採用“主鍵 + 外來鍵 + 實體資料 + 非實體資料”這樣的順序對列進行排序顯然能得到比較好的可讀性。
  5. 定義主鍵和外來鍵:資料表必須定義主鍵和外來鍵(如果有外來鍵)。在效能沒有出現問題時應該保留外來鍵,而即便效能真的出現問題,也應該對SQL文進行優化,而非放棄外來鍵約束。
  6. 儘量不允許NULL
    關於NULL我們需要了解它的幾個特性:
    • 任何值和NULL拼接後都為NULL。
    • 所有與NULL進行的數學操作都返回NULL。
    • 所有使用NULL值的情況,都可以通過一個有意義的值的表示,這樣有利於程式碼的可讀性和可維護性,並能從約束上增強業務資料的規範性。
    • NULL值到非NULL的更新無法做到原地更新,更容易發生索引分裂,從而影響效能。
    • NULL值在timestamp型別下容易出問題,特別是沒有啟用引數explicit_defaults_for_timestamp。
    • NOT IN、!= 等負向條件查詢在有 NULL 值的情況下返回永遠為空結果,查詢容易出錯。
    • Null 列需要更多的儲存空間:需要一個額外位元組作為判斷是否為 NULL 的標誌位。
  7. 規範化—正規化:正規化將幫助我們來保證資料的有效性和完整性。

    • 目的:
      • 消滅重複資料。
      • 避免編寫不必要的,用來使重複資料同步的程式碼。
      • 保持表的瘦身,以及減從一張表中讀取資料時需要進行的讀運算元量。
      • 最大化聚集索引的使用,從而可以進行更優化的資料訪問和聯結。
      • 減少每張表使用的索引數量,因為維護索引的成本很高。
    • 推薦做法:
      • 儘可能地遵守上述規範化原則。
      • 所有屬性描述的都應該是體現被建模實體的本質的內容。
      • 至少必須有一個鍵,它唯一地標識和描述了所建實體的本質。
      • 主鍵要謹慎選擇。
      • 在邏輯階段能做多少規範化就做多少(效能不是邏輯階段考慮的範疇)。
  8. 選擇資料型別:型別選擇的最基本規則是選擇滿足需要的最輕的型別,因為這樣查詢更快。

四、命名規則

  1. 表:“模組名_表名”。表名最好不要用複數,原因是在使用ORM框架開發時,程式碼生成器根據DB生成類定義,表生成了某個例項的型別定義,而不是例項集合。表名不要太長。
  2. 欄位:bool型別用“Is”、“Can”、“Has”等表示;日期型別命名必須包含“Date”;時間型別必須包含“Time”。
  3. 儲存過程:使用“proc_”字首。
  4. 檢視:使用“view_”字首。
  5. 觸發器:使用“trig_”字首。

相關推薦

關係型資料庫設計總結

一、設計階段流程 規劃階段:主要工作是對資料庫的必要性和可行性進行分析。確定是否需要使用資料庫,使用哪種型別的資料庫,使用哪個資料庫產品。 概念階段:主要工作是收集並分析需求。識別需求,主要是識別資

MySQL資料庫設計總結

規則1:一般情況可以選擇MyISAM儲存引擎,如果需要事務支援必須使用InnoDB儲存引擎。 注意:MyISAM儲存引擎 B-tree索引有一個很大的限制:參與一個索引的所有欄位的長度之和不能超過1000位元組。另外MyISAM資料和索引是分開,而InnoDB的資料儲存

Oracle學習總結(2)——Oracle資料庫設計總結(三大正規化)

一、實體與表對應關係 表<=>實體,欄位<=>屬性。 二、表與表的關係(實體間的關係):一對一、一對多、多對多 一對一:一條記錄只對應其他表中的一條記錄有關係 學生基本資訊表t_student,成績表t_studentScore含有一個外來

mongodb 3.2 實戰(一)非關係型資料庫設計,如何進行mongo的資料庫設計

mongo 於2015,12,8 正式釋出了3.2的穩定版,這次重大的更新後,主要包括以下幾個比較令人興奮的點。 1.wiredtiger 引擎 在3.0釋出時,wiredtiger作為資料引擎之一。3.2之後wiredtiger作為建立資料庫的預設

關係型資料庫設計三大正規化

1.何為資料庫正規化? 設計關係資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同 規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。 目前關係資料庫有六種正規化:第一正規化(1NF)、第二正規化(2NF)、第

MySQL 資料庫設計總結

開發十年,就只剩下這套架構體系了! >>>   

關係型資料庫設計理論(異常、函式依賴、正規化)

文章目錄 異常 函式依賴 正規化 異常 資料冗餘大:某個屬性的值重複次數過多 插入異常:沒有主鍵屬性的時候,其他屬性無法插入 刪除異常:因刪除某個屬性所在的行而連帶徹底刪除了某些其他屬性 更新異常:屬性的某

資料庫設計流程總結

一、專案中資料庫建庫套路       1、概念模型:就是從現實世界到資訊世界的第一層抽象,確定領域實體屬性關係等,使用E-R圖表示,E-R圖主要是由實體、屬性和聯絡三個要素構成的。       &nb

JDBC章節總結(.資料庫設計三正規化、如何設計資料庫表)

1.介面可以降低程式的耦合度,提高程式的擴充套件力* 答:如果需要擴充套件介面功能的時候,直接建立一個實現介面功能的物件就可以了。 2.JDBC是一套專門用來操作資料庫的介面* 見名知意,java databases connection java 虛擬機器與資料庫之間的連線,需

關係型資料庫中常用的表設計

1.字典表(sys_dict) 作用:用於存放多組值不變的基礎資料,只對系統提供查詢功能. *記錄的新增、更新、刪除都是通過手動進行操作. *其中dict_code為dict_title的編碼,相同dict_title的記錄為同一組基礎資料,每組基礎資料下又有多對dict_value與d

資料庫設計總結

首先對資料庫的整體結構進行圖形化的設計,然後在依據圖形對資料庫結構進行建立。簡單來說,資料庫設計就是根據業務系統的具體需要,結合我們所選用的DBMS(資料庫管理系統),為這個業務系統構造出最優的資料儲存模型,並建立好資料庫中的表結構及表與表之間的關聯關係的過程。使之能有效的對

資料庫設計規範經驗總結

1.總體上以業務的模組為單位對資料庫的表進行模組劃分,把業務看做上層,資料庫看做是下層,下層要滿足上層,但是不能被上層束縛; 2.一個表就是承擔一個業務的實體,儘可能的獨立開來,減少表與表之間的業務交叉的情況; 3.允許表字段冗餘,不拘泥於表業務的過度獨立,便於查詢; 4.保證同一個欄位

資料庫設計正規化總結

這篇文章簡單介紹一下資料庫的1NF正規化、2NF正規化、3NF正規化。 1NF 1NF正規化要求資料庫中不能有可以繼續拆分的列,使資料庫滿足1NF正規化要求的方法是拆分列。例項如下: 姓名 電話

資料庫設計與優化總結(1)

一、資料庫的設計的幾點措施 1.關聯表的關聯欄位名稱必須相同。 2.欄位的定義的前兩位是表名,第三位是下劃線,保證規範。 3.常用欄位採用固定單詞,如id 4.如果只有一個索引,索引的名字希望和表名相同,如果是多個,那麼就用表明下劃線欄位名。 5.關聯欄位儘可能為數字型別。

使用MySQL Workbench進行資料庫設計——MySQL Workbench使用方法總結

1 簡介 MySQL Workbench是一款專為MySQL設計的ER/資料庫建模工具。它是著名的資料庫設計工具DBDesigner4的繼任者。你可以用MySQL Workbench設計和建立新的資料庫圖示,建立資料庫文件,以及進行復雜的MySQL 遷移。 做

資料庫系統概念】第7章 資料庫設計和E-R模型 知識總結

《資料庫系統概念》第7章知識點總結 資料庫設計和E-R模型 本章我們將學習將資料庫表示為一個關係資料庫設計和一個與之關聯的約束集合 實體:指示所有可明確識別的個體。各種各樣的實體以多種方式互相關聯,而所有這些方式都需要在資料庫設計中反映出來 設計一個數據庫模式的時候,

使用MySQL Workbench進行資料庫設計——MySQL Workbench安裝方法總結

簡介 MySQL Workbench是一款專為MySQL設計的ER/資料庫建模工具。它是著名的資料庫設計工具DBDesigner4的繼任者。你可以用mysql Workbench設計和建立新的資料庫圖示,建立資料庫文件,以及進行復雜的MySQL 遷移。 下載

關係型資料庫幾大正規化的理解總結

正規化的定義 關係型資料庫中的關係是需要滿足一定條件的,滿足這些不同程度的規範化就叫做正規化。 正規化按照規範化程度從低到高排序為第一正規化,第二正規化,第三正規化,BC正規化,第四正規化,第五正規化。 前導知識 函式依賴 R(U)是屬性集U的關係模型,X,Y是U的一個子集,對於R(U)中的任一個關係r

微信H5房卡9人牛牛青龍大廳開發頁面按鈕組設計總結

引用 出現 錘子 成了 做到 一句話 微信h5 理念 shu 什麽是按鈕組? 顧名思義,按鈕組就是指兩個或兩個以上的按鈕排布在一起。為了了解按鈕組的使用場景,首先我們來思考一個問題:什麽時候我們會使用按鈕組? 從按鈕組的樣式上我們可以看出常見的按鈕組是供用戶進行判斷(兩個選

2017級面向對象程序設計——總結作業

感受 面向對象 strong 是否 哪些 編程 博客 設計 面向 Deadline:2018/7/7 22:00 本學期最後一次作業 :) 請發表一篇博客作為本階段學習的反思和總結,包括但不限於: 在本學期的學習中,有哪些是經過博客作業後才學到的? 在電梯作業和團隊作業中