0

サイトを作成しようと学習していますが、データ モデルについて少し混乱しています。私のサイトは、人々をフォローしてコピー/共有できるという点でgithubに似ています(フォーク/プルリクエストに似ています)。これを格納するデータ モデルを作成するにはどうすればよいですか?

基本的に、私は記事を書き、その記事は私に関連付けられています。それからあなたが来て、私の記事を「フォーク」します。私はそれのコピーを作成しますか? それとも単なるリンクですか?次に、バージョンを編集した後、コンテンツをマージするリクエストを送信してください (データを上書きしたくありませんが、違いをキャプチャする方法でそれを行う方法がわかりません)。さらに悪いことに、編集時にバージョン管理を行いたいのですが、これにより、フォークされたデータのバージョン管理が複雑になります。

どこから始めればいいのかわかりません..答えは必要ありませんが、このフォーク/マージの相互作用をモデル化する方法についての提案は素晴らしいでしょう. redis と mysql のどちらを使用するかはまだ決めていませんが、どちらにもロジックを適用できれば、一般的な回答で問題ありません。

4

1 に答える 1

1

Article と ArticleRevision の 2 つのモデルを作成します。ユーザーには彼 (記事の所有者) に関連付けられた多くの記事があり、記事には多くのリビジョンがあります。

  • 記事 (id、user_id、current_revision_id、created_at) には多数の ArticleRevision があります
  • ArticleRevision (id、article_id、title、body、created_at、parent_revision_id) Article に所属、ArticleRevision に所属、ArticleRevision が多い

Article の現在のリビジョンは、current_revision_id分野によって決定されます。リビジョンには親リビジョンがあります - これは元のリビジョンです。

誰かが記事をフォークすると:

  • 記事を複製する
  • 記事の最新のリビジョンを複製し、必要に応じて、新しく作成されたリビジョンの親をリセットします (したがって、履歴は空になります)。
  • 新しく作成された記事の所有者と現在のリビジョンを設定します
于 2012-06-19T03:57:14.880 に答える