問題タブ [sql]

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

c# - C#:DataSet以外に何を使用しますか

.NetのDataSet/DataTable / DataRowパラダイムにますます不満を感じています。これは主に、実際にやりたいことよりも2、3ステップ複雑なことが多いためです。コントロールにバインドしている場合は、DataSetで問題ありません。しかし、他の場合には、かなりの量の精神的なオーバーヘッドがあるようです。

私はSqlDataReaderで少し遊んだことがあり、それはselectを介した単純な冗談には良いようですが、.Netには、詳細を知るのに役立つ他のモデルが潜んでいる可能性があると思います。私がこれで見つけたすべてのヘルプは、デフォルトでDataSetを使用しているように感じます。多分それとDataReaderは本当に最良のオプションです。

私は最良/最悪の内訳を探しているのではなく、私の選択肢が何であるか、そしてあなたがそれらでどのような経験をしたかを知りたいだけです。ありがとう!

-エリック・シップル

0 投票する
41 に答える
15299 参照

sql - エンティティ オブジェクトが必要な理由

現在受け入れられているエンタープライズ アプリケーションの設計パラダイムのメリットについて、率直で思慮深い議論が必要です。

エンティティ オブジェクトが存在する必要があるとは確信していません。

エンティティ オブジェクトとは、"Person"、"Account"、"Order" など、アプリケーション用に構築する傾向がある典型的なものを意味します。

私の現在のデザイン哲学は次のとおりです。

  • すべてのデータベース アクセスは、ストアド プロシージャを介して行う必要があります。
  • データが必要なときはいつでもストアド プロシージャを呼び出し、SqlDataReader または DataTable の行を反復処理します。

(注: 私は Java EE を使用してエンタープライズ アプリケーションも構築しました。Java 関係者は、私の .NET の例を同等のものに置き換えてください)

私はアンチOOではありません。エンティティだけでなく、さまざまな目的のために多くのクラスを作成します。私が作成するクラスの大部分が静的ヘルパー クラスであることは認めます。

私はおもちゃを作っているわけではありません。私が話しているのは、複数のマシンに展開された大規模で大量のトランザクション アプリケーションです。Web アプリケーション、Windows サービス、Web サービス、B2B インタラクションなど。

OR マッパーを使用しました。いくつか書きました。私は Java EE スタック、CSLA、およびその他の同等のものをいくつか使用しました。私はそれらを使用するだけでなく、実稼働環境でこれらのアプリケーションを積極的に開発および保守してきました。

私は、実体オブジェクトが私たちの邪魔をしているという実戦テスト済みの結論に達しました.私たちの生活はそれらがなけれずっと楽になるでしょう.

次の簡単な例を考えてみましょう。アプリケーション内の特定のページが正しく機能していないというサポートの電話を受けました。フィールドの 1 つが本来あるべきように永続化されていない可能性があります。私のモデルでは、問題を見つけるために割り当てられた開発者は、ちょうど 3 つのファイルを開きます。ASPX、ASPX.CS、およびストアド プロシージャを含む SQL ファイル。ストアド プロシージャ呼び出しのパラメーターが欠落している可能性があるこの問題は、解決するのに数分かかります。しかし、どのエンティティ モデルでも必ずデバッガーを起動し、コードのステップ実行を開始すると、Visual Studio で 15 ~ 20 個のファイルが開かれることになります。スタックの一番下に降りる頃には、どこから始めたか忘れてしまいます。私たちは一度に多くのことを頭の中に入れておくことができます。ソフトウェアは、不要なレイヤーを追加することなく、信じられないほど複雑です。

開発の複雑さとトラブルシューティングは、私の不満の 1 つの側面にすぎません。

次に、スケーラビリティについて話しましょう。

開発者は、データベースとやり取りするコードを作成または変更するたびに、データベースへの正確な影響を徹底的に分析する必要があることを認識していますか? 開発コピーだけでなく、本番環境の模倣を意味するため、オブジェクトに必要な列を追加すると、現在のクエリ プランが無効になり、1 秒で実行されていたレポートが 2 分かかることがわかります。選択リストに単一の列を追加したためですか?また、現在必要なインデックスが非常に大きいため、DBA がファイルの物理レイアウトを変更する必要があることがわかりましたか?

