mysql數據庫設計規范_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):一個表中不能包涵其他相關表中非關鍵字段的信息,即數據表不能有沉余字段;

備注:必須先滿足第二范式;

備注:往往我們在設計表中不能遵守第三范式,因為合理的沉余字段將會給我們減少join的查詢;

例如:相冊表中會添加圖片的點擊數字段,在相冊圖片表中也會添加圖片的點擊數字段;

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;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273163.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jar亂放問題

之前看到一個項目不能繼承類SimpleTagSuppert類,而將jsp-api.jar(不知道servlet-api.jar能不能放)放入到了 jdk/jre/lib/ext包下面結果不僅正在寫的jsp不能運行,以前的web應用也不能運行,會出現 java.lang.ClassNotFo…

python課程筆記_Python課程筆記(一)

由于新冠狀病毒的爆發,不得不在家里上網課,開課已經兩個禮拜了,今天上完Python課后,準備整理一下最近學習Python的筆記。人生苦短,我用Python一、Hello World初學一門新的語言,就一定要從Hello World開始pr…

Bootstrap系列 -- 41. 帶表單的導航條

有的導航條中會帶有搜索表單,在Bootstrap框架中提供了一個“navbar-form”,使用方法很簡單,在navbar容器中放置一個帶有navbar-form類名的表單。navbar-left”讓表單左浮動,更好實現對齊。在Bootstrap框架中,還提供了“navbar-rig…

mysql log table_mysqlbinlog功能擴展--table參數

目的mysqlbinlog在分析mysql的binlog日志時,有時需要針對某個表的操作進行分析。但是這個表屬于“冷數據”,操作記錄相對較少,而其他表操作往往很頻繁,binlog日志量特別大。尤其是當binlog的模式設置為ROW時,情況就更加…

python遞歸迭代_Python入門基礎知識點(python迭代器和遞歸)

函數名的使用:函數名是一個變量, 但它是一個特殊的變量, 與括號配合可以執行函數的變量函數名的內存地址:deffunc():passprint(func) #函數的內存地址結果:函數名可以賦值給其他變量:deffunc():print(1)afunca()func()#函數名可以…

怎么調處vs2010的MSDN幫助文檔

如果裝的是vs2010專業版的話 直接按F1直接可調出在線的幫助 直接按F2可以調出本機版的 轉載于:https://www.cnblogs.com/fag888/p/5789159.html

redis的lrange_thinkphp5操作redis系列教程】列表類型之lRange,lGetRange

namespace app\admin\controller;use think\cache\driver\Redis;use think\Controller;use \think\Db;class Index extends Controller{//獲取redispublic function getRedis(){$redis new \Redis();$redis->connect(127.0.0.1,6379);$redis->auth(root); //redis密碼ec…

如何寫好博客

好的博客是用來解決問題的,每一篇文章都應該以如何解決問題為驅動力,而不是知識點的累加,比如說之前寫的[MVC]系列,均為知識點的堆積,沒有例子和代碼,也沒有說明問題,這樣的文章,基本…

云服務器建站原理_云服務器cvm與建站主機之間的區別

(文章來源:西部數碼)云服務器cvm與建站主機區別是什么?cvm的英文全拼是CloudVirtualMachine(云虛擬機),所以云服務器cvm是指虛擬云服務器,屬于云服務器產品中的一種。而建站主機一般多是指虛擬主機,是在服務器中劃分出…

Magento--判斷checkout中是否使用了coupon code

在checkout頁面中&#xff0c;如果想判斷顧客是否有使用coupon code&#xff0c;可以通過checkout session來進行判斷。以下代碼會返回checkout中使用的coupon code或者返回空&#xff08;當沒有使用coupon code時&#xff09; 1 <?php 2 3 $coupon_code Mage::getSingl…

啟動python內核時發生錯誤_啟動內核時出錯

我一直看到這個消息。在An error ocurred while starting the kernelTraceback (most recent call last):File "C:\Users\Excel\Anaconda3\lib\runpy.py", line 193, in _run_module_as_main"__main__", mod_spec)File "C:\Users\Excel\Anaconda3\lib…

