CONSTRAINT句
以下のようなSQLを実行すると、commentテーブルのカラムtask_idのレコードには、taskテーブルのカラムidに存在するものしか存在できない。この参照整合性制約機能は多用すると少々問題が起こることもある。
CREATE TABLE IF NOT EXISTS `comment` (
`id` int(11) NOT NULL auto_increment,
`task_id` int(11) default NULL,
`description` text,
`created_at` datetime default NULL,
PRIMARY KEY (`id`),
KEY `comment_FI_1` (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `task` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) default NULL,
`description` text,
`status_id` int(11) default NULL,
`created_at` datetime default NULL,
`updated_at` datetime default NULL,
PRIMARY KEY (`id`),
KEY `task_FI_1` (`status_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `comment`
ADD CONSTRAINT `comment_FK_1` FOREIGN KEY (`task_id`) REFERENCES `task` (`id`);
■メリットとデメリット
メリット
- 誤ったデータをテーブルに含めないようにできる
デメリット
- データ移行時に整合性をチェックするため時間がかかる
- テーブル設計が複雑になる(運用上の整合性の考慮)
■代替案
アプリケーション側での制御。
TrackBack URL :
Comments (0)
コメントはまだありません»
コメントはまだありません。
この投稿へのコメントの RSS フィード。TrackBack URL
コメントする