MySQL 是一個(gè)廣泛使用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。盡管外鍵是關(guān)系型數(shù)據(jù)庫(kù)的基本概念之一,但在使用 MySQL 時(shí),我們更傾向于不使用外鍵。以下是為什么:
外鍵約束可能降低性能,增加了服務(wù)器的負(fù)載。這是因?yàn)樵诓迦耄禄騽h除行時(shí),外鍵會(huì)引起鎖定問(wèn)題,并增加了查詢的復(fù)雜性。
相反,我們可以使用索引來(lái)實(shí)現(xiàn)外鍵的功能。這可以通過(guò)添加一個(gè)索引,它與表格中的另一個(gè)列相關(guān)聯(lián)來(lái)完成。通過(guò)使用索引來(lái)代替外鍵,我們可以避免出現(xiàn)鎖定和復(fù)雜問(wèn)題,并且提高查詢性能。
如果我們希望 MySQL 在出現(xiàn)關(guān)系完整性問(wèn)題時(shí)能夠發(fā)出警告或禁止對(duì)表格或行進(jìn)行更改,我們可以使用觸發(fā)器。觸發(fā)器是一種自動(dòng)化操作,可以在特定的表格或行發(fā)生更改時(shí)自動(dòng)執(zhí)行。相對(duì)于外鍵,觸發(fā)器可有更高的性能且更加靈活。
最后,對(duì)于小型項(xiàng)目或簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)來(lái)說(shuō),外鍵并不是必須的。因此,如果您的項(xiàng)目不需要強(qiáng)關(guān)系完整性,您可以省略使用外鍵而不會(huì)破壞表格的結(jié)構(gòu)完整性。