Scala筆記

1、伴生對象 形如&#xff1a; 有一個類 class Test{ } 一個object和該類同名 object Test{ } object Test的作用類似于靜態類&#xff08;工具類&#xff09;&#xff0c;其中的所有成員都是靜態的&#xff0c;在object Test中可以直接訪問class Test的成員&#xff1b;…

maven找到mysql 連接池_在Tomcat6.0+MySQL5.0環境下配置和使用數據庫連接池

一&#xff0c;在Tomcat中配置連接池的JNDI首先到MySQL的網站上下載MySQL JDBC連接器放到%CATALINA_HOME%/lib目錄下&#xff0c;在%CATALINA_HOME%/conf目錄下找到context.xml&#xff0c;這個文件是全局的&#xff0c;如果想只對特定的應用使用可以編輯WEB-INF/context.xml文…

mysql將多個成績放在一排_mysql巧用連表查詢各科成績前三名

下列是各表的詳情&#xff0c;不想自己建表的同學可以直接copy code&#xff0c;數據隨意。創建表成績詳情表&#xff1a;CREATE TABLE score (id int(10) NOT NULL AUTO_INCREMENT,subject_id int(10) DEFAULT NULL,student_id int(10) DEFAULT NULL,score float DEFAULT NULL…

Oracle 跨庫 查詢 復制表數據 分布式查詢

方法一&#xff1a; 在眼下絕大部分數據庫有分布式查詢的須要。以下簡單的介紹怎樣在oracle中配置實現跨庫訪問。比方如今有2個數據庫服務器&#xff0c;安裝了2個數據庫。數據庫server A和B。如今來實如今A庫中訪問B的數據庫。 第一步、配置Aserver端的tnsnames.ora文件&#…

java 匹配mysql按鈕_使用Java在mysql查詢中設置匹配函數

我有以下在java中查詢(mysql)的摘錄&#xff1a;queryGeral.append("FROM product p, fabricante_product fp, fabricante f, extensao e, product_autor pa ").append(" WHERE ").append("a.nome like ? AND ").append("p.cod_material …

LeetCode Contains Duplicate (判斷重復元素)

題意&#xff1a; 如果所給序列的元素不是唯一的&#xff0c;則返回true&#xff0c;否則false。 思路&#xff1a; 哈希map解決。 1 class Solution {2 public:3 bool containsDuplicate(vector<int>& nums) {4 unordered_map<int,int> mapp;5 …

提高團隊代碼質量

近期看到一篇博客。大致的意思就是網管將原本混亂不堪的交換機整理整齊了&#xff0c;起初交換機是圖2那樣的&#xff0c;由于越來用的人越多&#xff0c;操作的人越來越多。終于成為了圖1那個樣子。這不禁讓我想到了項目中的代碼。原先在剛上線的時候談不上是完美的&#xff0…

webrender 查看是否開啟_想要體驗極致順滑的網頁加載體驗?手動開啟Firefox WebRender渲染引擎...

昨天我們提到火狐瀏覽器最新穩定版Mozilla Firefox v67 版將面向部分用戶開啟WebRender渲染引擎測試。據火狐瀏覽器團隊介紹當用戶開啟新的渲染引擎后 , 網頁加載幀率能夠從現有的 20FPS 直接提升到 60FPS。不過新的渲染引擎本身并不是用于加快網頁的加載速度&#xff0c;而是…

NOIP201307貨車運輸

試題描述A 國有n座城市&#xff0c;編號從1到n&#xff0c;城市之間有m條雙向道路。每一條道路對車輛都有重量限制&#xff0c;簡稱限重。現在有q輛貨車在運輸貨物&#xff0c;司機們想知道每輛車在不超過車輛限重的情況下&#xff0c;最多能運多重的貨物。輸入第一行有兩個用一…