1006Java面試知識點準備

數據庫表設計需要注意哪些方面?參考文章
設計工具:powerdesigner(適用於不同類型的數據庫)

  1. 實用設計規則:(之前設計表的時候考慮SQL語句查詢的便捷性上,也就是用空間換時間的做法,數據冗餘可能比較多)
    1.綜合考慮空間冗餘和處理速度2方面的因素。
    2.在書寫SQL語句的時候綜合考慮,該合併合併,該拆分拆分
  2. 表設計規範
    1.保證字段的原子性,即字段含義明確,不可拆分
    2.同時在保證第三範式的基礎上適當冗餘,保證處理速度.(如商品下單表中下單金額等數字.用空間來換時間)(所謂三範式則是字段意義明確不可拆分,一條行記錄可以被唯一區分,一張表中的非主鍵信息不能出現在2張表中關於三範式參考文章
  3. 表關係設計
    1.做好靜態表和動態表之間的區別,靜態表如地區碼靜態表與頻繁數據改動的表
    2.不要由null值,因爲null的值出現索引是無法使用的.可以利用“”“”設置爲默認值。
    比如電站建站的申請狀態不要設置空值,否則沒有辦法使用索引.
    3.2張關聯表如果存在多對多關聯關係的話,可以考慮設計中間表,如以往項目中的模塊表,按鈕表.模塊與按鈕表之間的關係就是多對多的關係.所以出現了模塊按鈕中間表,將原來的多個模塊對應多個按鈕,改爲一個模塊對應多個按鈕關係
    4.建表的時候字段長度設置的時候要比實際業務長度超過3~5個字節,考慮到業務的伸縮性和擴展性.字段長度如公告標題 一般20個字就夠了,轉換varchar2可變長度字符要50個差不多了.
    5.對於頻繁修改的字段值,最好用字母或數字去替代,而不要採用中文或者英文的方式.比如公告啓用和停用採用00或者01的方式.而不要用中文啓用停用.
    6.數據庫中不要存儲任何資源,如圖片/視屏/網站等.通過外部鏈接的方式存儲位置.
    即使有blob數據類型也不要存儲,以前的時候合作方機構有各類資質證件就很不合理.
    7.預留備用字段,方便表進行擴展。這點今年有一段時間我做的還是不錯的.設計新的表的時候我都會考慮到多放2~3個備用字段,方便業務的快速擴展.
    所以在表設計這個大難題上結合平時的經驗得出7點意見:靜態表+動態表/設置默認值 方便索引使用/多對多關係表設計中間表/字段長度加4個字節左右/狀態等頻繁修改的值設置爲字母或者數字/資源路徑不要存儲 採用外部鏈接的方式/每張表設計的時候多放2~3個備用字段

主鍵的使用注意事項
主鍵的使用盡量與業務邏輯無關,如mysql中使用自增序列id的方式,同時由於主鍵id可能作爲外鍵使用,所以長度越短越好,像以前那種採用年月日時分秒毫秒+6位隨機數的方式可以考慮作爲業務id,而不作爲主鍵id

提高數據庫運行效率的方式?(並非SQL語句優化的方式)
1.通過降低範式,提高冗餘的方式提高運行效率,減少使用觸發器,多用存儲過程.(雖然沒怎麼用過)
2.當數據庫中的計算非常複雜的時候,通過外部c++計算後再將數據放入到數據庫中.
3.如果數據庫表中數據量過大,考慮水平拆分,就是根據行記錄主鍵,在某一個時間點或者月份前後,將數據拆分爲多張表.(可以參考用戶登錄日誌表,記錄的數據量過多一千萬條).還有一種拆分方式爲垂直拆分,意思就是當一張表裏面的字段過多的時候進行表拆分 爲2張40個字段的表.(實際之前最多的時候一張表也就是60個字段吧)

總之要提高數據庫的運行效率,要從數據庫系統級,數據庫設計級,程序實現級三個層面來整.系統級別一般來講應該我們頂多在安裝數據庫的時候注意類型,版本.而數據庫設計級別也就是上面講的這麼多,從數據冗餘和處理速度兩方面找到最優解,通過設計出滿足第三範式的表結構,如靜態動態分離/設置非空字段利用索引/字段長度大哥3~5個字節/頻繁修改的字段使用數字或者字母代替/通過連接的方式存儲資源/設置備用字段.設置垂直分離和水平分離來提高數據庫運行效率.

結合以往項目理解三範式設計理念參考鏈接

  1. 第一範式:指數據庫中每一個字段只能有一個值.如課程字段,只能是語文或者數學,而不能是語文+數學這種出現,比如以往中出現的系統用戶,角色,權限表中設計的時候.一個用戶可以對應多個角色,但是必須通過多條記錄的方式記錄,不能直接在一條記錄裏面綁定多個角色.
    在這裏插入圖片描述
    在這裏插入圖片描述在這裏插入圖片描述
  2. 第二範式:第二範式是在滿足第一範式的基礎上,每一條記錄可以被唯一標識(其實就是表添加主鍵的必要性,通過數據拆分可以發現非主鍵信息系統+宿舍樓 /課程/分數 都依賴於主鍵學號 所以可以拆分爲2個)
    在這裏插入圖片描述
    在這裏插入圖片描述
  3. 第三範式:第三範式是在滿足第二範式基礎上,表中的非主鍵信息不能出現在多個地方,防止造成數據的大量冗餘.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章