問題タブ [refactoring-databases]

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 投票する
5 に答える
442 参照

database - Oracleに「列シンボリックリンク」のようなものはありますか?

DB内の列に2つの列名で一時的にアクセスできるようにしたい。

なんで?列名の選択が間違っていたので、リファクタリングしたいと思います。列名を変更している間、Webアプリを安定させておきたいので、次のようにするとよいでしょう。

  1. 列bad_column_nameを指すbetter_column_nameという名前の(それを呼びましょう)シンボリックリンクがあります
  2. better_column_nameを使用するようにWebアプリケーションを変更します
  3. シンボリックリンクを削除し、列の名前をbetter_column_nameに変更します

「データベースのリファクタリング」では、これを実現するために、コミット時に同期される2番目の列を実際に追加することを提案しています。私は、Oracleを使用して、作業とオーバーヘッドを減らした、より簡単な方法があることを望んでいます。

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

sql - データベースを再設計し、linqを使用してアプローチをリロードしてExcelとエンティティフレームワークを強化

だから私はたくさんのデータを持ついくつかのテーブルを持っています。それらがテーブルA、B、Cであるとしましょう。これらのテーブルごとに自動インクリメントIDフィールドを追加し、テーブル間でいくつかのフィールドを交換して正規化し、テーブルD.Gulpを追加します。3つの目標があります:1)データベースを再設計し、既存のデータを再ロードします。2)スプレッドシートからのデータロードを有効にして、4つのテーブルを追加/編集/削除します。3)Webフロントエンドが4つのテーブルを追加/編集/削除できるようにします。

私の現在のアプローチ:

  • 既存の3つのテーブルのすべてのデータのフラットファイルをcsv(スプレッドシート)にエクスポートすると思いました。
  • 次に、データベース設計構造をリファクタリングします
  • 次に、linqを使用してExcelを使用し、csvスプレッドシートレコードをdtoオブジェクトに読み戻します。
  • 次に、Entity Frameworkを使用してこれらのdtoオブジェクトをエンティティに変換し、テーブル間の適切な関係でデータベースを更新します
  • スプレッドシートは、将来のバルクデータの追加/編集/削除に再利用されます

次のツールはどうですか?SSIS一括挿入ストアドプロシージャ

私はこれを複雑にしすぎていますか?もっと良い方法はありますか?

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

sql-server - 多くのデータベーステーブルの名前変更フィールドをリファクタリング

同じフィールド名が多くのテーブルに複製されるフィールドの名前を変更する必要があります。

すべてのテーブルを調べ、fieldAが存在する場合は、名前をfieldBに変更するスクリプトまたは無料/低コストのツールを探します。

ありがとう

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

sql - SQL Server でのリファクタリング中に複数のテーブルを同期する

あなたの知恵が必要です。私は、従来の asp から mvc へのシステムの大規模なオーバーホールを行っている最中であり、その過程で、SQL Server 2008 r2 の主要なテーブル (MAIN と呼びます) をリファクタリングしています。このテーブルには 100 を超える列があり (私はこれについて責任を負いません)、パフォーマンス、柔軟性、および保守性のために構造を 7 つのテーブルに移動しています。ただし、新しいコードと古いコードは、多くの古いページと新しいページで MAIN テーブルを参照します。新しいテーブルへスムーズに、そして徐々に移行したいと考えており、アクティブなビジネスのコア サイトです。私を助けてください。

既存のデータを移行したら、

私は考えました:

1.) MAIN テーブルと 7 つの NEW テーブルの両方で、標準の挿入、更新、および削除トリガーを使用します。無限トリガー ループのキャッチ (http://stackoverflow.com/questions/2237499/sql-server-trigger-loop) を含める必要があります。

2.) NEW テーブルを参照して、MAIN テーブルをエミュレートするビューを作成します。ビューで INSTEAD OF トリガーを使用して、ビューを介してテーブルを挿入および更新します。これにより、MAIN テーブルをすぐに削除できます。

どちらがより理にかなっていますか? どちらかが非常に愚かですか?両方?私は間違いなくデータベース管理者ではありませんが、これを最初から正しく行う必要があります。

ありがとうございました。

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

oracle - ArcSDE データベース リファクタリング ツールのオプション

私たちは、アプリケーションの進化的な DB 変更管理ツールとして liquibase を使用しています。「一般的な」データベース スキーマで使用すると、うまく機能します。

しかし、Oracle 経由で esri arcSDE 9.3 プラットフォームを使用する GIS アプリケーションも使用します。この場合、スキーマ内のすべて (またはほとんどすべて) のテーブル (GIS テーブルと「英数字」テーブルの両方) は、アークSDE. そのため、新しいフィーチャ クラスを作成する場合は、arcCatalog を使用します。この方法では、liquibase やその他の自動リファクタリング ツールを使用して SQL を介してフィーチャ クラスの変更を直接管理することはできません。

そのため、liquibase を使用して変更を管理できない場合は、少なくともコマンド ラインを介して機能の管理操作を実行したいと考えています。私たちは、arcCatalog の使用を回避するツールを探し始め、スクリプトを使用して変更を自動化しようとしました。これらの可能性を調査しています。

  1. Oracle 接続を監視している 1 つのフィーチャ クラスに変更を加えるたびに、arcCatalog/arcSDE が実行している SQL を取得してみてください。インデックスやバージョン管理テーブルなどを含む SQL 命令のセットが複雑になりすぎるため、この方法はあきらめます。

  2. arcSDE サーバにインストールされているsdelayer および sdetable admin コマンドを使用します。

  3. データ管理ツールを使用します。これは、フィーチャ クラスを管理するための Python ベースのライブラリですが、デスクトップ バージョンがインストールされているマシンから実行する必要があります。

