@blog.justoneplanet.info

日々勉強

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`);

■メリットとデメリット

メリット

  • 誤ったデータをテーブルに含めないようにできる

デメリット

  • データ移行時に整合性をチェックするため時間がかかる
  • テーブル設計が複雑になる(運用上の整合性の考慮)

■代替案

アプリケーション側での制御。

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment