私は、人々が記事を作成/編集できる基本的な CRUD Web アプリを持っています。すべての編集のリビジョン履歴を保持する機能を追加したいと考えています。現在、次のような Articles テーブルがあります。
Article(id, title, content, author_id, category_id, format)
リビジョン履歴のサポートを追加するために現在のスキーマを変更するための 2 つのオプションを検討しました。基本的な考え方は、記事のすべての編集がリビジョン テーブルにレコードとして保存されるというものです。したがって、Articles and Revisions は 1 対多の関係です。
1 番目のオプション (正規化): 記事のメタデータ用に 1 つのテーブル、リビジョン用に 1 つのテーブル。重複データは保存されません。
Article(id, title, category_id)
Revision(id, content, author_id, format)
2 番目のオプション (非正規化): 2 つのテーブルはオプション 1 に似ていますが、列が重複しています。
Article(id, title, content, author_id, category_id, format)
Revision(id, article_id, content, author_id, format)
2番目のオプションを使用することを考えています。これにより、コーディングがはるかに簡単になります(複雑さが減り、コードの行が少なくなります)。「アカデミック」でも「純粋」でもないことは承知していますが、私の個人的な感覚では、追加の結合を行う必要があると、コードのメンテナンスが損なわれるということです。また、多くの結合を行う必要がないため、パフォーマンスが向上するはずです。
これは、このタスクを実行するための適切な方法ですか? おそらく、私が見落としている予期しない、または長期的な結果はありますか?