Oracle學習筆記第二十天
阿新 • • 發佈:2019-01-05
Oracle學習筆記第二十天
資料庫設計
概念:規劃資料庫中資料物件以及之間關係的過程
為什麼進行資料庫設計:
1. 空間
2. 完整性:實體完整性、域完整性、使用者自定義的完整性
3. 程式開發:方便程式開發
正規化:
1NF:第一正規化:
如果每列都是不可再分的最小資料單元(也稱為最小的原子單元),則滿足第一正規化(1NF)
第一正規化的目標是確保每列的原子性
2NF:第二正規化
如果一個關係滿足1NF,並且除了主鍵以為的其他列都依賴與該主鍵,則滿足第二正規化(2NF)
第二正規化要求每個表值描述一件事情
3NF:第三正規化
如果一個關係滿足2NF,並且除了主鍵以外的其他列都不傳遞依賴於主鍵列,則滿足第三正規化。
資料庫設計步驟:
1. 收集資訊
2. 標識物件
3. 標識物件的屬性
4. 標識物件之間的關係
為了設計結構良好的資料庫,需要遵守一些專門的規則,稱為資料庫的設計正規化
第一正規化(1NF)的目標:確保每列的原子性
第二正規化(2NF)的目標:確保表中的每列,都和主鍵相關
第三正規化(3NF)的目標:確保每列都和主鍵列直接相關,而不是間接相關
練習用例:
收集資訊: 公司承擔多個工程專案,每一項工程有:工程號、工程名稱、施工人員等 公司有多名職工,每一名職工有:職工號、姓名、性別、職務(工程師、技術員)等 公司按照工時和小時工資率支付工資,小時工資率由職工的職務決定(例如,技術員的小時工資率與工程師不同) 工資報表
工程號 | 工程名稱 | 職工號 | 姓名 | 職務 | 小時工資率 | 工時 |
---|---|---|---|---|---|---|
A1 | 花園大廈 | 1001 | 齊光明 | 工程師 | 65 | 13 |
A1 | 花園大廈 | 1002 | 李思岐 | 技術員 | 60 | 16 |
A2 | 立交橋 | 1001 | 齊光明 | 工程師 | 65 | 13 |
A2 | 立交橋 | 1003 | 鞠明亮 | 工人 | 55 | 17 |
A3 | 臨江飯店 | 1002 | 李思岐 | 技術員 | 60 | 18 |
A3 | 臨江飯店 | 1004 | 葛宇洪 | 技術員 | 60 | 14 |
SQL優化
一般優化技巧
- 建議不用“*”代替所有列名
- 刪除所有資料用TRUNCATE代替DELETE
- 用NOT EXISTS 代替NOT IN
- 用EXISTS代替IN
- 用EXISTS代替DISTINCT
- where子句的連線順序:1. 表連線關係放在前面;2. 過濾記錄越多的條件子句應放置到後面
索引
索引分類:
邏輯分類 | 物理分類 |
---|---|
單列或組合索引 | 分割槽或非分割槽索引 |
唯一或非唯一索引 | B 樹索引 |
基於函式索引 | 正常或反向鍵索引 |
點陣圖索引 |
其他索引: 唯一索引、反向鍵索引、點陣圖索引、組合索引、函式索引等
建立索引原則:
- 頻繁搜尋的列
- 經常排序、分組的列
- 經常連線的列
- 指定單獨的表空間
不適合建立索引原則:
- 資料量小
- 僅包含幾個不同值的列
- 資料表操作特別頻繁、業務效能要求高
表分割槽
概念:把表中資料劃分成若干部分,並存儲在不同的位置
優點:
- 改善查詢效能
- 表更容易管理
- 便於備份和恢復
- 提高資料安全性
表分割槽分類:
- 範圍分割槽
- 列值的範圍作為劃分條件
- 雜湊分割槽
- 列的hash值自動分配
- 列表分割槽
- 列值必須明確指定
- 一個分割槽列
- 複合分割槽
- 先按第一分割槽方法分割槽
- 再按第二分割槽方法劃分子分割槽
- 其他分割槽