資料庫——規范資料庫設計
為什么需要設計資料庫
當資料庫比較復雜的時候,就需要設計
糟糕的資料庫設計
- 資料冗余,浪費空間
- 資料庫插入和洗掉都會麻煩、例外(屏蔽使用物理外鍵)
- 程式性能差
良好的資料庫設計
- 節省記憶體空間
- 保證資料庫的完整性
- 方便我們開發系統
設計資料庫的步驟(以個人博客為例):
- 收集資訊,分析需求
- 用戶表user(需求:用戶登錄注銷,用戶個人資訊,寫博客,創建分類)
- 分類表category(文章分類,誰創建的)
- 文章表blog(文章的資訊)
- 友情鏈接表links(鏈接資訊)
- 評論表comment
- 粉絲表user_follow
- 自定義表(系統資訊,某個關鍵的字,或者一些主題)
- 標識物體(把需求落實到每個欄位上)
- 標識物體之間的關系
- 寫博客:user——>blog
- 創建分類:user——> category
- 關注:user——> user
- 友鏈:links
- 評論:user——>blog,user——> user
三大范式
范式(資料庫設計范式,資料庫的設計范式)是符合某一種級別的關系模式的集合,構造資料庫必須遵循一定的規則,在關系資料庫中,這種規則就是范式,關系資料庫中的關系必須滿足一定的要求,即滿足不同的范式,
為什么需要資料規范化
防止:
- 資訊重復
- 更新例外
- 插入例外
- 無法正常顯示資訊
- 洗掉例外
- 丟失有效資訊
三大范式
第一范式(1NF)
原子性:保證每一列不可再分
說明:在任何一個關系資料庫中,第一范式(1NF)是對關系模式的基本要求,不滿足第一范式(1NF)的資料庫就不是關系資料庫,
第二范式(2NF)
前提:滿足第一范式
第二范式需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關
第三范式(3NF)
前提:滿足第一范式,第二范式
第三范式需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關,第三范式就是屬性不依賴于其它非主屬性
思考:規范性和性能的問題
- 考慮商業化的需求和目標(成本,用戶需求),資料庫的性能更重要
- 在規范性能問題的時候,需要適當考慮一下規范性
- 故意給某些表增加冗余的欄位(反范式)
- 故意增加一些計算列(從大資料量降低為小資料量的查詢)
反范式化
反范式化指的是通過增加冗余或重復的資料來提高資料庫的讀性能,
反范式化可以減少關聯查詢時,join表的次數,
關聯查詢的表不得超過三張 (參考阿里巴巴開發手冊)
阿里巴巴開發手冊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/171748.html
標籤:其他
下一篇:having子句與where子句
