問題タブ [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.

0 投票する
0 に答える
492 参照

c# - Oracle / SqlServer および SqlLite でデータベースの移行を行うためのソリューション

TFS内でデータベースの移行とバージョン管理を実行でき、展開/ビルド中にこれを自動的に展開できるツール(できればオープンソース)を探しています。

バックグラウンド

頻繁に更新されるアプリケーションを開発しました。データベースの変更がある場合もあれば、ない場合もあります。データベースは Oracle 11g で実行されており、テストを実行するための Sqlite データベースも用意されています。NHibernate を Fluent-NHibernate と組み合わせて ORM (マッピング用の Fluent-NHibernate) として使用します。

現在の状況

この時点で、データベースの変更は手動で行われます。データベース作成のための流暢なマッピングを変更し、SQL スクリプトを作成して、必要なものを変更 / 削除 / 作成します。Test / Acceptence / Production に移動するには、別の構成に対してビルドし、コンテンツを特定のサーバーにコピーして、データベース上で特定の SQL スクリプトを実行します。

欠点

NHibernate の schemaupdate は破壊的な更新を許可しないため、NHibernate ソリューションを探している場合は手動で行う必要があります。

好ましい状況

上記は実行可能な解決策ですが、 Expand/Contractを使用して新しいバージョンをデプロイする場合に、必要に応じてアップ/ロールバックできるように、これらの変更をバージョン管理する必要があります。これは、新しいバージョンをデータベースにデプロイするときに自動的に行われることが望ましいです。

質問

  1. スキーマの生成に Expand と Contract を使用する移行ツールはありますか?
  2. Oracle 11g、SqLite、SqlServer で動作しますか?
  3. NHibernate / Fluent-NHibernate を使い続ける可能性
  4. 特定のビルドを自動的に展開するための良い方法 (必須ではありません。これを行うのに十分なツールがありますが、すべてを実行できるものがあるとよいでしょう)

調査済み

  • ラウンドハウスE
    • ロールバックなし。
    • マッピングで動作させることができません。
  • FluentMigrator
    • 独自の Fluent インターフェイスを使用する NHibernate マッピングと組み合わせることはできません。
  • Red-Gate Deployment Suite for Oracle
    • ツールを当社の環境に簡単に統合することはできません。

これが明確であることを願っています。そうでない場合は、お気軽にコメントしてください

0 投票する
2 に答える
5045 参照

mysql - 基本的なmysqlのバージョン管理?

下の写真のようなショッピング カートがあります。1 つの致命的な欠陥を除いて、セットアップは正常に機能します。注文すると、注文は製品にリンクされているため、製品を購入した後に製品を更新した場合、購入したときの製品の外観(価格を含む)を希望することを示す方法はありません. これは、バージョン管理が必要であることを意味します。

現在のスキーマ

現在の私の計画は、新しい製品またはバリエーションが作成されるか、既存の製品が編集されたときに、データベースに製品またはバリエーションの複製を作成することです。購入時には、注文を製品ではなくバージョンにリンクします。

これはかなり単純に思えますが、バージョン管理の必要がないのはカテゴリだけであることがわかります (どのカテゴリにあったかは誰も気にしないため)。したがって、バージョンを設定する必要があります。

  • 製品
  • バリアント
  • 各バージョンの属性のキー -> 値のペア
  • 画像

私の現在の考えは、

注: 製品が作成されると、デフォルトのバリアントも作成されます。これは削除できません。

  • 商品を作るとき
    • 製品を製品テーブルに挿入します。
    • デフォルトのバリアントを作成する
    • 製品を products_versions テーブルに複製します
      • 現在の id 列を product_id 列に置き換えます
      • ID列を追加
    • バリアントを variants_versions テーブルに複製します
      • 現在の id 列を variant_id 列に置き換えます
      • ID列を追加
      • product_id 列を product_version_id 列に置き換えます

  • 商品編集時
    • 製品を製品テーブルに更新します。
    • 製品を products_versions テーブルに複製します
      • 現在の id 列を product_id 列に置き換えます
      • ID列を追加
    • すべての製品バリエーションを variants_versions テーブルに複製します
      • 現在の id 列を variant_id 列に置き換えます
      • ID列を追加
      • product_id 列を product_version_id 列に置き換えます
    • すべての variant_image_links を variant_Image_link_version テーブルに複製します
      • 現在の variant_id 列を variant_version_id 列に置き換えます

  • バリアントが追加されたとき
    • バリアントをバリアント テーブルに追加します。
    • 製品を products_versions テーブルに複製します
      • 現在の id 列を product_id 列に置き換えます
      • ID列を追加
    • すべての製品バリエーションを variants_versions テーブルに複製します
      • 現在の id 列を variant_id 列に置き換えます
      • ID列を追加
      • product_id 列を product_version_id 列に置き換えます

  • バリアントの編集時
    • バリアント テーブルのバリアントを更新します。
    • 製品を products_versions テーブルに複製します
      • 現在の id 列を product_id 列に置き換えます
      • ID列を追加
    • すべての製品バリエーションを variants_versions テーブルに複製します
      • 現在の id 列を variant_id 列に置き換えます
      • ID列を追加
      • product_id 列を product_version_id 列に置き換えます
    • すべての variant_image_links を variant_Image_link_version テーブルに複製します
      • 現在の variant_id 列を variant_version_id 列に置き換えます

したがって、最終的な構造はフルサイズのように見えます

これはすべて素晴らしいように思えますが、大量の重複データのように見えることを除けば、たとえば、製品を更新すると、挿入されてから更新されていないにもかかわらず、バリアントが複製されます。また、これは大変な作業のようです。

これを行うより良い方法はありますか?

0 投票する
2 に答える
1047 参照

mysql - mysql行のバージョン番号を取得していますか?

とを使用して、すべてが内部でバージョン管理されているデータベースがありstart_dateますend_date

私がやりたいことは、行のバージョン番号を動的に取得することです。

そのため、start_date で並べ替えられた特定の item_id を持つすべての行を取得し、start_dateそれend_dateを 1 つの行に分離します。私が欲しいのは、その行がどこにあるかを見つけることです。

例えばデータ

使用する場合select id from items where item_id = 2 and start_date = 05-31-2012

返さ5れるので、バージョンに必要なものは2

使用する場合select id from items where item_id = 1 and start_date = 03-31-2012

返さ4れるので、バージョンに必要なものは3

これを行うために考えられる唯一の方法は、item_id が何であれ、すべての行を選択し、start_date をチェックする各項目をループして、version_number を 1 増やしたい場合です。

mysqlだけでそれを行う方法はありますか?

0 投票する
2 に答える
14077 参照

database - データをインプレースで削除または更新しない汎用データベース

私は、Rich Hickey が提唱し、 Datomicで実装されたデータ管理へのアプローチに非常に感銘を受けました。このアプローチでは、データはインプレースで変更されることはなく、すべてのバージョンが常に保持され、クエリ可能であり、時間が最初のものです。クラスのコンセプト。

もちろん、Git やその他のソース管理システムなど、その説明に一致する特殊なデータベースがあります。問題は、たとえば e コマース Web アプリケーションで効果的に使用できる、リレーショナル、グラフ、階層、ドキュメント、またはその他のフレーバーの (多かれ少なかれ) 汎用 DBMS があるかどうかです。それとも、Datomic が唯一の選択肢でしょうか?

0 投票する
1 に答える
179 参照

zend-framework - Zend_Db_Adapter::exec() からエラー メッセージを取得する

データベースのバージョン管理を容易にするスクリプトに取り組んでいます。これを行うために、セミコロンで区切られたスキーマを更新するために必要な SQL クエリを含む多数のファイル (それぞれに少なくとも 1 つのステートメントが含まれ、いくつかのファイルには 100 以上のステートメントが含まれます) があります。ステートメントの 1 つが失敗し、これらを修正する際に問題が発生することを除けば、90% の確率で問題なく動作します。これが発生した場合、データベースを削除し、失敗したファイルに各 SQL ステートメントを手動でコピーして貼り付けてテストする必要があります。一部のクエリでは例外が発生しますが、一部のクエリでは関数は 1 を返します。

次のコードを使用していますが、問題のあるステートメントを見つける方法がわかりません。

0 投票する
1 に答える
191 参照

mysql - MySQL 決定論的移行スクリプト

現在、データベースをバージョン管理下に置く方法を探しています。これを実現するために、1 回だけ実行できる (対応する元に戻す) 決定論的な手順が必要でした。

小さなバグだらけの最初のスクリプトの作成に問題があります。

3 つの主要部分は次のとおりです。

クエリを実行する条件 (フィールドが存在しない場合)

テーブルの変更:

そして最後にデータ移行

私はこの形式でこれを機能させようとしています:

私が得ている現在のエラー:

これを解決するために誰かが私を正しい方向に向けることができますか?

ところで私は使用して5.5.16-log - MySQL Community Serverいます。

0 投票する
1 に答える
146 参照

ios - アプリの更新間のCoreData、デフォルトのシグナル-データの更新

CoreDataを扱うときに、システムを将来にわたって利用できるようにするために、つぼみをかじろうとしているいくつかの問題に遭遇しました。問題の単純な事実は、私がこれまでにこのようなことをしたことがないということです(つまり、CoreDataで作業します)。アプリでそれを操作する方法を理解することができましたが、バージョン間でアプリに信号を送るための適切な方法を知っておく必要があります。最初のアプリの起動時にデフォルトのデータを更新する必要があります。

そのため、現在、AppDelegateで、管理対象オブジェクトコンテキストを設定し、フェッチリクエストを実行して、特定のテーブル/エンティティにレコードがあるかどうかを確認します。これは最初の起動時にのみ発生させたいので、アプリの起動ごとにDBのコンテンツを常に書き換えるわけではありません。とにかく、それは先に進み、オブジェクトモデルを使用して問題のエンティティ間のデータの挿入を処理します(いくつかあります)

現在、このバージョンのアプリでは、APIなしでストアにアクセスします(これは遠い将来のことです)が、アプリストアにリリースされるバージョン間で、エンティティ内の特定の情報(価格など)を更新する必要がある場合があります。 、繰り返しますが、この更新はアプリの起動時にのみ発生させたいと思います。また、スキーマが変更される可能性があります。いつかどうかはわかりませんが、万が一の場合に備えて、これに対応できることを確認したいと思います。

coredataのバージョン管理「モデルバージョンの追加」でうまくいき、新しいdbバージョンをアクティブバージョンとして設定すると思いましたが、シミュレーターでアプリを起動しても、内部のデータが保持されていることを示すものは何もありません。

これに対応するために私がすべきことについての助けをいただければ幸いです。ありがとうございました!

0 投票する
1 に答える
2151 参照

visual-studio - データベースプロフェッショナル向けのVisualStudioTeam Editionの最近のバージョンはありますか?

データベースのバージョン管理に関するいくつかの記事を調べていたところ、データベースプロフェッショナル向けのVisual StudioTeamEditionを推奨しているJeffAtwoodのブログに出くわしました。彼は裁判へのリンクを提供しましたが、唯一の問題はその裁判が2005年のものであるということです。

この製品は完全に別のバージョンのVisualStudioですか、それともある種のアドインですか?そしてどちらの場合でも、それの最近のバージョンはありますか?グーグルしても2012年は何も見えません。

0 投票する
3 に答える
245 参照

c# - DBのバージョン管理されたスクリプトの実行中にオブジェクトの依存関係を管理する

dbをバージョン管理下に置きます。約2400のオブジェクトがあり、そのうちのほとんどがストアドプロシージャです。

そのため、テーブルを除くすべてのオブジェクトのスクリプトを作成するスクリプトが存在しない場合は、ドロップしました。

テーブルスクリプトは、デルタスクリプトが保存されている別のフォルダーに保持されています。デルタスクリプトのみに番号が付けられています。プロシージャ、ビュー、および関数に関連するその他のスクリプトは、直接実行されます。

したがって、開発者がsvnで変更をコミットするとき、ステージングリリースでそれらを実行したいと思います。問題は、オブジェクトの依存関係です。

開発者が1つのコミットで複数のスクリプトをコミットし、それらが相互に依存している場合、または複数のリビジョンをマージしてからスクリプトを組み合わせて実行する場合、スクリプトを実行する正しい順序を決定できません。

誰かが依存関係を管理し、スクリプトが最初に実行されることを確認するのに役立ついくつかの良い方法を提案できますか?

多くの本番サーバーではredgateツールを使用できないため、sqlcompareまたはsqlsourcecontrolを使用する以外の方法をいただければ幸いです。

テーブルデルタスクリプトは他のオブジェクトに依存しないため(開発者もスクリプトで管理しているため)、次に他のオブジェクトを実行するため、常に最初に実行します。

次のような他のオブジェクトを実行するシーケンスのいくつかの回避策が出てきました。

1)オブジェクトの依存関係を同じ名前で拡張子が異なる別のファイルに保存できるため、依存関係が変更された場合、開発者はスクリプトを使用してそれをコミットする必要があります。次に、スクリプトを実行できるツリーを作成できます。

2)最初にツリーを作成し、依存関係が変更された場合はsvnにコミットし、スクリプトがステージングマシンでテストされてエラーが発生した後、ツリーに追加できます(これには、最初の失敗後にsvnコミットが必要になります)。初めて自動化されたプロセスが失敗する必要があります)

3)オブジェクトの数と同様に、トランザクションを最大回数使用せずに、スクリプトを何度も実行できます。これにより、最悪のシナリオを想定して、最後にすべてのスクリプトが正しく実行されるようになります。

他にアイデアがある場合、またはこれらのアイデアのいくつかを改善できる場合は、貢献してください。

0 投票する
1 に答える
233 参照

sql-server - SQLソース管理の変更の一部のみをコミットする

現在、RedGateのSQLソース管理(バージョン3.1.3.26)をテストしています。

各行にSQLステートメントを格納する静的データを含むテーブルがあります。
変更の一部のみをコミットする方法はありますか?
たとえば、5行を変更しましたが、コミットするために3行だけを選択したいと思います。

RedGateのデータ比較によって提供される機能と同様の機能を考えています。この機能では、各行を展開スクリプトに含めるかどうかを個別に決定できます。

これは可能ですか、それともテーブルの完全な変更をコミットする可能性しかありませんか?