これらの最後の 2 つのオプションは、コマンドラインから機能を管理する方法を提供しますが、私たちの目標は、liquibase と同様の方法で変更を管理するツールを見つけて開発することです。しかし、これらのツールでは、各 SQL DDL 操作を arcSDE コマンドにマップできるツールを見つける必要があり、現在これを提供する db リファクタリング ツールはありません (現在、liquibase、dbdeploy、flyway をチェックしています)。

この進化的変更管理の問題を arcSDE で解決した人はいますか? この問題に直面する別の方法についての洞察はありますか?

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

c# - Db4o - ワンステップでフィールドの名前を変更する方法は?

db4o ドキュメント(.net バージョン) で読んだように、クラスのフィールドの名前を変更するには、コードに次のコードを追加する必要があると思いました (もちろん、クラスの実際のフィールドの名前を変更します)。

そして、このコードをそのままにしておきます。しかし、これをテストしたところ、うまくいきませんでした (データベース内のオブジェクトは、名前が変更されたフィールドをロードしません)。うまくいったのは、このページの指示に従うことでした。

  1. 名前の変更を構成する
  2. 1で作成した設定でデータベースを開く
  3. データベースを閉じる
  4. コード内のフィールド名を変更する
  5. データベースを再度開くときは、名前の変更を構成しないでください。

これは私には少し奇妙に思えます。私のプログラムは、名前変更呼び出しだけで 1 回実行する必要があり、名前変更呼び出しなしで実際のフィールドの名前を変更して実行する必要があります。問題は、たった 1 つのステップで効果的な名前変更を行う方法があるかどうかです。

たとえば、組み込み (モバイル) アプリケーションを更新するプロセスでは、新しいバージョン (リファクタリング) をクライアントにインストールする前に、名前変更呼び出しを 1 回実行する必要があります。それを回避する方法はありますか?何か不足していますか、または db4o データベース内のフィールドの名前を変更する他の方法はありますか?

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

sql - **SQL DB の GUID への自動インクリメント ID のリファクタリング

Jeffの人々は、自動インクリメント ID よりも GUID の方が望ましいと私に確信させました。自動インクリメント ID によってインデックスが作成された Postgres DB があるため、インデックスを UUID に「リファクタリング」したいと考えています。テーブルをトラバースし、テーブル全体でインデックスの一致をチェックする関数を作成する以外に、これを行うための一般的な (または特定の) アプローチはありますか?

アップデート

  • 注: データベースは現在運用されていないため、パフォーマンスとトランザクションの整合性には問題はありません。
0 投票する
1 に答える
947 参照

sqlite - 大きな sqlite テーブルを sessionid フィールドで分割する

私は比較的 sql(ite) に不慣れで、新しいプロジェクトに取り組みながら学んでいます。1 つの「データ」テーブルに何百万ものトランザクション行があり、1 つのフィールドは「sessionid」フィールドです。

ここではセッション内のアクティビティに集中したいので、主に同じセッションからのトランザクションのみを確認する必要があります。

私の直感では、データベースをセッションごとに多数の単一セッション テーブルに分割すると、常に単一のセッション ID を照会してから続行するよりもはるかに高速になります。私の質問: それは正しいですか? それは違いを生むでしょうか?

そうでない場合でも: 1 つの「データ」テーブル行を多くのセッション固有のテーブルに分割し、行を同じままにする方法を教えてください。さらに、sessionIds をテーブルに関連付ける 1 つのテーブルはありますか?

ありがとう!


友人が私に言ったところによると、テーブルに分割することは非常に柔軟性がなく、異なる sessionId 行の代わりに個別のインデックスを追加して、単一のセッションにより速くアクセスする必要があります。それについての考えと、それを最善に行う方法はありますか?

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

mysql - MySQL の特定の列への読み取り/書き込みアクセスをログに記録する方法はありますか?

MySQL で、テーブル内の特定の列にアクセスするクエリをログに記録する方法はありますか?

目的: リファクタリングの目的でこれを行う必要があります - データベースの構造を変更する必要がありますが、当時は一意の検索可能な列名を使用するほど賢くなかったので、今ではすべての場所を見つけるのが非常に困難になっていますその列を処理する PHP コード。そのため、その列にアクセスするすべてのクエリのログを記録し始めることができれば、どのクエリがその列を使用しているかを正確に把握できるため、PHP コードを変更することができます (考えられるすべてのクエリがその期間中に実行されたと仮定します)。 )。

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

sql - SQL テーブルの列名の名前を変更し、内容を壊さない方法

初心者の頃のコードの一部を再訪したところ、SQL テーブルの列名の一部が非常に曖昧で、身がすくむようなことがわかりました。

先に進んで名前を変更すると、コード内のすべてのマッピングを修正するために必要な時間と労力は、現時点では正当化できないようです。

DBに挿入するときにエイリアスを提供できるかどうか疑問に思っていましたか?

次のようにエイリアスを使用できるのでお願いしますSELECT

または、これを達成する方法について他の提案はありますか?