1、首先是工具,我們用的是 mysql資料庫,工具是workbench,這個工具是專門為mysql設計的資料庫建模工具,你可以用它進行設計和建立新的資料庫圖示,在windows上面我們大多用的是powerdesiger,在mac上用workbench目前來看還是挺好用的,無論是建立資料庫文件,er圖,資料庫的遷移都還是很貼心的。
2、資料庫字符集utf-8,統一字符集,也就避免了麻煩的亂碼轉碼問題,utf-8幾乎是好多任務具的通用碼,特殊的列使用擴充套件字符集。
3、每個檔案都有乙個script檔案,這個script檔案裡面有的應該是這個專案的資料庫設計er圖,還有該專案資料庫初始的sql語句,任何有關於該項目的資料庫更改,都應該首先更改該script檔案,並且標註日期,確保該script檔案是正確的據庫設計,因為我們在上線的時候要給運維上傳的sql語句就是從這個er圖匯出來的。
4、相關聯的業務資料表的名字要使用相同的字首,確保乙個業務的多個表在大量表中處於相鄰位置。這點覺得還是很貼心的。
5、資料經常變化的放到一張表;資料不變化的放到一張表;資料不經常變化的一張表。
6、儲存引擎必須使用innodb,innodb支援事務、行級鎖、併發效能更好。
7、不可使用儲存過程、檢視、觸發器,高併發大資料的網際網路業務,如果併發量太大,使用這些會把資料庫拖垮,把業務邏輯放到服務層具備更好的擴充套件性,需求有所變化的時候也更好修改,而不用去修改繁瑣的sql語句,並且能夠輕易簡單的 實現增加機器就增加效能,資料庫的專長在於儲存和索引。專業的事情就讓專業的人來做。
8、禁止使用blob和clob型別的字段,可以使用單獨的庫、單獨的表來儲存大文字的資料,這樣做的話,當運維想要處理、備份資料的時候,這樣的表可以針對性的優化,不用在意一些別的因素。
9、表名使用下劃線分隔,id主鍵統一命名為id bigint(20),資料寫入時可以提高插入效能。
10、每個表中必須包含欄位createtime欄位,建立時間,確保未來預設排序。
11、外來鍵禁止關聯。外來鍵會導致表和表之間的耦合,update和delete都會涉及到相關聯的表,十分影響sql效能,還有可能會造成死鎖。
12、儲存時間相關的資料,要使用時間戳的格式,因為在未來可能會涉及到時區的問題,而時間戳可以完全避免該問題;儲存貨幣相關的資料,要儲存最小貨幣的數量,避免有小數點,因為可能會引起資料精度問題,導致資料不準確。
13、索引命名定義規則,其中一定要包括表名+列名,來確保該索引在整個資料庫中是唯一的。
14、建立組合索引的同時要把區分度較高的放在前面,這樣能夠更加有效的過濾資料。
這樣的分享會一直持續,你的關注,點讚是對我最大的支援,感謝。
每乙個努力認真生活的人都是自己的船長,關注我,我們一起乘風破浪。
面試官 你能說說mysql的幾種日誌檔案嗎?
mysql底層是有三種日誌檔案 undo redo binlog,這裡我們是以innodb儲存引擎為例的,為什麼要牽扯去儲存引擎呢,因為undo redo是屬於innodb儲存引擎的,binlog才是屬於mysql server的日誌檔案 這裡我們通過sql語句 update student nam...
面試題 說說你對資料庫事務的理解
在回答這個問題的時候首先要考慮的是這裡面包含了哪些知識點是我們要回答的,第乙個要點 什麼是事務 第二個要點 資料庫的基本特性是什麼?第三個要點 什麼是事務隔離,有哪些事務隔離級別?什麼是事務 資料庫中的事務是作為單個邏輯工作單元執行的一系列操作。多條 sql 語句,要麼全部執行成功,要麼全部執行失敗...
你能說說Spring框架中Bean的生命週期嗎?
首先簡單說一下 以下為乙個回答的參考模板 1 例項化乙個bean 也就是我們常說的new 2 按照spring上下文對例項化的bean進行配置 也就是ioc注入 3 如果這個bean已經實現了beannameaware介面,會呼叫它實現的setbeanname string 方法,此處傳遞的就是sp...