資料庫結構優化目的:
1、減少資料冗餘
2、盡量避免資料維護**現更新,插入和刪除異常
插入異常:如果表中的某個實體隨著另乙個實體而存在
更新異常:如果更改表中的某個實體的單獨屬性時,需要對多行進行更新
刪除異常:如果刪除表中的某個實體會導致其他實體的消失
3、節約資料儲存空間
4、提高查詢效率
資料庫結構設計的步驟:
1、需求分析:全面了解產品設計的儲存需求,儲存需求,資料處理需求,資料的安全性和完整性
2、邏輯設計:設計資料的邏輯儲存結構,資料實體之間的邏輯關係,解決資料冗餘和資料維護異常
3、物理設計:根據所使用的資料庫特點進行表結構設計
4、維護優化:根據實際情況對索引、儲存結構等進行優化
資料庫設計的正規化:設計出沒有資料冗餘和資料維護異常的資料庫結構
三正規化:第一正規化:資料庫表中所有欄位都具有單一屬性,不可再分割;單一屬性的列是由基本的資料型別所
構成;設計出來的表都是簡單的二維表
第二正規化:乙個表中只有乙個業務主鍵 (
一是表必須有乙個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的部分)第三正規化:
目標是確保每列都和主鍵列直接相關,而不是間接相關(另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴).
第一正規化:確保每列的原子性(強調的是列的原子性,即列不能夠再分成其他幾列).反正規化化:用儲存空間換取更高的效率如果每列(或者每個屬性)都是不可再分的最小資料單元(也稱為最小的原子單元),則滿足第一正規化.
例如:顧客表(姓名、編號、位址、……)其中"位址"列還可以細分為國家、省、市、區等。
第二正規化:在第一正規化的基礎上更進一層,目標是確保表中的每列都和主鍵相關(一是表必須有乙個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的部分)
如果乙個關係滿足第一正規化,並且除了主鍵以外的其它列,都依賴於該主鍵,則滿足第二正規化.
例如:訂單表(訂單編號、產品編號、定購日期、**、……),"訂單編號"為主鍵,"產品編號"和主鍵列沒有直接的關係,即"產品編號"列不依賴於主鍵列,應刪除該列。
第三正規化:在第二正規化的基礎上更進一層,目標是確保每列都和主鍵列直接相關,而不是間接相關(另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴).
如果乙個關係滿足第二正規化,並且除了主鍵以外的其它列都不依賴於主鍵列,則滿足第三正規化.
為了理解第三正規化,需要根據armstrong公里之一定義傳遞依賴。假設a、b和c是關係r的三個屬性,如果a-〉b且b-〉c,則從這些函式依賴中,可以得出a-〉c,如上所述,
依賴a-〉c是傳遞依賴。
例如:訂單表(訂單編號,定購日期,顧客編號,顧客姓名,……),初看該錶沒有問題,滿足第二正規化,每列都和主鍵列"訂單編號"相關,再細看你會發現"顧客姓名"和"顧客
編號"相關,"顧客編號"和"訂單編號"又相關,最後經過傳遞依賴,"顧客姓名"也和"訂單編號"相關。為了滿足第三正規化,應去掉"顧客姓名"列,放入客戶表中。
物理設計:為表中的字段選擇合適的資料型別
當乙個列可以選擇多種資料型別時,應該優先考慮數字型別,其次是日期或二進位制型別
,最後是字元型別。對於相同級別的資料型別,應該優先選擇占用空間小的資料型別
float 不精確,double不精準,decimal精準(decimal比bigint大,占用九個位元組)
varchar變長,小於255,會有乙個位元組記錄長度,大於255會有兩位元組記錄長度,適合儲存變化小的列
char定長,分配好長度,適合儲存長度相差不多或定長,儲存較短字元,經常會更新字串(防止產生更多的儲存碎片,可以獲得更好的i/o效能)
timestamp依賴時區,修改時會更改,datetime不依賴時區
mysql資料庫優化索引 mysql資料庫索引調優
一 mysql索引 1 磁碟檔案結構 innodb引擎 frm格式檔案儲存表結構,ibd格式檔案儲存索引和資料。myisam引擎 frm格式檔案儲存表結構,myi格式檔案儲存索引,myd格式檔案儲存資料 2 mysql資料庫資料範問原理 innodb btree 1 ibd檔案中主鍵構建b tree...
mysql資料庫優先 MySQL資料庫優化
1.新增索引 mysql資料庫的四類索引 index 普通索引,資料可以重複,沒有任何限制。unique 唯一索引,要求索引列的值必須唯一,但允許有空值 如果是組合索引,那麼列值的組合必須唯一。primary key 主鍵索引,是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許有空值,一般是在建立表...
mysql資料庫優化
用到啥學啥,mysql資料庫優化成了這幾天的老大難問題。瘋狂的尋找mysql優化的資料,覺得有用的不少,記錄下跟大家分享,對了,這裡僅僅是mysql資料庫本身的優化,沒有寫磁碟之類的 開始之前,介紹倆mysql的命令 show global status 檢視執行狀態的,顯示執行各種狀態值 show...