問題タブ [database-versioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - ユーザーが公開したコンテンツのバージョン管理/履歴/改訂システムを作成するには?
Keeping page changes historyやHow to version control a record in a database (たとえば)に関する多くの SO の質問を読んだ後、私はその作業を行うための本当に洗練された解決策を見つけることができません。
さて、登録ユーザーがいくつかの記事を投稿し、他のユーザーがそれらの記事の改訂を送信し、一部のモデレーター ユーザーがそれらの改訂をチェックできるようにする、この単純な改訂システムに何が必要かをできるだけ明確に説明しましょう。
MySQL データベース
データベースには、次の簡略化されたフィールドを持つ article テーブルが含まれています。
リビジョン/履歴バージョンを実装するには、次の表があると思います。
との関係:ARTICLE 0,n <---> 1,1 REVISION
ワークフロー
ユーザーが を作成し
ARTICLE
、それがテーブルに挿入されARTICLE
ます (素晴らしい! )別のユーザーが
ARTICLE
this を更新すると、この更新はテーブルに記録されREVISION
、モデレーター ユーザーのキューに入れられます。(revision_check=0
)。モデレーター ユーザーが を検証する
REVISION(revision_check=1)
と、は値ARTICLE(content)
を取得しREVISION(revision_content)
ます。
私の質問
- このワークフローは良い方法だと思いますか? なぜなら、私は間違いを見ているからです: if there are several
REVISION
s for anARTICLE
:
- 最後に送信されたコンテンツと
REVISION
オリジナルのコンテンツのどちらを使用する必要がありARTICLE
ますか? REVISION
または、最後のリビジョンがチェックされていない間は他のリビジョンを送信できないため、リビジョンをブロックする必要があります。
ライトバージョニングを記録する方法はありますか? ところで、
REVISION
SQL、PHP、js の比較関数を使って、更新された内容だけをテーブルに挿入することはできますか? そして、それをどのように表示するのですか?REVISION
テーブルがとても重くなるのではないかと心配しているからです。おまけ:SOはどうですか?
アイデア、リンク、ソース、プラグイン(MySQL、PHP 5、および JS/jQuery) は大歓迎です。
oracle - Roundhouse を使用してまったく新しい Oracle データベース/スキーマを作成できますか?
私はほとんど SQL を使用していたので、Oracle に少し慣れていないため、Oracle の仕組みと使用するユーザー/接続文字列についての私の理解の一部が間違っているか、存在しない可能性があります。
roundhouse を使用して Oracle データベースを作成/管理しようとしています。今のところ、Windows 7 と VS 2010 を実行している開発マシンで作業しようとしています。テスト データベースを作成しようとしている単純なサンドボックス プロジェクトがあります。マシンに Oracle 11g 標準版をインストールしました。
最初の質問は、ラウンドハウスを使用して、まったく新しいデータベースを作成することさえできるでしょうか (Oracle db は、Oracle では「スキーマ」と呼ばれていることを教えてくれます)。私の理解では、SQLサーバーとは異なり、任意のデータベースを作成できるユーザーをMaster
持つデータベースはありません。sa
roundhouse サイトで Oracle の wiki ページを見つけましたが、既存の Oracle データベースの変更についてのみ説明されており、新しいデータベースの作成については説明されていません。必要なテーブル、ストアド プロシージャなどを作成する前に、ラウンドハウスを使用して Oracle で新しいデータベースが作成された例を見つけるのに苦労しています。
可能であれば、何をする/セットアップする必要がありますか? 構成ファイルはどのように設定すればよいですか? 与えられたのは私の現在の構成ファイルです。
c# - マイグレーター(FluentMigrator)の説明は?
誰かがマイグレーター (特に fluentmigrator) の概念を説明できますか?
以下は、この件に関して私が収集した (混乱している可能性がある) 事実です。
バージョニングによってデータベースの更新を最初に作成してから維持する方法ですか。
最初の移行 (またはデータベースの初期バージョン) には、必要なすべてのテーブル、リレーションシップ、およびプロパティが含まれます (流暢に実行するか、スクリプトで SQL のチャンクを使用して実行します)。
変更をデータベースにプッシュする場合は、新しいテーブルの追加やフィールドの変更など、新しい移行方法 (上と下) を作成します。
これらの移行のいずれかを展開するには、コマンド ラインを使用して、移行を含む dll、接続文字列、および必要なバージョンを指定します。
かなり複雑なデータ モデルのセットがある場合、そのすべての移行定義を作成するのはかなり難しく、時間がかかりませんか?
nHibernate/fluent を使用すると、モデルとマップ ファイル以外を定義する必要なく、データベースのテーブルを簡単に生成できることを私は知っています。この構成を Migrator/Versioning と互換性を持たせる方法はありますか?
nhibernate/fluent がデータベースの生成を担当している場合、必ずしもテーブルのすべての側面を定義する必要はありません。慣例またはマッピングファイルを介して行われます。マイグレータでは、このレベルの詳細を定義する必要がありますか?
git - コードのバージョン管理システムを使用してデータベース レコードの変更履歴を保存することの明らかな欠点
現在のデータがまだデータベースに存在している間に、データベースレコードへの変更/変更履歴を git/hg リポジトリとして保存することを検討しています。変更の履歴が必要な場合は、レポで調べる必要があります。
コレクションごとにフォルダーが存在する可能性があり、ファイル名は「_id」(主キー) を反映します。したがって、特定のファイルで関連情報を検索します。主キー フィールドが 1 つあると仮定します (つまり、複合フィールドはありません)。私が使用しているデータベースはmongodbなので、とにかくレコードはドキュメント形式です。JSONをファイルに保存するだけです。
私にとっての利点は次のとおりです。バージョン管理システムは、時間の経過とともに保存/差分/変更に完全に適しています。特定のバージョンと、base -> current からの変更のリストも照会できます。
短所:目新しさ以外に思いつきません。履歴が非常に求められている場合、IO アクセスが問題になる可能性があります (ただし、私の場合はそうではありません)。履歴データの取得が遅くても問題ありません。いずれにせよ、まれなイベントであると予想されます。
だから私の質問は:私が見落としている明らかな欠点はありますか?
ありがとう。
明確化:私がこのようにしたい理由は、履歴が成長し、無限の時間(理想的には)保持される可能性があると予想しているためです。変更点を維持することでこれを改善できますが、それは余分な労力であり、些細なことではありません。
考慮すべき追加のことは、mongodb の速度は、メモリ内にインデックスを持つことから得られるということです。実際の履歴と履歴の両方のインデックスを維持する必要がある場合は、そうでない場合よりも 2 倍から 3 倍多くの RAM が必要になります。今のところ、それはプレミアムです(常にそうであるとは限りません)が、それでも.
ravendb - Raven db のクエリ中にバージョン管理されたドキュメントを除外する
データ アクセス レイヤーでほとんどのレイヴン クエリを作成した後、プロジェクトの途中でバージョン管理バンドルを追加しました。バージョン管理のために、複製されたデータがたくさんあります。ドキュメントのタイプを照会するたびに、ドキュメントのバージョン管理と同じ回数複製された値を確認できます。Exclude("Revisions")を使用してすべてのクエリを書き直さずに、現在のデータを共通にクエリするときに、リビジョンされたドキュメントのクエリを停止する方法はありますか?リビジョンされたドキュメントに対してクエリを実行できる設定はありますか? = グローバルに設定できるFalse ? これを克服するために何か提案してください..
hibernate - Hibernate の自動スキーマ作成とデータベースのバージョン管理を組み合わせる
アプリケーションが初めてマシン上で実行されるたびに、Hibernate がすべてのテーブル スキーマを作成するアプリケーションがあります。これはうまく機能します。
ただし、Hibernate にデータベースをバージョン管理下に保つ何らかのメカニズムがあるかどうか疑問に思っていました。つまり、Hibernate は、別のバージョンのアプリケーションを実行し、Hibernate が古いスキーマとは異なるデータベース スキーマを見つけたときに、あるスキーマを別のスキーマに移行する方法を知っているのでしょうか。バージョンは存在しますか? Hibernate が既存のスキーマを読み取ることができ、スキーマをマッピングの説明と比較できることを考えると、これは可能なはずだと思います。ただし、Liquibase / Flyway などで変更スクリプトを作成するときのように、Hibernate に古いデータを移行するように指示する方法がわかりません。
Hibernate とバージョン管理では、監査とフィールド バージョン管理で多くのヒットが表示されるため、正しいことをグーグルで調べていない可能性がありますが、Liquibase / Flyway の種類のバージョン管理に関してもっと考えています。両方を一緒に考えたことはありませんでしたが、Hibernate は更新スクリプトを作成せず、データベースを直接操作するため、両方を一緒に機能させる方法がわかりません。
独自のスクリプトを作成する代わりに、Hibernate にスキーマを作成させるのはこれが初めてです。これは、 Hibernate Enversを利用して、スクリプトの手動作成を非常に面倒なものにするために行います。多分私は明らかな何かを見逃しています。この件についてご意見をお寄せいただきありがとうございます。
更新: 今日、Flyway の開発者と話をすることができました。彼は、良い解決策を知らないと言っていました。もしかして何もない?