通過其考慮以下方案:如何:當表A上的記錄被刪除時,表B上與表A關聯的所有記錄也應該刪除?
我們需要確保的是,如果一個協會被刪除,所有屬於該協會的狗,也應該刪除。
但是,在做這件事時,保持Association和Dog表之間實際存在的關係是有意義的,因爲每個關聯可以有多個Dog,但是一個Dog只屬於一個關聯。所以我相信外鍵配置是正確的。
我相信我應該在某處應用Cascade,但我沒有看到在哪裏。 :(
請指點
通過其考慮以下方案:如何:當表A上的記錄被刪除時,表B上與表A關聯的所有記錄也應該刪除?
我們需要確保的是,如果一個協會被刪除,所有屬於該協會的狗,也應該刪除。
但是,在做這件事時,保持Association和Dog表之間實際存在的關係是有意義的,因爲每個關聯可以有多個Dog,但是一個Dog只屬於一個關聯。所以我相信外鍵配置是正確的。
我相信我應該在某處應用Cascade,但我沒有看到在哪裏。 :(
請指點
選擇「狗」爲目標表,然後選擇「外鍵」選項卡,你應該有一個「association_id」字段的外鍵有選擇,一旦你發現剛檢查「外鍵選項」部分顯示的'On Delete'中的彈出窗口值,它應該顯示'CASCADE'(類似於你上面顯示的屏幕截圖 - 如果沒有顯示'CASCADE',只需選擇它)
要添加狗和關聯之間的關係:在狗屬性中,爲association_id添加一個新的外鍵,該關聯列指association.id。選擇開啓刪除CASCADE
。
您也可以在查詢窗口中執行這些步驟(我個人僅在需要打印數據庫結構時才使用圖形工具)。
ALTER TABLE Dog ADD CONSTRAINT `FK_byAssociationIdDog`
FOREIGN KEY(association_id)
REFERENCES Association(id) ON UPDATE CASCADE ON DELETE CASCADE;
事實上,如果用戶得到更新,我需要更新關聯記錄。 (我認爲這是因爲他們與他們的鑰匙相關,而且這些鑰匙永遠不會改變,我不需要這些?)但我錯了? – MEM 2011-05-01 15:24:50
我不認爲在dog.association_id上需要一個唯一索引,因爲不需要一對一的關係,因爲@MEM指出一個關聯可以有多個狗,而一個狗被定義爲唯一的I想象基於id主鍵。如果你設置了UNIQUE索引,那麼只有一隻狗可以屬於一個關聯,這是我不瞭解的需求行爲。 – 2011-05-01 15:27:35
當你說我需要一個唯一索引時,你是否以某種方式引用了一個身份關係?因爲我們不能沒有一個協會的狗?再次感謝。 – MEM 2011-05-01 15:27:42
哦...... 1)雖然如此,如果我這樣做,當我刪除一隻狗的時候,關聯也會被刪除!但那不是那種情況,嗯? 2)通過查看這個屏幕截圖,我打算如果一個關聯被刪除,用戶也應該被刪除。我是否用上述方法完成了這項工作? – MEM 2011-05-01 15:18:30
由於您在「關聯」和「狗」之間擁有一對多的關係,否則該關聯不會保留。您在狗上提供的外鍵與關聯有關,所以當刪除「關聯」時,級聯刪除將出現在「dog」表上,其中任何行都包含與被刪除的關聯的ID相匹配的「association_id」 」。我希望這有助於清除它。刪除「狗」行不會導致「關聯」被刪除。 – 2011-05-01 15:20:23