-
什么是數據庫設計
數據庫設計就是根據業務系統的具體要求,結合我們所選擇的DBMS,為這個業務系統構造出最優的數據存儲模型。并建立好數據庫中的表結構及表于表之間的關聯關系的過程。使之能有效的對應用系統中的數據進行存儲,并可以高效的對已經存儲的數據進行訪問。
優良的數據庫設計
1、減少數據冗余
2、避免數據維護異常
3、節約存儲空間
4、高效訪問
數據庫設計大致步驟
1、需求分析(數據有哪些、數據有哪些屬性,數據和屬性它們各自的特點有哪些)
2、邏輯設計(ER圖對數據庫進行邏輯建模)
3、物理設計(根據選擇數據庫的特點把邏輯設計轉換為物理設計)
4、維護優化(新的需求建表、索引優化、大表拆分)
數據庫需求分析
1、了解系統中所要存儲的數據
實體與實體之間的關系(1對1,1對多,多對多)
2、了解數據的存儲特點
實體的屬性特點(唯一標識一個實體)
3、了解數據的生命周期
數據的存儲特點(永久、暫時)
數據庫邏輯設計
1、將需求轉化為數據庫的邏輯模型
2、通過ER圖的型式對邏輯模型進行展示
矩形:表示實體集
菱形:表示關系集
橢圓:表示實體屬性
線段:將屬性連接到實體集;將實體連接到聯系集
3、與DBMS的選擇無關
數據庫邏輯設計中的規范
1、第一范式
要求數據庫中的表都是二維表(由行和列組成)
2、第二范式
所有單關鍵字段的表都符合第二范式。
數據庫中的表不存在非關鍵字段對任一候選關鍵字段的部分依賴
3、第三范式
數據表中的非關鍵字段對任意候選關鍵字段的傳遞函數依賴
4、BC范式
數據表中不存在任意字段對任意候選字段的傳遞函數依賴
數據庫物理設計
1、選擇合適的數據庫管理系統
Oracle:商業數據庫、基于服務器核心數收費、適用于企業級項目、金融業
SQLServer:商業數據庫、基于服務器核心數收費
MySQL:開源數據庫、互聯網項目
PgSQL:開源數據庫
2、定義數據表、表及字段的命名規范
a、可讀性原則
b、表意性原則
c、長名原則
3、根據所選的DBMS系統選擇合適的字段類型
列的數據類型一方面會影響數據存儲空間的開銷,另一方面也會影響數據查詢性能
選擇原則:優先考慮數字類型、其次是日期或二進制類型、最后是字符類型。對于相同級別 的數據類型,應該優先選擇占用空間小的數據類型
選擇角度:
1、對數據進行操作時,同樣數據字符的處理要比數字處理慢
2、數據處理以頁為單位,列的長度越小,利于性能提升
同級別的選擇:
char和varchar
1、列中存儲的數據長度都差不多一致時,選char否則選varchar
2、如果列的最大數據長度小于50Byte選char,否則varchar
3、如果這個列很少用,基于節省空間和減少I/O考慮,選擇varchar
float和decimal
1、decimal精確存儲,float非精確,精確存儲選decimal
2、float存儲空間開銷一般比decimal小,非精確選float
int與datetime
1、字段長度int小于datetime
2、int每次使用要進行函數轉換
3、int只能存儲到2037-1-19-11-14-07
4、datetime要考慮時間粒度的問題
4、反范式化設計(空間換時間)
目的:為了性能和讀取效率的考慮而適當對第三范式的要求進行違反
1、減少表的關聯數量
2、增加數據的讀取效率
3、反范式化一定要適度
5、其他注意事項
a、如何選擇主鍵
業務主鍵:標識業務數據,進行表于表間的關聯
數據庫主鍵:為了優化數據存儲(Innodb會自動生成6個字節的隱含主鍵)
b、主鍵是否要順序增長
c、主鍵的字段類型所占的空間盡可能小
d、少用外鍵
1、降低數據的導入效率
2、增加維護成本
3、雖然不建議使用外鍵、但相關聯的列上一定要建立索引
e、避免使用觸發器
1、降低數據導入的效率
2、可能會出現意想不到的數據異常
3、使業務邏輯變的復雜
f、嚴禁使用預留字段(無任何意義)
MYSQL常用的存儲引擎
MylSAM:不支持事務、支持表級鎖、不適合讀寫頻繁、但讀寫速度快
MRG_MYLSAM:不支持事務、支持表級鎖、不適合全局查找較多、但適合分段歸檔,數據倉庫
Innodb:支持事務、支持MVCC的行級鎖、適合事務處理,讀寫高效
Archive:不支持事務、行級鎖、但支持insert,select、占用空間小
Ndb cluster:支持事務、行級鎖、高可用性
數據庫的優化
1、維護數據字典
a、第三方工具對數據字典進行維護
b、利用數據庫本身的備注字段來維護數據字典
2、維護索引
a、選擇在where中、group by從句、order by從句中的列
b、可選擇性高的列要放在索引前面
c、索引中不要包括太長的數據結構
注意
a、索引不是越多越好,過多的索引會降低讀與寫的效率
b、定期維護索引碎片
c、在SQL語句中不要使用強制索引關鍵字
3、維護表結構
a、使用在線變更表結構工具
b、同時對數據字典進行維護
c、控制表的寬度與大小
4、數據庫適合操作
a、盡量使用批量操作而不是逐條操作
b、禁止使用select *
c、控制用戶使用自定義函數
d、不要使用數據庫中的全文索引
5、在適當的時候對表進行水平拆分或垂直拆分
a、垂直拆分
經常一起查詢的列放在一起
text,blog等大字段拆分出到附加表
b、水平拆分
Hash Key的方式進行平均拆分
查看全部 -
列的數據類型影響存儲空間開銷,另一方面影響查詢性能,當一個列可以選擇多種數據類型時,優先選擇數字類型,其次是日期和二進制類型,最后才是字符串類型;
注意:在對數據處理時(查詢提條件,join條件及排序)操作時,同樣的數據,字符往往比數據處理慢;
在數據庫中,數據處理以頁為單位,列的長度越長,利于性能提升;

查看全部 -
數據庫表及字段的命名規則:
可讀性原則(用大小寫區分來提高可讀性等);
表意性原則(表的名稱應能體現其存儲內容等);
長名原則(少用縮寫)。
查看全部 -
常用存儲引擎
日志記錄archive
查看全部 -
第二范式
單關鍵字:都符合第二范式
多關鍵字:如學生和課程或班級在一張表里,那就應該拆分開來
查看全部 -
定義:所有字段單一且不可再分
->?第一范式要求數據庫中的表都是二維表。
查看全部 -
常見的存儲贏你去哪個
查看全部 -
MySQL常用存儲引擎
查看全部 -
數據庫操作異常
查看全部 -
實力演示!
查看全部 -
名詞解釋!
查看全部 -
電子商務網站關系
查看全部 -
插入異常,更新異常,刪除異常
數據冗余:重復數據
查看全部 -
需求分析過程:(電子商務舉例)
模塊劃分:用戶、商品、訂單、購物車、供應商
模塊分析
具體屬性,可選唯一標識屬性[組],存儲特點(永久、歸檔、分表分庫)
模塊關系:一對一,一對多,多對多
查看全部 -
需求分析需要了解啥:
數據內容
數據存儲特性:時效性
數據生命周期:增長快、量大、非核心,分庫分表,歸檔清理規則
????實體間及實體與表的關系,1對1,1對多,多對多
????實體的屬性,單一屬性or屬性組合 可以唯一標識實體的
????
????
查看全部
舉報