資料庫設計的一些問題

2021-09-16 21:38:20 字數 1247 閱讀 4262

原則:

如果列中要儲存的資料長度差不多一致的,則因該考慮用char;否則因該考慮用varchar。

如果列中的最大資料長度小於50byte,則一般也考慮用char。(當然如果這個列很少用,則基於節省空間和減少i/o的考慮,還是可以選擇varchar)

一般不宜定義大於50byte的char型別列。

原則:decimal用於儲存精確資料,而float只能用於儲存非精確資料。故而精確資料只能選擇用decimal型別。

由於float的儲存空間開銷一般比decimal小(精確到7位小數只需4個位元組,二精確到15位小數只需8個位元組)故而非精確資料有限選擇float型別。

使用int來儲存時間欄位的優缺點

優點:字段長度比datetime小。

缺點:使用不方便,要進行函式轉換。

限制:只能儲存大2023年-1-19 11:14:07即2^32為21474483648

需要儲存時間粒度

年月日小時分秒周

區分業務主鍵和資料庫主鍵

業務主鍵用於標識業務資料,進行表與表之間的關聯;

資料庫主鍵為了優化資料儲存(innodb會生成6個位元組的隱含主鍵)

跟資料庫的型別,考慮主鍵是否要順序增長

有些資料庫是按主鍵的順序邏輯儲存的

主鍵的字段型別所佔空間要盡可能的小

對於使用聚集索引方式儲存的表,每個索引後都會附加主鍵資訊。

降低資料匯入效率。

增加維護成本。

降低資料匯入效率。

可能會出現意想不到的資料異常。

使業務邏輯變的複雜。

無法準確的知道的預留欄位的型別。

無法準確的知道預留欄位中所儲存的內容。

後期維護預留欄位所要的成本,同增加乙個欄位所需要的成本是相同的。

嚴禁使用預留字段。

反方式化是針對正規化化而言的,所謂的反正規化化就是為了效能和讀取效率的考慮而適當的對第三正規化的要求進行違反,而允許存在少量的資料冗餘,換句話來說反正規化化就是使用空間來換取時間。

為什麼反正規化化:

減少表的管理數量

增加資料的讀取效率

反正規化化一定要適度

維護資料字典

維護索引

維護表結構

在適當的時候對錶進行水平拆分或垂直拆分

參考:

資料庫的一些問題

什麼是事務?事務的acid特性 事務的併發控制可能產生哪些問題 為了解決併發控制,定義了4種事務隔離級別 mysql innodb預設實現可重複讀級別 如何解決高併發場景下的插入重複 什麼是樂觀鎖,什麼是悲觀鎖 innodb vs myisam常見的區別 為什麼需要索引?查詢結構進化史 什麼是b t...

有關「鏈結資料庫」的一些問題

今天定義了乙個 鏈結資料庫 它主要用來在本地資料庫上建立一條對於遠端資料庫的 鏈結 使用時就像操作本地資料表 只能操作表和視表 一樣,給程式設計工作帶來了極大的便利和靈活。在使用時遇到一些問題,特記錄下來 1 可以利用系統儲存過程或企業管理器來建立,應該都比較簡單,但我在做的時候卻搞了半天也不成功,...

關於資料庫連線的一些問題

問題2 the server time zone value is unrecognized or represents more than one time zone 問題分析 mysql在識別時區時出現錯誤,也就是說訪問的url中沒有指定時區 connectionproperties useun...