データベース テーブルは、テキスト ドキュメントへの編集変更を保存するために使用されます。
id
データベース テーブルには、{ 、timestamp
、user_id
、text
}の 4 つの列があります。
ユーザーがドキュメントを編集するたびに、新しい行がテーブルに追加されます。新しい行には、自動インクリメントされた ID と、データが保存された時刻に一致するタイムスタンプがあります。
特定の編集中にユーザーが行った編集変更を判別するために、ユーザーの編集に応じて挿入された行のが、以前に挿入された行のtext
と比較されます。text
どの行が以前に挿入された行であるかを判断するには、id
列または列のいずれかtimestamp
を使用できます。私が見る限り、どの方法にも長所と短所があります。
を使用して作成順序を決定するid
利点: システム クロックの設定が不適切なために発生する問題の影響を受けません。
id
短所:列に同一性以外の意味を規定するため、列の悪用のようid
です。管理者は、ID のセットが一意である限り値が何であるかは問題にならないため、何らかの理由 (データ移行中など) で ID のセットの値を変更する可能性があります。その後、行の作成順序を判別できなくなりました。
を使用して作成順序を決定するtimestamp
- 利点:
id
列は ID のみにtimestamp
使用され、本来あるべきように時間に使用されます。 - 欠点: この方法は、行がテーブルに挿入されるたびにシステム クロックが正しく設定されていることがわかっている場合にのみ信頼できます。システム クロックが挿入ごとに正しく設定されていることをどのように確信できますか? また、システム クロックが過去の正確には知られていない期間に誤って設定されていたことが判明した場合、テーブルの状態をどのように修正できますか?
ある方法を他の方法よりも優先して選択するための強力な議論、または私が検討している 2 つの方法よりも優れた別の方法の説明を求めています。