2012-07-23 69 views
1

我想知道這種事情是否會起作用:MySQL雙向外鍵?

比方說,我有兩個表:公司和地址。每家公司只能有一個地址。簡化的模式將如下所示。

COMPANIES 
id 
address_id 
name 
(...) 

ADDRESSES 
id 
first_name 
street 
(...) 

現在,我想在COMPANIES.address_id添加外鍵 - > ADDRESSES.id ON DELETE SET NULL ON UPDATE CASCADE。 但是我也希望地址在公司被刪除時被刪除。因此,圍繞它的另一種方式是ADDRESSES.id - > COMPANIES.address_id ON DELETE CASCADE。這是安全可行的嗎?

+2

是否確定要刪除該公司?如果刪除了該公司的地址?如果你刪除一個並添加一個新的,會怎樣?我會同意相反的情況 - 如果刪除公司,請刪除地址。 – Joe 2012-07-23 12:00:40

+0

如果每個公司可以有一個地址,爲什麼不只有一個表 – Mark 2012-07-23 12:03:17

+0

@Joe據我所知,如果地址在這種情況下被刪除,公司將不會被刪除。只有address_id將爲NULL。公司被刪除時,我想要刪除地址。 – 2012-07-23 12:03:44

回答

2

也許,而不是外鍵,使用觸發器可能是解決您的問題。

create trigger addr_delete 
after delete on companies for each row 
begin 
    delete from addresses where id=old.address_id 
end