問題:不使用外鍵數(shù)據(jù)完整性到底如何保證,或者說程序?qū)用嫒绾伪WC數(shù)據(jù)完整性?已知的方法:一.使用數(shù)據(jù)庫悲觀鎖,對相關(guān)數(shù)據(jù)進(jìn)行鎖定,如:select...forupdate形式缺點(diǎn):操作不當(dāng),可能造成死鎖二.使用分布式鎖,如:redis缺點(diǎn):主要在于redis鎖的不可靠(如:需要設(shè)置過期時間,防止死鎖.但過期時間太短,可能造成鎖失效.主從環(huán)境可能造成多個請求同時獲取到同一把鎖)實(shí)際情況中主要是這種情況想不通模擬環(huán)境:存在表:角色表:id為整型主鍵,且自增菜單表:id為整型主鍵,且自增角色菜單表:id為整型主鍵,role_id為與角色表id關(guān)聯(lián)的建(不建立外鍵關(guān)系),menu_id為與菜單表id關(guān)聯(lián)的建(不建立外鍵關(guān)系)當(dāng)向角色菜單表插入數(shù)據(jù)時,如何確保role_id,menu_id在對應(yīng)的表都是存在的.當(dāng)然,我知道,可以在插入之前使用role_id,menu_id在對應(yīng)的表查一下,確認(rèn)是否存在.但我看了很多系統(tǒng)都沒有做這方面的檢查.想不通的地方是這種情況下,根本不需要考慮數(shù)據(jù)完整性問題嗎?(或者說即使存在數(shù)據(jù)不完整的情況,也可以不在意)?問題點(diǎn):因?yàn)閕d是自增,如果,被惡意用戶,往角色菜單表對特定角色插入了幾個未來的menu_id,那么就有可能,造成當(dāng)那幾個未來的menu_id被創(chuàng)建出來之后,那個特定角色就自動獲取到了該菜單的權(quán)限,而管理員可能根本不知道.不知道我這種表述你們是否明白?
有沒有童鞋遇到過同樣的問題:不使用外鍵數(shù)據(jù)完整性到底如何保證十分感謝
慕妹3242003
2019-08-05 23:01:44