mysql關系模式怎么畫_關系數據庫與mysql

下面是阿里的mysql設計原則,可以參考,不一定按照阿里規則,但一個團隊一定要有規則,如果現在沒有規則,從現在開始,慢慢推廣,適應

1.【強制】表達是與否概念的字段,必須使用 is_xxx的方式命名,數據類型是 unsigned tinyint( 1表示是,0表示否) 說明:任何字段如果為非負數,必須是 unsigned。

2.【強制】表名、字段名必須使用小寫字母或數字;禁止出現數字開頭,禁止兩個下劃線中間只出現數字。數據庫字段名的修改代價很大,因為無法進行預發布,所以字段名稱需要慎重考慮。 正例:getter_admin,task_config,level3_name 反例:GetterAdmin,taskConfig,level_3_name

3.【強制】表名不使用復數名詞。 說明:表名應該僅僅表示表里面的實體內容,不應該表示實體數量,對應于 DO類名也是單數形式,符合表達習慣。

4.【強制】禁用保留字,如 desc、range、match、delayed等,請參考 MySQL官方保留字。

5.【強制】唯一索引名為 uk_字段名;普通索引名則為 idx_字段名。 說明:uk_ 即 unique key;idx_ 即 index的簡稱。

6.【強制】小數類型為 decimal,禁止使用 float和 double。 說明:float和 double在存儲的時候,存在精度損失的問題,很可能在值的比較時,得到不正確的結果。如果存儲的數據范圍超過 decimal的范圍,建議將數據拆成整數和小數分開存儲。

7.【強制】如果存儲的字符串長度幾乎相等,使用 char定長字符串類型。

8.【強制】varchar是可變長字符串,不預先分配存儲空間,長度不要超過 5000,如果存儲長度大于此值,定義字段類型為 text,獨立出來一張表,用主鍵來對應,避免影響其它字段索引效率。

9.【強制】表必備三字段:id, gmt_create, gmt_modified。 說明:其中 id必為主鍵,類型為 unsigned bigint、單表時自增、步長為 1。 gmt_create,gmt_modified的類型均為 date_time類型。

10.【推薦】表的命名最好是加上“業務名稱_表的作用”。 正例:tiger_task / tiger_reader / mpp_config

11.【推薦】庫名與應用名稱盡量一致。

12.【推薦】如果修改字段含義或對字段表示的狀態追加時,需要及時更新字段注釋。

13.【推薦】字段允許適當冗余,以提高性能,但是必須考慮數據同步的情況。冗余字段應遵循: 1)不是頻繁修改的字段。 2)不是 varchar超長字段,更不能是 text字段。 正例:商品類目名稱使用頻率高,字段長度短,名稱基本一成不變,可在相關聯的表中冗余存儲類目名稱,避免關聯查詢。

14.【推薦】單表行數超過 500萬行或者單表容量超過 2GB,才推薦進行分庫分表。 說明:如果預計三年后的數據量根本達不到這個級別,請不要在創建表時就分庫分表。

15.【參考】合適的字符存儲長度,不但節約數據庫表空間、節約索引存儲,更重要的是提升檢索速度。 正例:人的年齡用 unsigned tinyint(表示范圍 0-255,人的壽命不會超過 255歲);海龜就必須是 smallint,但如果是太陽的年齡,就必須是 int;如果是所有恒星的年齡都加起來,那么就必須使用 bigint

創建索引的原則

1. 對查詢條件,分組條件,排序條件的字段創建索引,有可能是多列索引,update時后面的條件語句也屬于查詢條件

2. 創建索引對更新插入刪除有影響,相反

3. 索引字段的長度越小越好,這里指的是性能

Mysql存儲引擎使用的B+Tree

B+樹是演變過來的,首先是二叉查找樹,平衡二叉樹,B樹

1.二叉查找樹,樹種結點的度不大于2的有序樹,最多結點數:2^n -1 ,n為數的高度,如n=3,最多7個結點,n=5,最多31個結點(達到最大結點數叫做滿二叉樹)

某一層的最多結點個數 2^(n-1) ,如果n=3,第三層最多4個結點,如n=30,第31層最多 2^30=1073741824,記住這一點,后面會用到

2. 二叉樹如果在不控制的情況下會變為一條直線,失去了查找優勢,這時出現二叉平衡樹

3. B樹,二叉樹實際情況無法使用,因為需要n多次的磁盤IO,B樹,一個結點存儲更多的key,同時存儲數據

4. B+樹,為了存儲更多的key值,同時考慮到數據庫查詢的其它需要,B樹結點不存儲數據,只存儲key,所有數據存儲在葉子結點

5. mysql默認頁大小16k,能存儲多少數據記錄和數據庫記錄大小有關系,假設葉子結點存儲16條數據,一條記錄大小1K,非葉子結點存儲1000個key

