次のテーブル設定で作成しているアプリに基本的なコメントシステムがあります。
CREATE TABLE `meet_comment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`meet_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`date_created` datetime NOT NULL,
`comment` mediumtext NOT NULL,
PRIMARY KEY (`id`),
KEY `meet_id` (`meet_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `meet_comment_ibfk_1` FOREIGN KEY (`meet_id`) REFERENCES `meet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `meet_comment_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
meet_id
は、ユーザーがコメントしているオブジェクトへの参照です。これはうまくいきますが、現時点では、ユーザーがコメントを編集した場合、comment
フィールドを更新するだけです。
コメントが編集された場合にコメント履歴を表示できるようにしたいのですが、これについて最善の方法は何ですか?コメントと参照を保持する別のテーブルが必要になると思いますmeet_comment.id
?たぶん:
CREATE TABLE `meet_comment` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`meet_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `meet_id` (`meet_id`),
KEY `user_id` (`user_id`),
CONSTRAINT `meet_comment_ibfk_1` FOREIGN KEY (`meet_id`) REFERENCES `meet` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `meet_comment_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
CREATE TABLE `meet_comment_content` (
`revision` int(3) NOT NULL,
`meet_comment_id` int(11) NOT NULL,
`date_created` datetime NOT NULL,
`comment` mediumtext NOT NULL,
UNIQUE KEY `revision_2` (`revision`,`meet_comment_id`),
KEY `revision` (`revision`),
KEY `meet_comment_id` (`meet_comment_id`),
CONSTRAINT `meet_comment_content` FOREIGN KEY (`meet_comment_id`) REFERENCES `meet_comment` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
もしそうなら、テーブルをクエリするための最良の方法は何でしょうか、私は必要なデータを取得するために結合を行うことができると思いますか?
データベースの設計中のいくつかのポインター-
comment
テーブルにはコメントのみが含まれ、ミートやユーザーに関する情報は含まれません。comment
にparent_comment_id
の追加の列を導入することで簡単に行うことができますテーブル。IMO次のテーブルがあるはずです-
user
- user_id
、およびその他のユーザー関連フィールドmeet
- meet_id
およびその他のミート関連フィールドcomment
- comment_id
、revision_id
、およびその他のコメント関連フィールドuser_meet_mapping
- user_id
、meet_id
など.meet_comment_mapping
- meet_id
、comment_id
など.このスキーマは、達成できる最適な正規化です。クエリに関する限り、さまざまなページ分割された結合クエリによってクエリを抽出できます。