КАК: Когда запись в таблице A удаляется, все записи в таблице B, связанные с таблицей A, должны также удаляться? - PullRequest
2 голосов
/ 01 мая 2011

Принимая во внимание следующую схему:

table relations

Нам необходимо убедиться, что в случае удаления ассоциации все собаки, принадлежащие к этой ассоциации, также должны быть удалены.

Тем не менее, при этом имеет смысл сохранять существующее отношение между таблицами Ассоциации и Собаки, поскольку каждая ассоциация может иметь несколько собак, однако одна собака принадлежит только одной ассоциации. Поэтому я считаю, что конфигурация внешнего ключа правильная.

Полагаю, я должен где-нибудь применить Каскад, но я не вижу где. (

Пожалуйста, совет

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Выбрав «Dog» в качестве целевой таблицы, затем выбрав вкладку «Foreign Keys», вы должны иметь внешний ключ для выбранного поля «association_id».Как только вы обнаружите, что просто проверьте всплывающее значение, отображаемое в разделе «Параметры внешнего ключа» для «При удалении», должно отобразиться «CASCADE» (аналогично тому, что показано на скриншоте выше - если оно не показывает «CASCADE», просто выберитеэто).

2 голосов
/ 01 мая 2011

Чтобы добавить отношение между собакой и ассоциацией: в свойствах собаки добавьте новый внешний ключ для столбца 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;
...