一.表及字段的命名規範
1.可讀性原則
使用大寫和小寫來格式化的庫物件名字以獲得良好的可讀性。
例如:使用custadress而不是custaddress來提高可讀性。(這裡注意有些dbms系統對表名的大小寫是敏感的)
2.表意性原則
物件的名字應該能夠描述它所標識的物件
例如:對於表,表的名稱應該能夠體現 表中儲存的資料內容;對於儲存過程,儲存過程名稱應該能夠體現儲存過程的功能。
3.長名性原則
盡量不要使用縮寫
適用於資料庫(database)名之外的任一物件
二.字段型別的選擇原則
例如:brithday:char(10) ,varchar(20),datatime,int列的資料型別一方面影響資料儲存空間的開銷,另一方面也會影響資料查詢的效能,當乙個列可以選擇多種資料型別時,應該優先考慮數字型別,其次是日期或二進位制型別,最後是字元型別。對於相同級別的資料型別,應該優先選擇占用空間小的資料型別。
原因:
(1)在對資料進行比較(查詢條件,join條件及排序)操作時,
字元處理往往比數字處理慢。
(2)在資料庫中,資料處理以頁為單位,列的長度越小,利於效能的提公升。
三.char和varchar如何選擇
1.如果列中要儲存的資料長度差不多是一致的,則應該考慮用char,否則應該考慮用varchar.
2.如果列中最大資料長度小於50byte,則一般考慮使用char.(當然,如果這個列很少用,則基於節省空間和減少i/o的考慮,還是可以選擇用varchar).
3.一般不宜定義大於50byte的char型別列.
四.decimal和float如何選擇
1.decimal用於儲存精確資料,而float只能用於儲存非精確型資料,故精確型資料只能選擇用decimal型別。
2.由於float的儲存空間開銷一般比decimal小,(精確到7位小數只需要4位元組,而精確到15位小數只需8位元組)故非精確資料優先選擇float型別。
五 .時間型別如何儲存
1.使用int來儲存時間欄位的優缺點
(1)優點:欄位比datatime小
(2)缺點:使用不方便,要進行函式轉換
(3)只能儲存到2038-1-19 11::1:07即2^32為2147483648
2.需要儲存的時間粒度
(1)年月日時分秒周等
六.如何選擇主鍵
1.區分業務主鍵和資料庫主鍵
業務主鍵用於標識業務資料,進行表與表之間的關聯;
資料庫主鍵為了優化資料儲存(innodb會生成6個位元組的隱含主鍵)
2.根據資料庫的型別,考慮主鍵是否要順序增長
有些資料庫是按主鍵的順序邏輯儲存的
3.主鍵的字段型別所佔空間要盡可能的小。
對於使用聚集索引方式儲存的表,每個索引後都會附加主鍵資訊。
八.避免使用觸發器
1.降低資料匯入的效率
2.可能會出現意想不到的資料異常
3.使業務邏輯變得複雜
九.關於預留字段
1.無法精確的知道預留欄位的型別
2.無法精確的知道預留欄位中所儲存的內容
3.後期維護預留欄位所要的成本同增加乙個字段所用的成本是相同的
4.嚴禁使用預留字段。
十.什麼是反正規化化
反正規化化是針對正規化化而言的,在是為了效能和讀取效率的考慮而適當的對第三正規化的要求進行違反,而允許存在少量的資料冗餘,換句話說反正規化化就是使用空間來換取時間
好處:
(1)減少表的關聯數量
(2)增加資料的讀取效率
(3)反正規化化一定要適度
十一.維護和優化
(1)維護資料字典
(2)維護索引
(3)維護表結構
(4)在適當的時候對錶進行拆分
十二.如何維護索引
(1)索引並不是越多越好,過多的索引不但會降低寫的效率,而且會降低讀的效率
(2)定期維護索引碎片
(3)在sql語句中不要使用強制索引關鍵字
十四.資料庫中適合的操作
(1)批量操作vs逐條操作
(2)禁止使用select * 這樣的查詢
(3)控制使用使用者自定義函式
(4)不要使用資料庫中的全文索引
十五.表的拆分
(1)表的水平拆分解決了表中資料量的問題
(2)表的垂直拆分解決了表的寬度問題
軟體開發應該注意的細節
1.系統流程梳理 以乙個很簡單的例子來說明流程梳理對軟體開發的意義,比如你要進行一次演講,但是這次演講是即興的,你不是專業的即興演講家,那麼在沒有準備情況下,你要對著台下的人進行演講,這個時候你走上台去,腦子裡的東西還沒有形成有條理的演講內容,講完後台下的人都不知道你在講什麼,可能你自己都不知道你剛...
軟體開發應該注意的細節
1.系統流程梳理 以乙個很簡單的例子來說明流程梳理對軟體開發的意義,比如你要進行一次演講,但是這次演講是即興的,你不是專業的即興演講家,那麼在沒有準備情況下,你要對著台下的人進行演講,這個時候你走上台去,腦子裡的東西還沒有形成有條理的演講內容,講完後台下的人都不知道你在講什麼,可能你自己都不知道你剛...
巨集的使用及細節注意
1.不帶引數的巨集 一般的使用 define 巨集名 巨集定義字串 其含義為定義乙個名為 巨集名 的巨集,並將該巨集與其名字後的第乙個空格後知道改行結束的所有字串等價起來。然後將這個字串替換隨後程式中任何位置出現的巨集名。2.帶引數的巨集 define 巨集名 引數1,引數2,引數n 巨集定義字串 ...