关于mysql中外键关联的一些个人理解
????? 在我看來(lái)hibernate最麻煩的一件事就是配置外鍵關(guān)聯(lián),稍微不慎就會(huì)出現(xiàn)配置錯(cuò)誤的情況,現(xiàn)在的項(xiàng)目全部都是在使用mybaits,而mybaits使用就簡(jiǎn)單的多,起碼雖然說(shuō)是要自己寫(xiě)mysql語(yǔ)句,但是起碼這種做法在現(xiàn)階段的項(xiàng)目開(kāi)發(fā)中還是非常的流行,以前經(jīng)常聽(tīng)到眼言論說(shuō)用hibernate開(kāi)發(fā)會(huì)比mybaits要來(lái)得快,其實(shí)那應(yīng)該 是對(duì)于高手而言,但是絕大部分如我這群菜逼而言,老老實(shí)實(shí)的寫(xiě)sql語(yǔ)句會(huì)更好一點(diǎn),廢話(huà)不多說(shuō),今天主要是談?wù)勍怄I關(guān)聯(lián)對(duì)在項(xiàng)目開(kāi)發(fā)中的影響。
????? 表的關(guān)聯(lián),在某種程度上來(lái)說(shuō)只是一種邏輯概念,比如在我們開(kāi)始項(xiàng)目之初,是需要進(jìn)行表設(shè)計(jì),在用diagram? designe這類(lèi)工具r設(shè)計(jì)表的時(shí)候,難免不會(huì)有各重業(yè)務(wù)上的邏輯關(guān)聯(lián)的,這個(gè)時(shí)候如果你不使用外鍵管理,是很容易造成自身的邏輯混亂的,如果有那么一根根線(xiàn)連著,我們就能追根溯本,搞清整個(gè)項(xiàng)目的流程結(jié)構(gòu)。
???? 但是在物理結(jié)構(gòu)的表上面,我們沒(méi)必要進(jìn)行物理上的硬綁定,而我們期望的關(guān)聯(lián),其實(shí)只是數(shù)據(jù)上存在的聯(lián)系,而這種聯(lián)系更多的是存在我們腦海里,而非明面上,所以在進(jìn)行業(yè)務(wù)代碼實(shí)現(xiàn)的時(shí)候,我們編寫(xiě)程序的時(shí)候,只需要在程序中實(shí)現(xiàn)邏輯關(guān)連 的存取即可,但是如果我們非得加上什么外鍵關(guān)聯(lián)這層關(guān)系,只會(huì)帶來(lái)更多的資源消耗來(lái)進(jìn)行所謂的一致性檢驗(yàn),數(shù)據(jù)完整性檢驗(yàn),其實(shí)有些時(shí)候我們并不需要這層檢驗(yàn)和約束。
???? 我抽空問(wèn)了幾個(gè)其他公司的朋友,在mysql的時(shí)候,很多地方都直接把外鍵跟直接刪除,當(dāng)然這些都是互聯(lián)網(wǎng)公司,因?yàn)橄鄬?duì)于業(yè)務(wù)邏輯和速度,數(shù)據(jù)的完整性顯得并不那么重要,各種的鎖表估計(jì)也是追求性能的我們所不能接受的,若是遇到各種高并發(fā)和大流量的情況,外鍵造成的死鎖和事務(wù)回滾那直接只會(huì)讓程序猿罵娘。
??? 當(dāng)然在比如說(shuō)銀行或者是各種erp系統(tǒng)里面,數(shù)據(jù)完整性比企業(yè)的命還重要的時(shí)候,通過(guò)程序去控制各種業(yè)務(wù)邏輯顯得并不那么可靠,因?yàn)槌绦蚩偸悄敲慈菀坠テ?#xff0c;而數(shù)據(jù)庫(kù)稍微要更難一點(diǎn)點(diǎn),而且在銀行這種企業(yè)里面,數(shù)據(jù)是絕不能夠輕易刪除,而非向我們這樣,如果哪些數(shù)據(jù)不盡人意,直接物理層面的給刪除掉。
?? 總之,外鍵的優(yōu)點(diǎn)就是保證數(shù)據(jù)的完整性,缺點(diǎn)太多,不再累述。
????
?
轉(zhuǎn)載于:https://www.cnblogs.com/xgspring/p/4936897.html
總結(jié)
以上是生活随笔為你收集整理的关于mysql中外键关联的一些个人理解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自动计算高度的方法 iOS, heigh
- 下一篇: 银行家算法:解决多线程死锁问题