@Alk90
php, mysql, jquery, css, html, api

Как создать внешний ключ?

Всем привет. У меня есть таблица comments в которой хранятся комментарии.
Так же есть таблицы posts, images, news. К этим всем сущностям могут быть написаны комментарии. Поэтому в таблице комментариев есть поля
type - тип сущности (posts, images, news)
id - ID сущности (id поста, id изображения, id новости)
text - текст комментария

Получается, что если мы добавили комментарий к изображению у которого ID == 577, то запись комментария в таблице comments будет содержать следующее:
type - images
id - 577
text - Какой-то текст комментария

Как правильно создать внешний ключ, чтобы при удалении изображения, удалились и комментарии к нему? Ведь приходится удалять не только по одному полю, а по двум, причем поле type абсолютно некчему привязать в таблице images
  • Вопрос задан
  • 237 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik
Добрый день.
Переименуйте "id" для связи с изображением в таблице комментариев в "image_id".
Так же добавьте для комментария "id PRIMARY KEY AUTO_INCREMENT"
ALTER TABLE `comments`
  ADD CONSTRAINT `fk_comments_images` FOREIGN KEY (`image_id`) REFERENCES `comments` (`id`) ON DELETE CASCADE;

Если уже существуют записи в таблицах комментариев и изображений, то, возможно, потребуется отключить, затем снова включить проверку внешнего ключа.
SET FOREIGN_KEY_CHECKS=0;
ALTER TABLE `comments`
  ADD CONSTRAINT `fk_comments_images` FOREIGN KEY (`image_id`) REFERENCES `comments` (`id`) ON DELETE CASCADE;
SET FOREIGN_KEY_CHECKS=1;
Ответ написан
@Chupaka
По-хорошему, одна сущность — одна таблица. В вашем случае можно посмотреть на триггеры: удаляется строка — чистим базу по каким угодно параметрам.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы