0

3 つの 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.    

何か不足している場合はお知らせください。

この機能を実現するにはどうすればよいですか?

ありがとう

デベシュ

4

1 に答える 1

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、親レコードの削除を許可しないように設定します。応答と要求の関係について言及していないと思いますが、アイデアを得る必要があります;)。

于 2012-06-03T17:32:04.887 に答える