dbms資料庫管理系統
資料庫設計
1、有效儲存
2、高效訪問
目的:
1、減少資料冗餘
2、避免資料維護異常
3、節約儲存空間
4、高效的訪問
資料庫設計過程:
1、需求分析: 分析需要儲存的資料是哪些,這些資料有哪些屬性,這些屬性各自的特點是什麼
2、邏輯設計: 使用er圖對資料庫進行邏輯建模,
3、物理設計: 使用哪款資料庫設計建表(oracle,myslq,sqlserver)
4、維護優化: 索引優化,大表拆分
資料庫設計布置
需求分析—>邏輯設計—>物理設計—>優化
資料內容
資料儲存特性:時效性
資料生命週期:增長快、量大、非核心,分庫分表,歸檔清理規則
實體間及實體與表的關係,1對1,1對多,多對多
實體的屬性,單一屬性or屬性組合 可以唯一標識實體的
er圖例說明:
矩形:表示實體集,矩形內寫實體的名字
菱形:表示聯絡集
橢圓:表示實體屬性
線段:將屬性鏈結到實體集
名詞解釋
關係是表,
元組是行,
屬性是列。
候選碼是屬性組,可以唯一的確定乙個元祖(列)
候選碼中選乙個當主碼
域是屬性的取值範圍
分量是元組中的乙個屬性值
常見資料庫設計正規化:
第一正規化、所有字段不可拆分
第二正規化、單關鍵字
第三正規化、不存在傳遞依賴
bc正規化(boyce.codd)、解決部分主鍵依賴於非主鍵部分
第四正規化
第五正規化
插入異常,更新異常,刪除異常
資料冗餘:重複資料
1、選擇合適的資料庫管理系統
-商業資料庫 oracle、sqlserver
-開源資料庫 mysql pgsql
2、定義資料庫、表以及欄位的命名規範
3、根據所選的dbms系統選擇合適的字段型別
4、反正規化化設計:刻意增加冗餘,以空間換取時間
mysql常用的儲存引擎:
mylsam 不支援事務 表級鎖 讀寫效率更高
mrg_myisam 不支援事務,表級鎖 分段歸檔
innodb(推薦) 支援事務 行級鎖
archive 行級鎖 日誌記錄
ndb cluster(mysql集群) 支援事務 行級鎖 高可用
資料庫表及字段的命名規則:
可讀性原則(用大小寫區分來提高可讀性等)
表意性原則(表的名稱應能體現其儲存內容等)
長名原則(少用縮寫)
字段型別選擇原則
優先選擇數字型別,其次是日期和二進位制型別,最後才是字串型別;
字元比資料處理慢;
在資料庫中,資料處理以頁為單位,列的長度越小,利於效能提公升;
磁碟的i/o效能決定了資料庫的效能。
數字的查詢和排序操作優於char和varchar;
decimal 與 float 如何選擇:
decimal用於儲存精確資料
float只能用於儲存非精確資料
char 與 varchar 如何選擇:
如果列中要儲存的資料長度差不多是一致的,則應該考慮用char,反之使用varchar。
如果列中的最大資料長度小於50byte(utf-8格式中大概13個字元),則一般也考慮用char。(如果這個 列很少用,內裡基於節省空間和減少i/o的考慮,還是可以選擇用varchar)
一般不宜定義大於50byte的char型別列
在mysql中,utf8的乙個字元佔3個位元組,
當某個欄位的字元數大於15時,要用varchar,小於就用char
時間型別如何儲存:
使用int來儲存時間欄位的優缺點
優點: 字段長度比datetime小。
缺點:使用不方便,要進行函式轉換。
限制:只能儲存到2038-1-19 11:14:07 即2^32為2147483648
注意事項:
主鍵: 可以儲存業務主鍵(標識業務資料,進行標語表關聯)和資料庫主鍵(優化資料庫)
避免使用外來鍵約束: 降低資料匯入效率,增加維護成本
避免使用觸發器: 導致意想不到的資料異常,是業務邏輯變複雜
嚴禁預留字段
為什麼反正規化化
讀 > 寫
減少表的關聯數量
增加資料的讀取效率
反正規化化一定要適度
維護各優化中要做什麼
1、維護資料字典
2、維護索引
3、維護表結構
4、在適當的時候對錶進行水平拆分或垂直拆分
匯出資料字典
select a.table_name,b.table_comment,a.column_name,a.column_type,a.column_comment from information_schema.columns a join information_schema.tables b on a.table_schema = b.table_schema and a.table_name = b.table_name where a.table_name = 'customer'
如何維護索引
建立索引:出現在where從句, group by從句, order by 從句中的列
可選擇性高的列要放到索引的前面
索引中不要包括太長的資料型別
注意事項:
索引並不是越多越好,過多的索引不但會降低寫效率而且會降低讀的效率
定期維護索引碎片
在sql語句中不要使用強制索引關鍵字
資料庫中適合的操作
批量操作
禁止使用 select * 這樣的查詢
控制使用使用者自定義函式
不要使用資料庫中的全文索引
垂直拆分:
經常一起查詢的列放在一起
text,blob等大字段拆分出到附加表中
水平拆分
表結構相同 資料不同
通過主鍵hash->平均分表
資料庫設計注意事項
關係型資料庫還能盛行多久?針對表的描述中,要重點說明設計這張表的原因 理由或目的,以及與其他表的關係,尤其是與業務邏輯緊密相關的表。指令碼中,每個字段新增必要的注釋,例如 comment on table sys users t is 系統使用者的相關資訊 comment on column sys...
資料庫表設計注意事項
1.使用英文單詞,避免使用拼音 2.使用單詞單數,採用大寫,方便不同資料庫移植 3.單詞間使用下劃線分隔 4.表的字首建議表名前加上對應的簡寫的模組名 5.列名採用大寫,單詞採用單數 6.對於同樣含義的字段,採用同樣的列名,同時,字段型別也應一樣 7.命名時避免保留字衝突,如names,key,ty...
資料庫注意事項
主要就是6點 1.必須考慮業務唯一性並建復合唯一索引 2.所有字段盡量設定為not null 3.區分度低的字段不要建索引 4.邏輯外來鍵要建索引 5.用uuiddelete id varchar 32 not null default 做偽刪除 6.建議確定無負數的字段設定unsigned 建表時...