欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

Mysql數據庫表設計經驗的總結

admin
2024年10月25日 8:38 本文熱度 426

    Mysql是我們開發中存儲數據的常用工具之一,好的數據表設計不僅讓業務更加清晰,而且也會讓后面繼續維護這套業務的人更易上手,今天我們從表的字段、索引等方面來聊聊一些好的Mysql表設計經驗。

1、表、字段、索引的命名規范

    數據庫表名、字段名、索引名等都需要規范的命名,命名盡量使用英文并要可讀性高,采用駝峰或者下劃線分割的方式,讓人見名知意。例如訂單的id可以命名為order_id,用戶的id可命名為user_id,這樣我們見到字段就可以知道其含義。

    一般表名、字段名使用小寫字母,不使用數字開頭、不使用拼音。對于索引的命名來講,我們遵循主鍵索引名(pk_字段名);唯一索引名(uk_字段名);普通索引名(idx_字段名)。

2、字段

2.1 選擇合適的字段類型

    設計字段的時候往往要考慮到自己的實際業務場景,然后選擇合適的字段類型。

(1)如某個字段的數據長度不會超過10個字符,則可以使用CHAR類型,如果字段的長度是定長(如身份證號、門牌號等)也可以CHAR類型,如果某個字段的長度不確定可以使用VARCHAR類型,如果字段長度可能很長,建議使用text類型。

(2)對于需要精確數值計算的字段(如貨幣和百分比),應該選擇帶有精度和小數位數的字段類型(如DECIMAL)。

(3)Mysql表示時間類型的字段主要如下的幾種:

    date:表示的日期值,格式yyyy-mm-dd,范圍1000-01-01到9999-12-31

    datetime:表示的日期時間值,它與時區無關,格式yyyy-mm-dd hh:mm:ss,范圍1000-01-0100:00:00到9999-12-31 23:59:59

    time:表示的時間值,格式hh:mm:ss,范圍-838:59:59到838:59:59

    timestamp: 表示的時間戳值,它跟時區有關,格式為yyyymmdd hhmmss,范圍1970-01-01 00:00:01到2038-01-19 03:14:07

    year:年份值,格式為yyyy。范圍1901到2155

    在阿里開發規范中推薦使用datetime類型來保存日期和時間,這是因為存儲范圍更大,且跟時區無關。

2.2 選擇適合字段長度

    首先我們要明確一點。在Mysql中的VARCHARCHAR類型表示字符長度,而其他類型表示的長度都表示字節長度。如CHAR(10)表示字符長度是10;bigint(8)表示長度是8個字節長度。

    我們需要根據實際的業務場景選擇合適的長度可以節省存儲空間,提升存儲、查詢的效率。

2.3 設計合理的主鍵

    主鍵的設計在數據庫中非常重要,它用于唯一標識表中的每一行數據,并且在數據操作和查詢中起到關鍵作用。通常主鍵使用自增的id,這樣可以保持主鍵的連續性。在分布式的環境下,我們無法使用自增主鍵,一般推薦使用id生成器生成唯一的主鍵(常見的有雪花算法)。

2.4 添加一些通用的字段

    在阿里的表設計規范中也提到了設計數據表的時候添加一些通用的字段,如id、創建人字段、創建時間字段、修改人字段、修改時間字段等等,通過這些通用字段可以幫助我們了解這個數據誰創建的、最后的是誰在什么時間做了修改等信息。

2.5 表字段的數量不宜過多

    我們設計數據表的時候,表的字段盡量不超過20個。如果超出的話考慮做拆分,拆分為基本表和詳情表。這個拆分可以提高詢效率,優化了磁盤的存儲空間(表的字段數越多,每一行數據占用的存儲空間也就越大。這樣可能會導致磁盤空間的浪費),同時方便后續的維護工作。

2.6 字段添加注釋

    設計數據表的字段的時候我們也要些字段的注釋,這樣自己也包括其他的人在看到這個字段的時候知道這個字段代表的含義,例如type字段

type tinyint not null default 0 comment '類型 1-上傳文件 2-下載文件'

    通過添加注釋我們在后續維護的時候無需去看業務代碼就知道字段type所代表的含義。

2.7 盡可能設置字段不為空

    一般都推薦將字段定義為NOT NULL,因為一方面NOT NULL可以有效的防止代碼中出現空指針問題,另一方面由于NULL值存儲也需要額外的空間的,同時NULL值也會導致比較運算更為復雜,使優化器難以優化sql。

    如果在實際業務中將字段默認設置成一個空字符串或常量值并沒有什么影響,那可以將這個字段設置為NOT NULL。

2.8 字段的刪除優先考慮邏輯刪除

    常見的刪除有兩種方式,一種是邏輯刪除(數據表中添加一個字段is_deleted,用來標記該數據已經邏輯刪除);一種是物理刪除(把數據從硬盤中刪除,可釋放存儲空間)。

    由于使用物理刪除一方面數據恢復困難,另一方面物理刪除也會導致索引樹重構,所以推薦使用邏輯刪除。

2.9 合理的添加表的冗余字段

    添加表的冗余字段是違反了Mysql的三大范式設計要求,但是在實際的業務中我們增加了冗余字段可以減少表的關聯提升了性能。如在設計訂單的表的時候,我們在訂單表中的添加用戶下單的商品的冗余字段,這樣設計的目的就在查詢的訂單的時候就不用再做一次查詢來獲取下單商品的信息。

2.10 核心業務表添加擴展字段

    我們一些關鍵的表設計的時候建議加上擴展字段(extra),因為隨著業務的發展,我們需要存儲更多業務信息,有些業務信息只做展示和代碼中查詢使用(如下單商品的規格信息),這些字段可以考慮放在擴展字段中保存。

3、索引

3.1 合理設置索引

    在設計表時,我么需要充分考慮哪些字段需要加索引,可以參考如以下幾個原則:

(1)高頻的查詢條件:如果在查詢中使用了某個字段作為查詢條件,那么這個字段考慮建立索引。如在訂單表中將訂單的id設置為索引。

(2)區分度高的字段設置索引:如果一個字段的取值范圍非常小,典型的是性別字典,它只有男女兩種可能,那么這個字段就不適合建立索引,因為其區分度低。

(3)不要建立過多的索引:每個表所建立的索引數量應該控制在一個合理的范圍內,一般不要超過5個。因為過多的索引會導致寫入速度變慢,并占用更多的存儲空間。

(4)善于使用聯合索引:在某些情況下可以通過聯合索引的方式來優化查詢速度,減少所需的索引數量。

3.2 盡可能少使用外鍵

    外鍵可以保證數據的一致性和完整性,但是它也會帶來一些問題,如性能問題、限制數據庫的擴展性和靈活性、增加了維護成本等等問題,所以在一些情況下我們可以通過代碼維護數據的一致性和完整性來替代外鍵。

總結:

(1)設計表的時候,對于表名、字段名、索引名都要規范命名

(2)設計數據表字段不宜過多,字段要選擇合適的類型和長度,字段盡可能設置不為空,字段的注釋也清晰,字段在一些業務場景中可以設計冗余字段。

(3)合理設置索引、盡量少使用外鍵。


該文章在 2024/10/28 16:27:56 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved