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