抽象化によって物理的なデータ ストアから離れすぎると、スケーリングが必要なアプリケーションに大混乱が生じます。

私は熱狂者ではありません。Linq から Sql、ADO.NET EF、Hibernate、Java EE などへの強力な推進力があるため、私が間違っているかどうかは確信できます。それが何であるか、そしてなぜ私が自分の考えを変える必要があるのか​​ を本当に知りたい.

[編集]

この質問が突然再びアクティブになったようです。そのため、新しいコメント機能が追加されたので、いくつかの回答に直接コメントしました。返信ありがとうございます。これは健全な議論だと思います。

エンタープライズ アプリケーションについて話していることをもっと明確にするべきだったでしょう。たとえば、誰かのデスクトップで実行されているゲームやモバイル アプリについては、コメントできません。

いくつかの同様の回答に応えて、私がここで一番上に挙げなければならないことの1つは、直交性と関心の分離がエンティティ/ ORMに移行する理由としてしばしば引用されることです。私にとって、ストアド プロシージャは、私が考えることができる懸念の分離の最良の例です。ストアド プロシージャ以外のデータベースへのアクセスをすべて許可しない場合、ストアド プロシージャの入力と出力を維持している限り、データ モデル全体を理論的に再設計しても、コードを壊すことはありません。これらは、コントラクトによるプログラミングの完璧な例です (「select *」を避け、結果セットを文書化する限り)。

この業界に長く携わっていて、寿命の長いアプリケーションを扱ってきた人に尋ねてみてください。データベースが存続している間に、いくつのアプリケーションと UI レイヤーが行き来しましたか? データを取得するために SQL を生成する 4 つまたは 5 つの異なる永続レイヤーがある場合、データベースを調整してリファクタリングするのはどれほど難しいでしょうか? あなたは何も変えることはできません!ORM または SQL を生成するコードは、データベースをロックします

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

sql - テーブル スキャンとクラスター化インデックス スキャンの違いは何ですか?

a もTable Scana もClustered Index Scan基本的にテーブル内のすべてのレコードをスキャンするのに、クラスター化インデックス スキャンの方が優れていると思われるのはなぜでしょうか?

例として、多くのレコードがある場合、次のパフォーマンスの違いは何ですか?:

0 投票する
29 に答える
38680 参照

sql - お気に入りのパフォーマンス チューニング トリック

パフォーマンスの調整が必要なクエリまたはストアド プロシージャがある場合、最初に何を試しますか?

0 投票する
23 に答える
24232 参照

sql - 選択したレポート ツールは何ですか?

すべてのプロジェクトには、必ず何らかのレポート機能が必要です。選択した言語での foreach ループから本格的な BI プラットフォームまで。

仕事を成し遂げるために、グループはどのツール、ウィジェット、プラットフォームを使用して成功、不満、失敗を経験しましたか?

0 投票する
6 に答える
77163 参照

sql - オラクルの「yy」と「rr」の日付マスクの違いは何ですか?

例:

異なる結果を返す

0 投票する
6 に答える
3511 参照

sql - テーブルへのアップサートを行うにはどうすればよいですか?

ジョブのリストを含むビューがあり、ジョブが誰に割り当てられているか、どの段階にいるかなどのデータが含まれています。各段階で各人が持っているジョブの数を返すストアド プロシージャを作成する必要があります。

これまでのところ、これがあります(簡略化):

それに関する問題は、行が結合されないことです。したがって、スタッフ メンバーがステージ 1 とステージ 2 にジョブを持っている場合、@ResultTable には 2 つの行があります。私が本当にやりたいのは、スタッフ メンバーの行が存在する場合は行を更新し、存在しない場合は新しい行を挿入することです。

