今後のWebアプリケーションでステージング/バージョン管理機能を実装したいと考えています。バージョン管理可能なデータをデータベースに格納する方法は?
私は、以下のタグについて言及していますが、実際にはこれらのいずれかに拘束されていません。これらは私が通常働いているものです。私は最適な技術を選ぶでしょう。
基本的には、ユーザーが変更を元に戻したり、下書き(支店)を保存したり、変更を公開(マージ/コミット)できるようにしたいと考えています。 gitのようにコードの場合とほとんど同じですが、データのこの動作が欲しいです。
私はこのような動作がアプリケーションコードに大きく依存していることに気づいていますが、まず適切なデータベーススキーマを見つける必要があります。
これは単純なテーブルではそれほど難しくありませんが、複数の関係を持つテーブルを使用しているときには、きれいなソリューションを見つけることが非常に苦労しています。私が考えることができるすべてのアプローチは、膨大な量の冗長データを生成するか、複雑すぎるように見える。
-- Create syntax for TABLE 'post'
CREATE TABLE `post` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
KEY `name` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Create syntax for TABLE 'post_tag'
CREATE TABLE `post_tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`post_id` int(11) DEFAULT NULL,
`tag_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Create syntax for TABLE 'tag'
CREATE TABLE `tag` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`label` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
右感じていないすべての変更で、全体のポストとpost_tagテーブルを複製:
は、すべてのポストは、複数のタグを持つことができ、以下のデータを、想像してみてください。特に私は5つの関連するテーブルについてもう一度説明します。
バイナリデータまたは大きな文字列を含むテーブルとOneToManyリレーションシップを持つと、これはさらに悪化します。すべての変更時に理由なく複製すると、大量の無駄なデータが発生します。
しかし、それは行く方法でしょうか?
あなたの答えをありがとう!残念ながらあなたは私を間違ってしまった。申し訳ありませんが私の質問が理解できない場合。タグは、ManyToManyリレーションを持つスキーマを説明するための単なる例でした。私は実際にこれらの関係に変更を保存するための良い方法を求めたいと思っていました。例えば、ユーザが投稿を編集し、タグを追加または削除すると、管理者は変更をレビュー/元に戻すことができる。ライブ/ドラフトで区別するだけでなく、すべての「保存」アクションでスナップショットを作成することをお勧めします。 – sboesch
Stackoverflow.comで使用されているスキーマを見ることができます。編集履歴を見て変更をロールバックする方法があることに注意してください。それを見てみましょう。 –
いいですね。 Stackexchangeはarchive.orgでデータダンプを提供しています。私はこれらを見ていきます。 – sboesch