sql >> データベース >  >> RDS >> Mysql

データベーステーブル内の行の作成順序を決定するためにidまたはtimestampを使用する必要がありますか? (システムクロックが正しく設定されていない可能性があります)

    順次idを使用する おそらく(?)主キーであるため、インデックスが作成され、アクセスが速くなるため、より簡単になります。 user_idがあるとすると 、最後の編集と前の編集をすばやく表明できます。

    timestampの使用 も適用可能ですが、エントリが長くなる可能性があり、インデックスが作成されているかどうか、さらには衝突の可能性があるかどうかはわかりません。システムクロックが変更される可能性があることを正しく指摘します...一方、シーケンシャルid できません。

    最新情報をお知らせします:

    正確な要件を確認するのは難しいため、特定のプロジェクトで20万以上の複雑なドキュメントと数百万の改訂が必要であったことの証拠としてこれを含めました。

    60人以上のフルタイムの研究者からなる内部チームのための私自身の経験(完全に監査可能なドキュメント/プロファイリングシステムの構築)から。最終的に両方のidを使用しました および他の多くのフィールド(timestampを含む) )監査の履歴と完全なバージョン管理を提供します。

    私たちが構築したシステムには、プロファイルごとに200を超えるフィールドがあるため、ドキュメントのバージョン管理は、変更されたテキスト/コンテンツのブロックをそれぞれに保存するよりもはるかに複雑でした。ただし、各プロファイルは、編集、承認、拒否、ロールバック、公開、さらにはPDFまたは他の形式の1つのドキュメントとしてエクスポートすることもできます。

    (多くの戦略/計画の後で)最終的に行ったのは、プロファイルの順次バージョンを保存することでしたが、それらは主にキー設定されていました idで フィールド

    タイムスタンプ

    タイムスタンプも2次チェックとしてキャプチャされ、タイムアラインメントを定期的にチェックして必要に応じて修正するcronスクリプトを使用して、システムクロックを(サーバーのクラスター間で)正確に保つようにしました。 Ntpd も使用しました クロックドリフトを防ぐため。

    その他のキャプチャデータ

    各編集でキャプチャされたその他のデータも含まれます(ただし、これらに限定されません):

    User_id
    User_group
    Action
    Approval_id
    

    内部要件(ドキュメントの自動生成された注釈を含む)を満たす他のテーブルもありました-一部のプロファイル編集はボット(NER/機械学習/AIを使用して構築された)からのデータを使用して行われたため、編集/更新前のチームが公開される可能性があります。

    すべてのユーザーアクションのアクションログも保持されるため、監査の際に、個々のユーザーのアクションを確認できます。そのようなアクションを実行する権限がない場合でも、ログに記録されます。 。

    移行に関しては、データの移動/ダンプ/転送でIDシーケンスを簡単に保持できるため、大きな問題とは見なされません。おそらく唯一の問題は、データセットをマージする必要があるかどうかです。その場合はいつでも移行スクリプトを作成できます。したがって、個人的な観点からは、不利な点はやや軽減されたと思います。

    データエクスプローラー(かなり洗練されている)のスタックオーバーフローテーブル構造を調べる価値があるかもしれません。ここでテーブル構造を見ることができます: https://data.stackexchange.com/stackoverflow/query / new 、メタに関する質問から来ています:SOはどのように保存しますか改訂?

    改訂システムとして、SOはうまく機能し、マークダウン/改訂機能はおそらく選択するのに良い例です。



    1. MySQLルートパスワードをリセットする方法

    2. 文字列列名SQLから列値を取得

    3. JAVAMySQL接続ClassNotFound例外

    4. SimpleSAMLPHPリダイレクトループ