Новый вопрос, так как мне удалось найти ответ.Внешний ключ MySql из той же таблицы (2 столбца относятся к одной клавише)
Упражнение требует от нас создания таблицы комментариев с уровнями ответов. есть сообщение ('id'), в котором есть комментарии ('comment_id'), и есть поле ответа комментариев ('reply_to'), которое должно указывать на существующий комментарий ('comment_id') или NULL, если это комментарий к самому сообщению. 'id' & 'comment_id' являются основным ключом 'user_id' является внешним ключом для другой таблицы Мне нужен второй внешний ключ, который является полем ответа ('reply_to') и при удалении комментария следующие комментарии также должны быть удалены.
что мне удалось установить внешний ключ в 'comment_id', но затем , если есть много сообщений с тем же номером комментария, что вызывает хаос. удаление сообщения # 1 комментарий # 1 приведет к сообщению #x comment # 9, который является ответом , чтобы прокомментировать # 5 (а не # 1), который будет удален.
Как определить ключ, чтобы исключить только правильное дерево комментариев ? (описание ниже дБ)
Благодаря
Пример: TBL
post_id-----comment_id-----reply_to
0 0 NULL (to post)
0 1 0
1 0 NULL (to post)
1 1 0
хотел действие:
Delete: 0 0 NULL (to post)
хотел результат:
post_id-----comment_id-----reply_to
1 0 NULL (to post)
1 1 0
==================================================================================================================== ===========================
Исправлено: необходимо добавить Индексация
упражнение хочет создать таблицу комментарии с уровнями ответа. есть сообщение ('id'), в котором есть комментарии ('comment_id'), и есть поле ответа комментариев ('reply_to'), которое должно указывать на существующий комментарий ('comment_id') или NULL, если это комментарий к самому сообщению. 'id' & 'comment_id' являются основным ключом 'user_id' является внешним ключом для другой таблицы Мне нужен второй внешний ключ, который является полем ответа ('reply_to') и при удалении комментария следующие комментарии также должны быть удалены.
Я пытаюсь добавить внешний ключ из той же таблицы, но я получаю эту ошибку:
#1005 - Can't create table db.#sql-148f_1027d34' (errno: 150)
Вот определение таблицы:
CREATE TABLE IF NOT EXISTS `PostComments` (
`id` int(11) NOT NULL,
`comment_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`content` varchar(512) COLLATE utf8_unicode_ci NOT NULL,
`reply_to` int(11) DEFAULT NULL,
`rating` int(11) NOT NULL DEFAULT '0',
`report_counter` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`,`comment_id`),
KEY `user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `PostComments`
ADD CONSTRAINT `PostComments_ibfk_1` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_2` FOREIGN KEY (`id`) REFERENCES `Posts` (`id`),
ADD CONSTRAINT `PostComments_ibfk_3` FOREIGN KEY (`user_id`) REFERENCES `Users` (`id`);
это то, что я я пытаюсь сделать:
ALTER TABLE `PostComments`
ADD CONSTRAINT `fk_ReplyToT`
FOREIGN KEY (`reply_to`)
REFERENCES `PostComments` (`comment_id`)
ON DELETE CASCADE
После прогулки в нескольких разных потоках я попробовал удаляя все записи в этой таблице, но все равно не имеет успеха. Также полях есть один и тот же тип (INT)
Что еще я могу пропустить? Спасибо заранее!