2013-05-10 4 views
0

У меня есть две таблицы. Device и Device_Config. таблица Устройство имеет следующие столбцы:Postgresql delete on cascade

device_id 
config_id 
bla 
bla2 
foo 
bar 

И Device_config имеет следующие столбцы

id 
foo 
bar 

Как вы можете предсказать, config_id на моем Device таблицы внешний ключ ссылается id столбец на Device_config So Я добавил это ограничение в таблицу 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_id' в таблице' device_config', а не наоборот –

+3

Please добавьте * real * DDLS. ИМХО большинство людей читают sql быстрее, чем ваш сокращенный псевдокод. – wildplasser

ответ

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;