2012-06-03 4 views
0

У меня есть три таблицы mysql. Таблицы уже созданы.Как определить ограничения внешнего ключа

Requests - request_id, request_message, user_id 
Responses - response_id, response_message, user_id 
users -  user_id, user_name 

Теперь я хочу, чтобы определить ограничения внешнего ключа на том, что, таким образом, что

1. If user_id is not present in Users table, and someone is inserting the data in Requests or Responses for that user_id -- then error 
2. If request_id is not present in Requests table, then if someone is inserting in responses table for that request_id -- then error 

3. If someone deletes an user_id, all associated requests and responses with that user_id should be deleted automatically. 
4. If someone deletes an request_id, all the associated responses with it, should be deleted automatically.  

Если я отсутствует какой-либо вещи, пожалуйста, дайте мне знать.

Как достичь этой функциональности?

Благодаря

Devesh

ответ

1

Вот полный SQL для создания таблиц:

CREATE TABLE IF NOT EXISTS `reponses` (
    `response_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `response_message` varchar(45) DEFAULT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`response_id`,`user_id`), 
    KEY `fk_reponses_users1` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ; 


CREATE TABLE IF NOT EXISTS `requests` (
    `request_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `request_message` varchar(45) DEFAULT NULL, 
    `user_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`request_id`,`user_id`), 
    KEY `fk_requests_users` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ; 


CREATE TABLE IF NOT EXISTS `users` (
    `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_name` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ; 


ALTER TABLE `reponses` 
    ADD CONSTRAINT `reponses_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE NO ACTION; 

ALTER TABLE `requests` 
    ADD CONSTRAINT `requests_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE ON UPDATE NO ACTION; 

Опция, которая позволяет удалять записи, связанные с пользователем является ON DELETE CASCADE. По умолчанию MySql устанавливает NO ACTION, который ссылается на RESTRICT и не позволяет удалить родительскую запись при наличии связанных объектов. Я думаю, что вы не упомянули о связи между ответами и запросами, но вы должны получить идею;).

Смежные вопросы