高度為3 ,總記錄數就是 1000*1000*16 = 16000000.

視圖,記錄,字段

每種數據庫有自己視圖,我們常說的視圖一般是關系視圖,可以關聯一張或幾張表,方便信息查詢和權限控制等

數據庫事務

ACID ,mysql數據庫隔離級別 ,Read Uncommited ,Read Commited ,Repeatable Read,Serialiable,注意,mysql是這幾種隔離級別,其它數據庫不一定有

臟數據,讀到了沒有提交的數據

不可重復讀,一個事務在執行過程中,兩次讀的數據不一致,解決方法是mvvc

幻讀,數據做了插入或刪除操作,但是其它事務插入或刪除了某條數據,出現沒有刪除干凈,或者都刪除了的情況,在可重復讀的隔離級別下,快照讀不會出現幻讀,當前讀時,innodb 通過間隙鎖和行鎖共同作用控制,使得查詢語句掃描到的數據及數據中間不能插入也不允許修改,從而不會出現幻讀現象。

SQL和存儲過程

SQL99和SQL92

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

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

相關文章

Javascript 構造函數模式、原型模式

前兩天寫完組合繼承,打算總結一下原型繼承的,不過今天看了一下工廠模式、構造函數模式和原型模式,覺得有必要總結一下以加深印象。 ———————————————————————————————————————————————————…

2016年CCF第七次測試 俄羅斯方塊

1 //2016年CCF第七次測試 俄羅斯方塊2 // 這道小模擬題還是不錯3 // 思路&#xff1a;處理出輸入矩陣中含1格子的行數和列數4 // 再判是否有一個格子碰到底部&#xff0c;否則整體再往下移動一步&#xff0c;如果有一個格子不能移動&#xff0c;要返回到前一步5 6 #include <…

springmvc視圖解析器_SpringMVC視圖及REST風格

什么是視圖解析器&#xff1f;springMVC用于處理視圖最重要的兩個接口是ViewResolver和View。ViewResolver的主要作用是把一個邏輯上的視圖名稱解析成一個真的的視圖&#xff0c;而SpringMVC中用于把View對象呈現給客戶端的是View對象本身&#xff0c;而ViewResolver只是把邏輯…

mysql5.7.x 1251_MySql-8.0.x免安裝版下載與配置,Navicat打開數據庫鏈接報錯1251的解決辦法...

概述MySQL從5.7一下子跳到了MySQL8.0, 其中的變化必然是很大的, 這里就不說了, 本文主要講解最新版MySQL安裝的事情.實際上5.7版本后的mysql免安裝版都是沒有data文件和my.ini文件的&#xff0c;下面再具體說明怎么生成&#xff0c;注意不能自己手動新建.下載下載程序必然去官網…

To install 64-bit ODBC drivers

為了更充分的利用硬件資源&#xff0c;我想很多人都開使用64位操作系統了&#xff0c;同時你可以也發現了在64位操作系統上ODBC的驅動找不到了&#xff0c;所以ODBC的東西都沒法用了。 因為2007以前版本的Office只有32位版本&#xff0c;所以我們不能在64位系統上使用ODBC。使用…

【Qt開發】QTableWidget設置根據內容調整列寬和行高

QTableWidget要調整表格行寬主要涉及以下一個函數 1.resizeColumnsToContents(); 根據內容調整列寬 2.resizeColumnToContents(int col); 根據內容自動調整給定列寬 3.horizontalHeader()->setResizeMode 把給定列…

深入淺出mysql數據開發_深入淺出MySQL數據庫開發、優化與管理維護 PDF掃描版[513KB]...

深入淺出MySQL數據庫開發、優化與管理維護 內容介紹&#xff1a;本書從數據庫的基礎、開發、優化、管理維護4個方面對MySQL進行了詳細的介紹&#xff0c;其中每一部分都獨立成篇。本書內容實用&#xff0c;覆蓋廣泛&#xff0c;講解由淺入深&#xff0c;適合于各個層次的讀者。…

Understand Lambda Expressions in 3 minutes(翻譯)

本文翻譯自CodeProject上的一篇簡單解釋Lambda表達式的文章&#xff0c;適合新手理解。譯文后面我補充了一點對Lambda表達式的說明。 1.什么是Lambda表達式&#xff1f; Lambda表達式是一種匿名方法&#xff0c;多數情況下用來在LINQ中快速創建委托。簡單地說&#xff0c;它代表…

Hibernate二級緩存配置

一、定義&#xff1a; 二級緩存是進程或集群范圍內的緩存&#xff0c;可以被所有的Session共享&#xff0c;是可配置的插件 二、二級緩存原理圖 解析&#xff1a;每次從二級緩存中取出的對象&#xff0c;都是一個新的對象。 三、配置步驟如下&#xff1a; 同理&#xff1a;以員…

