MYSQL數據庫設計之字段選擇原則


關於字段的選擇其實很多地方都有進行詳細的介紹,我這里只寫一下我在使用過程中的心得感受。如果想要全面的了解的話,大家可以去看高性能MYSQL這一本書籍,里面有一章節介紹的特別全面,基本涉及MYSQL中全部的字段的介紹。

我這里給大家介紹的就一些常用的字段,例如:int、float、double、 decimal、varchar、char、 date、datetime等八種常用的類型。

在數據庫設計過程中我們要本着夠用的原則,如果一味的把數據字段范圍設為最大或者默認值的話,會導致存儲空間大量的浪費。在數據量特別大的情況下,這樣的設計原理將會使數據庫空間造成嚴重的浪費,也會對數據庫的執行效率造成很大的影響。所以我們在做數據庫設計的時候要謹慎再謹慎、小心再小心。

下面說一下字段各自的使用原則:

1.當數據存儲的是字符,且長度是一個固定區間定值的話就可以考慮使用char來進行存儲,如果字符長度是未知的且長度變化特別明顯的話,這個時候最好使用varchar來存儲。但是不管使用的是哪種字段來進行存儲,都不要把字段的初始長度設置為最大化,應該是根據業務需求來存儲最合適的長度字段。

2.數據庫設計過程中盡量使用int來作為字段類型,因為在所有的數據類型中int不管是存儲空間還是執行速度方面都是最好的。例如:如果業務中存儲的都是數據的話而且長度不是特別長的話,就可以考慮使用int來進行存儲,或者業務中要對數據進行排序的時候需要使用某一標識權重之類的,也可以使用int來進行存儲。但是不要因為int高效,而有意識的把所有字段都設計成int來處理,最終還是要根據業務的具體需求來設計相應的字段。

3.在涉及到金額的時候如果對精度要求不高的情況下可以優先使用float,其次是使用double來進存儲。如果對精度要求比較高的情況下最好使用decimal來存儲,但是相應的它 的效率沒有float和double那么高效。具體使用哪種還是要根據業務的具體需求來選擇。

4.關於date和datetime的用法,就要看你想要存儲時間的精確值了,如果僅僅是想要精確到天的話使用date就可以了,如要要精確到秒一級別的就要使用datetime了。有時候大家使用datetime的使用卻只是存儲到天的日期單位時,這個時候就會自動添加00:00:00在數據的后面,作為秒一級別的數據。

5.int(5)和int(10)的區別是什么?想必大家也很好奇吧,其實5和10其實只是顯示長度的卻別而已,也就是不管int(x)x的值是什么值,存儲數字的取值范圍還是int本身數據類型的取值范圍,x只是數據顯示的長度而已。

6.varchar(10)和char(10)的差別是什么?存儲超過時候會發生什么問題呢?這個問題其實也相對經典,我也是整了很久才搞清楚的。在MYSQL5,5以后,varchar(x)x中范其實是存儲字段的長度范圍,就是一個字符代表一個長度,不管這個字符是漢子還是字符都算是一個長度單位。varchar雖然設置長度值,可是因為varchar是可變的長度類型,也就是當存儲的長度小於x時候,其實實際的存儲空間不是x而是實際存儲的字符長度+一些標示空間。當然如果超過x的長度的話還是會報錯的。而char(y)中y的值就是存儲空間實際的存儲長度,超過這個長度的話就會報錯。
---------------------

數據庫中字段的數據類型與JAVA中數據類型的對應關系

 
類型名稱 顯示長度 數據庫類型 JAVA類型 JDBC類型索引(int) 描述
           
VARCHAR L+N VARCHAR java.lang.String 12  
CHAR N CHAR java.lang.String 1  
BLOB L+N BLOB java.lang.byte[] -4  
TEXT 65535 VARCHAR java.lang.String -1  
           
INTEGER 4 INTEGER UNSIGNED java.lang.Long 4  
TINYINT 3 TINYINT UNSIGNED java.lang.Integer -6  
SMALLINT 5 SMALLINT UNSIGNED java.lang.Integer 5  
MEDIUMINT 8 MEDIUMINT UNSIGNED java.lang.Integer 4  
BIT 1 BIT java.lang.Boolean -7  
BIGINT 20 BIGINT UNSIGNED java.math.BigInteger -5  
FLOAT 4+8 FLOAT java.lang.Float 7  
DOUBLE 22 DOUBLE java.lang.Double 8  
DECIMAL 11 DECIMAL java.math.BigDecimal 3  
BOOLEAN 1 同TINYINT      
           
ID 11 PK (INTEGER UNSIGNED) java.lang.Long 4  
           
DATE 10 DATE java.sql.Date 91  
TIME 8 TIME java.sql.Time 92  
DATETIME 19 DATETIME java.sql.Timestamp 93  
TIMESTAMP 19 TIMESTAMP java.sql.Timestamp 93  
YEAR 4 YEAR java.sql.Date 91






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM