搜尋
首頁資料庫mysql教程MySQL設計規範與原則

MySQL設計規範與原則

May 11, 2020 am 11:13 AM
mysql

MYSQL資料庫設計規格

1、資料庫命名規格

採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上底線'_'組成;

命名簡潔明確(長度不能超過30個字元);

例如:user, stat , log, 也可以wifi_user, wifi_stat, wifi_log為資料庫加個前綴;

#除非是備份資料庫可以加0-9的自然數:user_db_20151210;

2、表名命名規範

採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上底線'_'組成;

#命名簡潔明確,多個單字用底線'_'分隔;

例如:user_login, user_profile, user_detail, user_role, user_role_relation,

#user_role_right, user_role_right_relation

user_'可以有效的把相同關係的表顯示在一起;

3、資料庫表格欄位名稱命名規範

採用26個英文字母(區分大小寫)和0-9的自然數(經常不需要)加上底線'_'組成;

命名簡潔明確,多個單字用底線'_'分隔;

例如:user_login表格欄位user_id, user_name, pass_word, eamil, tickit, status, mobile, add_time;

每個表中必須有自增主鍵,add_time(預設系統時間)

表與表之間的相關聯字段名稱要求盡可能的相同;

4、資料庫表格欄位類型規格

#用盡量少的儲存空間來存數一個欄位的資料;

例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(256);

IP位址最好使用int型別;

固定長度的型別最好使用char,例如:郵編;

能使用tinyint就不要使用smallint,int;

最好給每個欄位一個預設值,最好不能為null;

5、資料庫表索引規格

命名簡潔明確,例如:user_login表user_name欄位的索引應為user_name_index唯一索引;

為每個表建立一個主鍵索引;

為每個表建立合理的索引;

建立複合索引請慎重;

6、簡單熟悉資料庫範式

第一範式(1NF):欄位值具有原子性,不能再分(所有關係型資料庫系統都滿足第一範式);

例如:姓名欄位,其中姓和名是一個整體,如果區分姓和名那麼必須設立兩個獨立字段;

第二範式(2NF):一個表必須有主鍵,即每行資料都能被唯一的區分;

備註:必須先滿足第一範式;

第三範式(3NF):一個表中不能包涵其他相關表中非關鍵字段的資訊,即資料表不能有沉澱字段;

備註:必須先滿足第二範式;

資料庫的三範式:

①欄位不可分。

②有主鍵,非主鍵欄位依賴主鍵。

③非主鍵欄位不能互相依賴。

MYSQL資料庫設計原則

#1、核心原則

不在資料庫做運算;

cpu計算務必移至業務層;

控制列數量(字段少而精,字段數建議在20以內);

平衡範式與冗餘(效率優先;往往犧牲範式)

拒絕3B(拒絕大sql語句:big sql、拒絕大事物:big transaction、拒絕大批量:big batch);

2、字段類原則

用好數值類型(用適當的欄位類型節約空間);

字元轉換為數字(能轉換的最好轉換,同樣節約空間、提升查詢效能) ;

避免使用NULL欄位(NULL欄位很難查詢最佳化、NULL欄位的索引需要額外空間、NULL欄位的複合索引無效);

少用text類型(盡量使用varchar代替text欄位);

3、索引類別原則

合理使用索引(改善查詢,減慢更新,索引一定不是越多越好);

字元欄位必須建立前綴索引;

不在索引做列運算;

innodb主鍵推薦使用自增列(主鍵建立叢集索引,主鍵不應該被修改,字串不應該做主鍵)(理解Innodb的索引保存結構就知道了);

不用外鍵(由程式保證約束);

4、sql類別原則

sql語句盡可能簡單(一條sql只能在一個cpu運算,大語句拆小語句,減少鎖定時間,一條大sql可以堵死整個函式庫);

簡單的事務;

避免使用trig/func(觸發器、函數不用客戶端程式取代);

不用select *(消耗cpu,io,記憶體,頻寬,這種程式不具有擴充性);

OR改寫為IN(or的效率是n級);

OR改寫為UNION(mysql的索引合併很弱智);

select id from t where phone = ’159′ or name = ‘john’;

=>

select id from t where phone=’159′
union
select id from t where name=’jonh’

避免負向%;

慎用count(*);

limit高效率分頁(limit越大,效率越低);

使用union all取代union(union有去重新開銷);

少用連接join;

使用group by;

請使用同類型比較;

#打散批次更新;

5、效能分析工具

show profile;

mysqlsla;

mysqldumpslow;# ##

explain;

show slow log;

show processlist;

推薦教學:《MySQL教學

以上是MySQL設計規範與原則的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:zhihu。如有侵權,請聯絡admin@php.cn刪除
MySQL的位置:數據庫和編程MySQL的位置:數據庫和編程Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

MySQL:從小型企業到大型企業MySQL:從小型企業到大型企業Apr 13, 2025 am 12:17 AM

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?幻影是什麼讀取的,InnoDB如何阻止它們(下一個鍵鎖定)?Apr 13, 2025 am 12:16 AM

InnoDB通過Next-KeyLocking機制有效防止幻讀。 1)Next-KeyLocking結合行鎖和間隙鎖,鎖定記錄及其間隙,防止新記錄插入。 2)在實際應用中,通過優化查詢和調整隔離級別,可以減少鎖競爭,提高並發性能。

mysql:不是編程語言,而是...mysql:不是編程語言,而是...Apr 13, 2025 am 12:03 AM

MySQL不是一門編程語言,但其查詢語言SQL具備編程語言的特性:1.SQL支持條件判斷、循環和變量操作;2.通過存儲過程、觸發器和函數,用戶可以在數據庫中執行複雜邏輯操作。

MySQL:世界上最受歡迎的數據庫的簡介MySQL:世界上最受歡迎的數據庫的簡介Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的重要性:數據存儲和管理MySQL的重要性:數據存儲和管理Apr 12, 2025 am 12:18 AM

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

為什麼要使用mysql?利益和優勢為什麼要使用mysql?利益和優勢Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。描述InnoDB鎖定機制(共享鎖,獨家鎖,意向鎖,記錄鎖,間隙鎖,下一鍵鎖)。Apr 12, 2025 am 12:16 AM

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用