數據庫表結構設計,常見的數據庫管理系統( 二 )

二、設計規范1、涉及模塊通過上面幾個表設計的案例,可以看到表設計關聯到數據庫的各個方面知識:數據類型,索引,編碼,存儲引擎等 。表設計是一個很大的命題,不過也遵循一個基本規范:三范式 。
2、三范式

  • 基礎概念
一范式
表的列的具有原子性,不可再分解,即列的信息,不能分解,關系型數據庫MySQL、Oracle等自動的滿足 。
【數據庫表結構設計,常見的數據庫管理系統】二范式
每個事實的數據記錄只會出現一次, 不會冗余, 通常設計一個主鍵來實現 。
三范式
要求一個表中不包含已經存在于其它表的非主鍵信息,例如部門和員工的信息,員工表包含部門表的主鍵ID,則可以關聯獲取相關信息,沒必要在員工表保存相關信息 。
  • 優缺點對比
范式化設計
范式化結構設計通常更新快,因為冗余數據較少,表結構輕巧,也更好的寫入內存中 。但是查詢起來涉及到關聯,代價非常高,非常損耗查詢性能 。
反范式化設計
所有的數據都在一張表中,避免關聯查詢,索引的有效性更高,但是數據的冗余性極高 。
  • 建議結論
上述的兩種設計方式在實際開發中都是不存在的,在實際開發中都是混合使用 。比如匯總統計,緩存數據,都會基于反范式化的設計 。
三、字段屬性合適的字段類型對于高性能來說非常重要,基本原則如下:簡單的類型占用資源更少;在可以正確存儲數據的情況下,選最小的數據類型 。
1、數據類型選擇
  • 整數類型
TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,根據數據類型范圍合理選擇即可 。
  • 實數類型
FLOAT、DOUBLE、DECIMAL,建議資金貨幣相關類型使用高精度DECIMAL存儲,或者把數據成倍擴大為整數,采用BIGINT存儲,不過處理相對麻煩 。
  • 字符類型
CHAR、VARCHAR,長度不確定建議采用VARCHAR存儲,不過VARCHAR類型需要額外開銷記錄字符串長度 。CHAR適合存儲短字符,或者定長字符串,例如MD5的加密結構 。
  • 時間類型
DATETIME、TIMESTAMP,DATETIME保存大范圍的值,精度秒 。TIMESTAMP以時間戳的格式,范圍相對較小,效率也相對較高,所以通常情況建議使用 。
MySQL的字段類型有很多種,可以根據數據特性選擇合適的,這里只描述常見的幾種類型 。
2、基礎用法操作
  • 數據類型
修改字段類型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT '0' ;ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT '1' COMMENT '狀態:0不可用,1可用';修改名稱位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ;
  • 索引使用
索引類型:主鍵索引,普通索引,唯一索引,組合索引,全文索引 。這里演示普通索引的操作 。MySQL的核心模塊,后續詳說 。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ;CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
刪除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引
不具有真正意義上的修改,可以把原有的索引刪除之后,再次添加索引 。

推薦閱讀