mysql 的主外來鍵使用場景 資料庫主外建適用場景

2021-10-18 12:44:52 字數 876 閱讀 3455

主鍵和索引是不可少的,合理使用可以優化資料檢索速度

焦點:資料庫設計是否需要外來鍵。這裡有兩個問題:

一、如何保證資料庫資料的完整性和一致性;

二、建立外來鍵對效能的影響。

正方觀點:

1,由資料庫自身保證資料一致性,完整性,更可靠,因為程式很難100%保證資料的完整性,而用外來鍵即使在資料庫伺服器當機或者出現其他問題的時候,也能夠最大限度的保證資料的一致性和完整性。

eg:資料庫和應用是一對多的關係,a應用會維護他那部分資料的完整性,系統一變大時,增加了b應用,a和b兩個應用也許是不同的開發團隊來做的。他們如何協調保證資料的完整性,而且一年以後如果又增加了c應用呢?

2,有主外來鍵的資料庫設計可以增加er圖的可讀性,這點在資料庫設計時非常重要。

3,外來鍵在一定程度上說明的業務邏輯,會使設計周到具體全面。

反方觀點:

1,可以用觸發器或應用程式保證資料的完整性

2,過分強調或者說使用主鍵/外來鍵會平添開發難度,導致表過多等問題

3,不用外來鍵時資料管理簡單,操作方便,效能高(匯入匯出等操作,在insert,   update,   delete   資料的時候更快)

eg:在海量的資料庫中想都不要去想外來鍵,試想,乙個程式每天要insert數百萬條記錄,當存在外來鍵約束的時候,每次要去掃瞄此記錄是否合格,一般還不

止乙個欄位有外來鍵,這樣掃瞄的數量是成級數的增長!我的乙個程式入庫在3個小時做完,如果加上外來鍵,需要28個小時!

結論:1,在大型系統中(效能要求不高,安全要求高),使用外來鍵;在大型系統中(效能要求高,安全自己控制),不用外來鍵;小系統隨便,最好用外來鍵。

2,用外來鍵要適當,不能過分追求

3,不用外來鍵而用程式控制資料一致性和完整性時,應該寫一層來保證,然後個個應用通過這個層來訪問資料庫。

mysql 日期的若干複雜使用場景

這個一般需要看精確度,有的計算相隔多少天,有的計算相隔多少秒 計算差了多少秒,給定兩個字段,而且都是字串型別,即varchar 解釋 先用 str to date函式將字串化為日期,再將日期化為 以秒為單位的日期,減,得到結果。感嘆 一天時間何其短暫,不過八萬六千四百秒而已。給定連個字串時間,計算相...

mysql中in和exists的使用場景

場景一 in 和 exists select from tablein where exists select bid from tableex where bname tablein.aname select from tablein where aname in select bname fro...

autorelease的使用場景

autorelease 就是把 release 延後到 autorelease pool drain 的時候。是 arc 進行引用計數管理機制中的一部分,挺巧妙的。其它還有 weak 指標等都是為了管理好記憶體設計的機制。主要是可以用在非 alloc copy new等函式的返回值上面。可以對應解決...