物理設計
定義資料庫、表及字段的命名規範
1、命名遵守可讀性
2、表意性原則
3、長名原則
選擇合適的儲存引擎
通常情況下,請選用innodb做為儲存引擎。
innodb主鍵需要考慮:
(1)主鍵應盡可能的小—提公升索引效率
(2)主鍵應該是順序增長得—增加資料的插入效率,減少隨機io生成。
(3)innodb的主鍵和業務主鍵可以不同
表中的字段選擇合適的資料型別
當乙個列可以選擇多種資料型別時,應該優先數字型別,其次是日期或二進位制型別,最後是字元型別。對於相同級別的資料型別,應該優先選擇占用空間小的資料型別
——–>如何選擇正確的整數型別
值得提下,有的程式設計師設定為int為2寬度,以為是只佔2寬度,其實是沒有任何意義的,還是占有4個位元組
——–>如何選擇正確的實數型別
若是財務則需要非常精確的型別decimal,其他考慮使用float和double型別
如何選擇varchar和char型別
1、varchar用於儲存變長字串,只占用必須的儲存空間
2、列的最大長度小於255則占用乙個額外位元組用於記錄字串長度
3、列的最大長度大於255則要占用兩個額外位元組用於記錄字串長度
varchar長度的選擇
1、使用最小的符合需求的長度
2、盡量避免在正式環境下修改長度,因為會引起鎖表,對業務影響會很大。
varchar適用場景
1、字元列的最大長度比平均長度大很多
2、字串列很少被更新
3、使用了多位元組字元儲存字串
char特點
1、char型別是定長
2、字串儲存在char型別的列中會刪除末尾的空格
3、char型別最大寬度為255
char場景
儲存的長度近似(md5、身份證)
適合短字串(男\女–char(1)比vchar好,在utf8為例,char需要3個位元組,而vchar則需要4個位元組)
經常更新的字串(減少儲存碎片)
如何選擇儲存日期資料
mysql5.7以後會有如下兩個型別:date型別和time型別; 儲存使用者生日時,只需要儲存日期部分選擇date。
使用date型別優點據
1、占用位元組數比使用字串、datetime、int儲存要少,使用date型別只需要3個位元組
2、使用date型別還可以利用日期時間函式進行日期之間的計算
time用於儲存時間資料,格式為hh:mm:ss
儲存日期時間資料主要事項
1、千萬不要使用字串型別來儲存日期時間
日期時間型別通常比字串占用的空間小,日期時間型別在進行查詢過濾時可以利用日期來進行對比
日期時間型別還有豐富的處理函式,可以方便進行日期計算。
2、使用int儲存日期時間不如使用timestamp型別(時間戳儲存),timestamp比int資源占用更少。
datatime型別
兩部分組成 日期和時間,該型別與時區無關,占用8個位元組儲存。
timestamp
儲存的是時間戳,以yyyy-mm-dd hh:mm:ss顯示 占用4個位元組,timestamp依賴指定的時區,在行的資料修改時可以自動修改timestamp的值
資料表設計
在進行完了資料調研 需求分析 技術實現方案,進行資料設計。資料設計,往往包含兩個環節 在本專案中,我們所有的資料設計環節,只會涉及第二個,不會涉及第乙個。因為我們為了突出課程重點,也就是spark。所以主要還是集中在spark上面,就不要花時間去做hive etl了。設計mysql中的業務表的結構。...
資料表設計
資料表設計 三大正規化 第一正規化 列的原子性,每一列是不可再拆分的 若是還要查詢省份或地區,則該錶有誤,不滿足第一正規化,則應 第二正規化 表裡面的每一列都應與主鍵有關 範例 品種列亂入不和主鍵有關係,不滿足第二正規化 科考,人員代號和科目代號為聯合主鍵,姓名雖與人員代號有關,但在成績表出來前人的...
quartz設計資料表
qrtz calendars 以 blob 型別儲存 quartz 的 calendar 資訊 qrtz cron triggers 儲存 cron trigger,包括 cron 表示式和時區資訊 qrtz fired triggers 儲存與已觸發的 trigger 相關的狀態資訊,以及相聯 j...