資料庫設計注意事項

2021-09-14 03:14:20 字數 3372 閱讀 1452

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 建表時...