本文目錄一覽:
資料庫設計(MySQL)
id欄位需要細化,用戶ID,作品ID,作者ID;類型表不需要;用戶表和管理員表可以合併,添加是否為管理員的判定欄位;文學經典表和戲曲文化表可以合併為作品表,用type做區分即可;留言和收藏可以單獨做兩個表,按時間順序記錄,其中欄位需要關聯到相對應的其他表的ID;
急需MySql資料庫設計規範
1. 數據表命名規範
模塊名縮寫_存儲信息[_存儲信息子類](多個單詞用下劃線分隔),全部小寫,例如:b2c_goods_type
2. 欄位命名規範
存儲信息屬性(多個單詞用下劃線分隔),全部小寫,命名規則只來自於業務,盡量表達出列的含義。
例如:goods_id
3. 欄位類型規範。
規則:用盡量少的存儲空間來存 數一個欄位的數據.
比如能用int的就不用char或者varchar
能用tinyint的就不用int
能用 varchar(20)的就不用varchar(255)
時間戳欄位盡量用int型,如 created:表示從 ‘1970-01-01?08:00:00’開始的int秒數,採用英文單詞的過去式;gmtCreated:表示datetime類型的時間,即形如 ‘1980-01-01?00:00:00’的時間串,Java中對應的類型為Timestamp
日期:用date
時間:用time
數字格式的用:int、tinyint、mediumint、smallint、bigint根據實際情況選擇
字元串:用char、varcahr;
文本:用text
金額:用float
MYSQL資料庫的物理設計都包括哪些內容,怎麼設計?
Log File物理結構
從 ib_logfile0和 ib_logfile1這兩個文件的物理結構可以看出,在Log Header部分還是有些許差異的, ib_logfile0會多一些額外的信息,主要是checkpoint信息。
並且每個Block的單位是512位元組,對應到磁碟每個扇區也是512位元組,因此redo log寫磁碟是原子寫,保證能夠寫成功,而不像index page一樣需要double write來保證安全寫入。
我們依次從上到下來看每個Block的結構
Log File Header Block
Log Goup ID,可能會配置多個redo組,每個組對應一個id,當前都是0,佔用4位元組
Start LSN,這個redo log文件開始日誌的lsn,佔用8位元組
Log File Number,總是為0,佔用4位元組
Created By,備份程序所佔用的位元組數,佔用32位元組
另外在ib_logfile0中會有兩個checkpoint block,分別是 LOG_CHECKPOINT_1/ LOG_CHECKPOINT_2,兩個記錄InnoDB Checkpoint信息的欄位,分別從文件頭的第二個和第四個block開始記錄,並且只在每組log的第一個文件中存在,組內其他文件雖然沒有checkpoint相關信息,但是也會預留相應的空間出來。這裡為什麼有兩個checkpoint的呢?原因是設計為交替寫入,避免因為介質失敗而導致無法找到可用的checkpoint的情況。
Log blocks
請點擊輸入圖片描述
log block結構分為日誌頭段、日誌記錄、日誌尾部
Block Header,佔用12位元組
Data部分
Block tailer,佔用4位元組
Block Header
這個部分是每個Block的頭部,主要記錄的塊的信息
Block Number,表示這是第幾個block,佔用4位元組,是通過LSN計算得來的,佔用4位元組
Block data len,表示該block中有多少位元組已經被使用了,佔用2位元組
First Rec offet,表示該block中作為第一個新的mtr開始的偏移量,佔用2位元組
Checkpoint number,表示該log block最後被寫入時的檢查點的值,佔用4位元組
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/256752.html