程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 關於設計表時應該注意的問題(MySql)

關於設計表時應該注意的問題(MySql)

編輯:關於MYSQL數據庫
  關於設計表時應該注意的問題 如有錯誤歡迎大家指出。這段時間在家裡,做了點修正。 1、慎重選擇表名。 有兩種選擇:按照多數開發語言的命名規則。比如(myCustomer)。按照多數開源思想命名規則。比如(my_customer)。按照咱們中國人的思想。比如(我的客戶)。第一種有個缺點,很容易忘掉大寫的字母。第二種則比較好,每個Word間用下劃線連接,避免遺忘。第三種建議不要用,雖然很好記。不覺得解析這個表的時候還需要編碼轉化嗎?我個人理解,大家可以補充。 2.  關於編碼的設定。 A.             GBK/GB2312.(適用於純中文存儲)。 B.           UTF8.(適用於中英文混合存儲)。 C.            LATIN1。(適用於純英文存儲)。 D.     其他的。 3. 關於表引擎的選擇。 A.                 MYISAM.(很多人說她的表級鎖定會帶來好多問題,其實只要設計好對應的表以及寫好對應的SQL查詢就沒有那麼大的問題。) B.                  INNODB. (如果要用到事務,選擇她不會錯。至於多數人講的MASTER/SLAVE結構上用INNODB在MASTER的選擇是否正確,就要看你怎麼用了。不能一味的瘋狂使用INNODB。除非你想要確保非常高可用性,) C.                  CSV. (以前我寫過文章,關於這個引擎。個人覺得最主要的是來存儲少量數據以及從Excel到MySQL的轉換方面會很有用。當然只要涉及到規則數據的導入,她就可以辦到。) D.                  BLACKHOLE. (覺得最完美的用處在於MASETR/SLAVE上面,並且MASTER是一個臨時的專門負責寫的機器。不過缺點也很多,會與MYISAM或者INNODB或者其他的引擎有所沖突,這點自己要做個權衡)。 E.                   MEMORY. (應該說是MYISAM的兄弟了。不過在讀內存總比讀磁盤的速度要快。不過要注意,它不支持動態數據類型)。 F.                   FEDERATED. (典型的分布式引擎。我以前文章中有介紹。) G.    NDB。(網絡版存儲引擎。因為Replication 總是有延遲,所以如果系統容不得任何延遲,就用這個吧。)
   H.    FOLCON。(6.0後用來代替INNODB的引擎。)
I.                  其他舊的以及新開發的引擎具體介紹:http://dev.MySQL.com/doc/refman/6.0/en/storage-engines.Html)。 4. 關於屬性數據類型的選擇。 A.                  INT(一個字節的TINYINT,兩個字節的SMALLINT,三個字節的MEDIUMINT,四個字節的INT,8個字節的BIGINT。記住:UNSIGNED不管你定義或者不定義,都不影響內部的存儲字節大小) B.                   少於10個字符用CHAR是在合適不過了。(不過要記住在MEMORY引擎裡面會自動把VARCHAR轉化為CHAR) C.                   我一般用DECIMAL或者NUMERIC來代替FLOAT 或者DOUBLE。因為老板要求精確的數字。如果不要求精確的,那就用FLOAT吧。速度快,占空間小。(DECIMA、FLOAT(P)是動態存儲。比如:DECIMAL(10,2)占用5個字節。FLOAT占4個字節,) D.                 BLOB,TEXT,VARCHAR(一般存放文章內容,特別是新聞網站。需要的字節數是所存儲的字符長度+1。記住BLOB和VARCHAR是TEXT和CHAR的BINARY類型) E.                   ENUM(在一定范圍內絕佳的代替VARCHAR和CHAR的工具,因為她只占一到兩個字節。) F.                   時間和日期類型(占3個字節的DATE,8個字節的DATETIME,4個字節的TIMESTAMP,3個字節的TIME,1個字節的YEAR。)。如果要存儲比如‘1983’這樣的年份,用YEAR明顯比VARCHAR或者CHAR要節省空間。因為後者要占5個字節。 G.                  BOOLEAN(用來存儲YES或者NO之類的值,占用一個字節。) H.                  關於自增字段。目前我們的項目中涉及到好多ORDER BY RAND()操作。此類語句在數據庫並發大的時候會造成CPU嚴重阻塞,持續產生數據庫死鎖!解決此類問題最好的辦法就是利用自增字段,用程序隨即生成數字序列,或者在數據庫端隨即生成數字序列。 I.                    關於ZEROFILL。非常好用的前置填補0的存儲,而不是用用對應個數的空串來代替。在需要前置補零的操作中INT ZEROFILL可以用來代替CHAR或者VARCHR。 5.  關於默認值。 A.                  在5.0之後,只要設定字段為NOT NULL,系統自動給出默認值。對應CHAR->’’,INT->0,BOOLEAN->0等等。 B.                   在5.0之前的版本,需要手動指定默認值,否則會出現一定的異常。到時候查都不好查了。 6.  關於多數據庫建立。 A.                  應該把對應的業務放在各自不同的數據庫裡,而不是所有業務放到一個庫裡面。 B.                   數據庫的命名和表命名一樣。 7.  關於索引。 A.                  設計表初期盡量考慮到應該建立的索引。所有建立的索引一定要測試一下,看是否有必要,否則會翻倍的減少寫數據的性能。 B.                   對於只有存儲0或者1的列,盡量干掉索引,單獨分出兩個表。一個代替0,另外一個代替1。或者在一個字段裡面用EMUM或者CHAR(0)或者CHAR(1)來代替。    PS: 最後一個要值得注意的,就是盡量所有的字段用NOT NULL。雖然MySQL可以對NULL列進行索引,不過我不建議
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved