MySQLデータベースで一時的なデータベースの互換性を有効にする方法は?
時間的な上位互換性を有効にするlibrary
またはplug-in
はありますか?現在のレコードが変更されても、過去のレコードを保持したい。
From_dateフィールドとnull許容のto_dateフィールドを追加する
主キーを展開してfrom_dateを含めます
すべてをUTCに保つ
時間の重複を防ぐための一時的な拡張があるため、PostgreSQLの使用を検討してください。
これは、「THE」の一時的なdb guy(Snodgrass)からの本です。
http://www.cs.arizona.edu/~rts/tdbbook.pdf
また、セルコのスマーティーズブックの第4章をお試しください
正確にあなたが求めているのはMariaDB 10.3.xにあり、「システムバージョン対応テーブル」と呼ばれています
バージョン10.3.16の安定版リリースです。ただし、mysqldumpユーティリティはデータを正しくバックアップしない可能性があることに注意してください。
https://mariadb.com/kb/en/library/system-versioned-tables/
情報:
システムバージョン対応テーブルは、SQL:2011標準で最初に導入された機能です。システムバージョンのテーブルには、現時点で有効なデータだけでなく、すべての変更の履歴が保存されます。これにより、任意の時点のデータ分析、変更の監査、異なる時点のデータの比較が可能になります。一般的な使用例は次のとおりです。
- データをN年間保存するための法医学分析と法的要件。
- データ分析(遡及的、傾向など)、たとえば1年前のスタッフ情報を取得します。
- ポイントインタイムリカバリ-特定の時点でのテーブルの状態をリカバリします。
テンポラルデータベースは、時間データモデルや構造化クエリ言語のテンポラルバージョンなど、組み込みの時間アスペクトを持つデータベースです。
より具体的には、時間的側面には通常、有効時間とトランザクション時間が含まれます。これらの属性を組み合わせてバイテンポラルデータを形成します。
1。有効時間は、現実世界に関して事実が真である期間を示します。
2。トランザクション時間は、ファクトがデータベースに保存される期間です
3。バイテンポラルデータは、有効時間とトランザクション時間の両方を組み合わせます。
[〜#〜]更新[〜#〜]
最初に、MySQL5.1として以前に追加したその部分と、MySQLの上記のバージョンがBDB
をサポートしていない部分を削除します このリンク を参照してください。 BDB
はInnoDB
を実行しており、すべてを実行できます。 BDBはMySQLでサポートされなくなったため、InnoDBはBDBが行っていたすべてのことを実行できます。
テンポラルデータベースの詳細については、 This を参照してください。
MySQLを使用すると、CHECK CONSTRAINT
、DEFERRED CONSTRAINT
を使用できないこと、およびtriggers
にいくつかの制限があるため、困難になります。 MySQLでtemporal relational database architecture
をビルドします。
チェック制約
多くの場合、CHECK CONSTRAINTはCHECK([NOT] EXISTS(select_expression))という形式です。
MySQLはINNODBテーブルに外部キー制約を実装しますが、まだCHECK CONSTRAINTを実装していません。そうなるまで、そのような制約は他の手段によって強制されなければなりません。これは、時間有効なテーブルに厄介な結果をもたらします。一部の時間有効制約はトリガーで強制できますが、検討するほとんどの時間制約は強制できません。 MySQLがCHECK CONSTRAINTを実装するまでは、アプリケーションコードでそれらを強制する必要があります。それは重い罰則です。
遅延制約
MySQLも遅延制約をまだ実装していません。さらに、制約はCOMMIT時ではなく行ごとに適用されます。これは、いくつかの単純な制約であっても、多くの複雑な制約に対して問題を引き起こします。たとえば、外部キーを介してそれ自体を参照するMySQL行を削除するには、foreign_key_checks = 0を一時的に設定する必要があります。複雑な制約を満たすトランザクションは、データベースを一貫した状態のままにする必要があります。ただし、リレーショナルデータベースの理論には、データベースは、トランザクション内の各ステートメントの後で一貫した状態になっている必要があります。
トリガー
MySQL 5トリガーはトリガーテーブルにUPDATEステートメントを発行できず、エラーを発生させることはできません。これらの制限により、MySQLでトランザクションの有効性を実装することが困難になりますが、その困難は克服できます。