redis配置主從沒效果_跟我一起學Redis之加個哨兵讓主從復制更加高可用

Redis哨兵(Sentinel)其實本質就是一個RedisServer節點&#xff0c;通過設置 運行模式 來開啟哨兵的功能&#xff1b;主要功能如下&#xff1a;監控(Monitoring )&#xff1a;哨兵節點會不斷地檢查的主服務和從服務的運行狀態&#xff1b;自動故障遷移(Automatic failover) &…

閏秒導致MySQL服務器的CPU sys過高

今天&#xff0c;有個哥們碰到一個問題&#xff0c;他有一個從庫&#xff0c;只要是啟動MySQL&#xff0c;CPU使用率就非常高&#xff0c;其中sys占比也比較高&#xff0c;具體可見下圖。 注意&#xff1a;他的生產環境是物理機&#xff0c;單個CPU&#xff0c;4個Core。 于是&…

position定位——讓人又愛又恨的屬性

關于css中的position這個屬性&#xff0c;在使用的時候&#xff0c;有時很強大&#xff0c;有時又讓人很無奈。 強大的時候&#xff0c;對于div中的一些小物件不方便使用margin或者padding的時候&#xff0c;給與position:absolute;再配備left、right、top和bottom&#xff0c;…

CentOS 6.8安裝Python2.7.13

轉載自&#xff1a;http://www.cnblogs.com/94YY/p/6224441.html查看當前系統中的 Python 版本python --version返回 Python 2.6.6 為正常。檢查 CentOS 版本cat /etc/redhat-release返回 CentOS release 6.8 (Final) 為正常。安裝所有的開發工具包yum groupinstall -y "D…

新安裝數據庫sqlserver2008r2,使用javaweb連接不上問題處理

鼠標右鍵【計算機】--》【管理】&#xff0c;打開界面如下&#xff1a; 選擇自己數據庫的實例名&#xff1a; 選擇TCP/IP&#xff1a;右鍵【屬性】&#xff0c;將所有TCP動態端口的【0】刪掉&#xff0c;TCP端口設為1433&#xff1b;重啟服務&#xff0c;即可連接。PS:不知道這…

vue 鼠標點擊事件_VBA代碼解決方案第115講:點擊鼠標實現精準控制觸發事件的VBA代碼第二方案...

大家好&#xff0c;我們今日繼續講解VBA代碼解決方案的第115講內容&#xff1a;工作表事件中&#xff0c;根據Target參數不同&#xff0c;實現精準控制觸發事件的VBA代碼第二方案。在上一講中我們講了利用Address的屬性實現控制觸發事件的方案&#xff0c;今日講解第二方案&…

mysql注入5.0以上_[Injection]對MYSQL 5.0服務器以上版本注入

How to do a SQL Injection for MYSQL Server 5.01. Find a vulnerable add a ‘ at the end of the site example: news.php?id1 add a ‘ at the end of the 1 and see if you get a syntax error2. order by #–Keep upping the # until you get an error.3. union all sel…

動態規劃(制表法)模板及應用

int cache[100][100] 初始化為全體為 -1&#xff0c;這樣在 cache 中存儲的可以是其他任意非負整數&#xff0c;也可以是布爾類型 0/1 &#xff08;true/false&#xff09;&#xff0c;1. 模板 int cache[2500][2500];// 初始化為 -1&#xff0c;memset(cache, -1, sizeof(cach…

(翻譯)31天Windows Phone學習-1-項目模板

今天在在外文網站Google關于Windows Phone 7的學習資料&#xff0c;無疑間Google到了Jeff Blankenburg的 31 Days of Windows Phone這個系列&#xff0c;感覺寫的比較基礎和淺顯易懂&#xff0c;適合我這種入們級的人學習&#xff0c;所以準備拿來對Windows Phone 7的簡單入門學…

Mssql 跨域查詢

有數據庫test1和數據庫test2。其中test1中有表 table1、table2&#xff1b;test2 中有表 table1。三個表的字段都為為&#xff1a;id、xingming、shijian、shuliang。接下來我們就以上面的條件為例來介紹跨數據庫查詢和跨表 查詢的方法。 SELECT * FROM OPENROWSET(sqloledb…

arch mysql日志位置_MySQL 日志文件與相關參數

1 、參數文件及mysql參數查看mysql 的 my.cnf 配置文件位置命令&#xff1a;>./bin/mysql --help | grep my.cnf查看mysql 的參數設置命令&#xff1a; mysql > show variables --顯示所有參數; // show variables like log_error% 顯示某匹配參數mysql > select se…