資料庫設計
需求分析的要點:
1、資料是什麼?
2、資料有哪些屬性?
3、資料和屬性各自的特點有哪些?
邏輯分析:
使用er圖對資料庫進行邏輯建模。
物理設計:
根據資料庫自身的特點把邏輯設計轉換為物理設計。
維護優化:
1、新的需求進行建表
2、索引優化
3、大表拆分
1、實體及實體之間的關係(一對一,一對多,多對多)。
2、實體所包含的屬性有什麼。
3、那些屬性或屬性的組合可以唯一標識乙個實體。
分析需求時,須得到屬性,可選唯一標識屬性,儲存特點。
邏輯設計:
1、將需求轉化為資料庫的邏輯模型
2、通過er圖的型式對邏輯模型進行展示
3、同所選用的具體的dbms系統無關
名詞解釋:
關係:乙個關係對應通常所說的一張表。
元組:表中的一行即為乙個元組。
屬性:表中的一列即為乙個屬性;每乙個屬性都有乙個名稱,稱為屬性名。
候選碼:表中的某個屬性組,它可以唯一確定乙個元組(外來鍵)。
主碼:乙個關係有多個候選碼,選定其中乙個為主碼。
域:屬性的取值範圍。
分量:元組中的乙個屬性值。
er圖例說明:
矩形:表示實體集,矩形內寫實體集的名字。
菱形:表示聯絡集。
橢圓:表示實體的屬性。
線段:將屬性連線到實體集,或將實體集連線到聯絡集。
實體集的名字加了下劃線就是主鍵。
資料冗餘
是指相同的資料在多個地方存在,或者說表中的,某個列可以由其它列計算得到,這樣就說表中
存在著資料冗餘。
第一正規化:
定義:資料庫中的表中的所有的字段都是單一屬性的,不可再分的。
要求資料庫中的表都是二維表。
第二正規化:
定義:資料庫的表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴。
所有單關鍵字段的表都符合第二正規化。
第三正規化:
定義:如果資料表中不存在非關鍵字段,對任意候選關鍵字段的傳遞函式依賴則符合第三正規化。
bc正規化:
定義:資料庫表中如果不存在任何欄位對任一候選關鍵字段的傳遞函式依賴則符合bc正規化。也就
是說如果復合關鍵字,則復合關鍵字之間也不能存在函式依賴關係。
物理設計:
1、選擇合適的資料庫管理系統。
2、定義資料庫、表及字段的命名規範。
3、根據所選的dbms系統選擇合適的字段型別。
4、反正規化話設計。
所有物件命名應該遵循下述原則:
1、可讀性原則
使用大寫和小寫來格式化的庫物件名字以獲得良好的可讀性。
2、表意性原則
物件的名字應該能夠描述它所標識的物件。
3、長名原則
盡可能少使用或者不使用縮寫。
字段型別的選擇原則
列的資料型別一方面影響資料儲存空間的開銷,另乙個方面也會影響資料查詢效能。當乙個
列可以選擇多種資料型別時,應該優先考慮數字型別,其次是日期或二進位制型別,最後是字元類
型。對於相同級別的資料型別,應該優先選擇占用空間小的資料型別。
1、在對資料進行比較(查詢條件、join條件及排序)操作時:
同樣的資料、字元處理往往比數字處理慢。
2、在資料庫中、資料處理以頁為單位,列的長度越小、利於效能提公升。
如何選擇主鍵
1、區分業務主鍵和資料庫主鍵
業務主鍵用於標識業務資料,進行表與表之間的關聯;
資料庫主鍵為了優化資料儲存(innodb會生成6個位元組的隱含主鍵)
2、根據資料庫的型別,考慮主鍵是否要順序增長
有些資料庫的是按主鍵的順序邏輯儲存的。
3、主鍵的字段型別所佔空間要盡可能的小
對於使用聚集索引方式儲存的表,每個索引後都會附加主鍵資訊。
避免使用外來鍵約束
1、降低資料匯入的效率。
2、增加維護成本。
避免使用觸發器
1、降低資料匯入的效率。
2、可能會出現意想不到的資料異常。
3、使業務邏輯變得複雜。
關於預留字段
1、無法準確的知道預留欄位的型別。
2、無法準確的知道預留欄位中所儲存的內容。
3、後期維護預留欄位所要的成本,同增加乙個欄位所需要的成本是相同的。
4、嚴禁使用預留字段。
反正規化化是針對正規化化而言的,在前面介紹了資料庫設計的第三正規化,所謂的反正規化化就是為了
效能和讀取效率的考慮而適當的對第三正規化的要求進行違反,而允許存在少量的資料冗餘。
為什麼反正規化化:
1、減少表的關聯數量
2、增加資料的讀取效率
3、反正規化化一定要適度
SQLite資料庫掃盲
今天注意到 sqlite 3.6.11 上個月發布的 增加了乙個我期待已久的 online backup 介面,激動之餘就順便和大夥兒聊一下sqlite資料庫。本帖權當是sqlite掃盲,如果你對sqlite已經很熟悉,本文就不必再看了。技術上的優點和特性 sqlite是乙個輕量級 跨平台的關係型資...
MySQL 資料庫規範 設計篇
1.設計階段 2.開發階段 3.調優階段 未開發,pt query digest show slow log 查詢優化等 4.福利彩蛋 1.1 資料庫表的設計正規化 三正規化 反正規化 為什麼需要正規化 優點 程式設計相對簡單,資料量更小,更適合放入記憶體,更新更快,只需要更新少量的資料,更少的冗餘...
資料庫設計掃盲之關係型資料庫中的物件導向
資料庫小盲人我今天又碰到工作中需要涉及資料庫設計的部分了,於是又找公司dba哥討論了一下,同樣受益匪淺 今天的問題是 物件導向的思想在資料庫設計中的運用,以及在關聯式資料庫中的具體實現方法。在資料庫設計的時候也可以採用物件導向的方法,將不同類 資料庫中體現的是表 的共性抽出來作為基類或者介面。而後要...