2017-05-04 145 views
0

想象一下存儲書名和作者的數據庫。當我刪除書名時,我也想要刪除作者 - 但前提是他們沒有與其關聯的其他書名。如果是一對一關係,MySQL級聯刪除

有沒有辦法做到這一點?

或者,也許你可以推薦我如何以不同的方式構建我的表格來解決這個問題。這是我負責數據建模的應用程序的簡化示例;也許通過提出上述問題,我已經清楚地組織了我的數據。

+0

這是哪一個父表?你將不得不在代碼中編寫這個邏輯。數據庫可能不提供級聯刪除的定製邏輯? –

+1

這不是一對一的關係,它是一對多的關係,因爲作者可以有很多書。你不能用級聯做到這一點,你可以用觸發器來做到這一點。 – Barmar

+0

雖然你是絕對正確的Barmar,但是我使用一對一的方式來標記場景(描述一對一爲「如果我正在刪除的書是作者的最後一個關係)」理論上可以觸發級聯掛鉤。 Uueerdo向我介紹了AFTER DELETE觸發器的概念,這聽起來像是我的場景的最佳解決方案。 –

回答

0

這是那些「雞蛋和雞蛋」數據建模場景之一,例如需要員工的部門和部門經理是部門的員工。通常情況下,你會認爲作者是「父母」,因爲它可以有很多書,必須編寫書;但沒有他們撰寫的書,他們不是作者。

所以它不是一個真正的糟糕的結構,而是一個複雜的關係,你代表。 CASCADE不適合你;但是您可以在「books」表上使用AFTER DELETE觸發器來檢查已刪除書籍的作者是否還有剩餘的書籍,如果不存在,就將其刪除。