2013-05-10 180 views
0

我有两个表。 DeviceDevice_Config。 器表有以下栏目:Postgresql级联删除

device_id 
config_id 
bla 
bla2 
foo 
bar 

而且Device_config以下几列

id 
foo 
bar 

正如你可以预测,config_idDevice表的外键上Device_config 所以引用id列我在我的Device表中添加了此限制。

ALTER TABLE device 
ADD CONSTRAINT device_config_id_fk FOREIGN KEY (config_id) 
REFERENCES device_config (id) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE CASCADE; 

不过这样一来,当Device_config行被删除,在Device表中对应的行被删除。不过,我想的是相反的。当设备被删除时,我想要删除device_config中的相应条目。我怎样才能做到这一点?

+3

那么几个不同的设备共享相同的配置?我可能不了解你的业务案例,但我会期望外键将*从*'device_config' *指向*'device',即'device_config'表中的'device_id',而不是其他方式 – 2013-05-10 13:43:40

+3

请添加* real * DDLS。恕我直言,大多数人阅读SQL比你的速记伪码更快。 – wildplasser 2013-05-10 14:57:04

回答

3

然后改变逻辑。 设备表不会有* config_id *和device_config将* device_id *。 关系是一个设备可能有很多device_configs。

然后

ALTER TABLE device_config 
ADD CONSTRAINT device_config_fk FOREIGN KEY (device_id) 
REFERENCES config (device_id) MATCH SIMPLE 
ON UPDATE NO ACTION ON DELETE CASCADE;