誰かがこれを行う方法を知っていますか、または別のアプローチを提案できますか? カーソルを使用してユーザーのリストを反復処理することは本当に避けたいと思います (しかし、それは私の代替オプションです)。

SQL Server 2005 を使用しています。

編集: @Lee:残念ながら、InStage1 = 1 は単純化されたものでした。これは、WHERE DateStarted IS NOT NULL と DateFinished IS NULL に似ています。

編集: @BCS:最初にすべてのスタッフを挿入するというアイデアが気に入っているので、毎回更新するだけです。しかし、私はそれらの UPDATE ステートメントを正しくするのに苦労しています。

0 投票する
30 に答える
511766 参照

sql - SQLでランダムな行をリクエストするには?

純粋な SQL でランダムな行 (または可能な限り真にランダムに近い行) を要求するにはどうすればよいですか?

0 投票する
5 に答える
18047 参照

sql - SQL Server 2005 Reporting Services のカスタム フォント

SQL Reporting Services レポートに問題があります。レポート ヘッダーにカスタム フォントを使用していますが、サーバーに展開すると、印刷または PDF/TIFF へのエクスポート時に正しく表示されません。サーバーにフォントをインストールしました。カスタム フォントを使用するために必要なことはありますか?

すべてのクライアント コンピューターにフォントがインストールされているため、ブラウザーでフォントを表示すると正しく表示されます...


Ryan さん、FAQ への投稿で問題が解決しました。サーバーにフォントをインストールすると、印刷の問題だけでなく、チャートの問題も修正されます (これもサーバーでレンダリングされます)。ご指摘のとおり (FAQ にも記載されています)、Reporting Services 2005 は PDF ファイルへのフォントの埋め込みを行いません。今のところは大丈夫だと思います。最も重要な部分は、印刷を開始して正しいフォントを取得できることでした。

フォントがすぐに表示されなかった理由は、FAQ で回答されています。

Q: クライアント/サーバーにフォントをインストールしましたが、まだ ? または黒いボックスが表示されます。なんで?A: クライアント マシンの場合、PDF ビューアのすべてのインスタンスを閉じてから再度開くと、問題が解決するはずです。

サーバーの場合、サービスを再起動すると、PDF レンダラーが新しいフォント情報を取得できるようになります。

残念ながら、新しくインストールされたフォントをクライアント/サーバーに認識させるために、マシンの完全な再起動が必要になることもありました。

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

sql - どの RDBMS を使用すればよいですか?

インターネット経由でデータを転送するための高速トランザクション サーバーを開発したので、これを提供するために MySQL のようなデータベース実装に依存する必要はありません。これにより、どの SQL バージョンを使用するかという問題が生じます。

私は SQLite が本当に好きですが、それが産業用の強度であるとはまだ確信していません。

私は 8 年前に MySQL を嫌っていましたが、今では明らかに産業用の強みであり、私のパートナーはそれを使用しているため、サーバー側では当然の選択です。それを使用すると、「localhost」を介してインストールされたサーバー(Windowsサービス)に接続するだけです。私の懸念はメモリ使用量です。

結果セットをメモリにロードしませんが、最初の接続で約 6Mb になることに気付きました。後続の接続が追加の 6MB にならないことを願っています!

libmysqld.dll 組み込みライブラリを使用すると、新しい接続ごとに組み込みクライアント/サーバー コードの新しいインスタンスがメモリにロードされますか? 各プロセスには独自のインプロセスメモリがあるため、そう想定しています...

それにもかかわらず、マニュアルには、「mysql_free_result() が呼び出されるまで、行ごとにメモリ使用量が増加するため、libmysqld 組み込みサーバーを使用する場合、行ごとに結果を取得するときにメモリの利点が本質的に失われる」と記載されています。 http://dev.mysql.com/doc/refman/5.1/en/mysql-use-result.html

これは、インストールされたサービスを使用する必要があることを意味します。しかし、これは組み込みサーバーと同じくらい高速ですか?

低価格で信頼性の高いフレーバーは他にありますか?