問題タブ [database]
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.
database - RDF ストレージと従来のデータベースのパフォーマンス比較
Sesameのような RDF ストレージ ソリューションを実験した人はいますか? 従来のデータベース ソリューションと比較した、この種のソリューションのパフォーマンス レビューを探しています。
database - WinForms 1.1 app.configで接続文字列を暗号化するには?
ここで、正直な人を締め出す最初のステップの基本的な解決策を探しています。
ありがとう、マイク
sql - SQL Server を学ぶ最良の方法
そのため、データベース (正確には Microsoft SQL Server) を扱う新しい仕事に就いています。SQL Server どころか、SQL についても何も知りません。彼らは私を訓練すると言いましたが、私は先に進むために自分でそれについて学ぶために率先して行動したいと思います. どこから始めるのが最適ですか (チュートリアル、書籍など)? 凝ったポイント アンド クリックのものよりも、SQL 言語についてもっと学びたいと思っています。
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 を生成するコードは、データベースをロックします。
database - データベース設計で外部キーは本当に必要ですか?
私の知る限り、外部キー (FK) は、プログラマがデータを正しい方法で操作できるようにするために使用されます。プログラマーが実際にこれをすでに正しい方法で行っているとしたら、外部キーの概念は本当に必要なのでしょうか?
外部キーの他の用途はありますか? ここで何か不足していますか?
sql - お気に入りのパフォーマンス チューニング トリック
パフォーマンスの調整が必要なクエリまたはストアド プロシージャがある場合、最初に何を試しますか?
database - SQL2005: テーブルを複数のテーブルにリンクし、Ref Integrity を保持しますか?
これが私のデータベースの単純化です:
次に、QuoteテーブルとJobテーブルに個別に関連する他のテーブルがあります。
ここで、ジョブと見積もりに関して顧客が残した電話メッセージをユーザーが記録できるメッセージテーブルを追加する必要があります。
2 つの同一のテーブル ( QuoteMessageとJobMessage ) を作成することもできますが、これは DRY プリンシパルに違反しており、面倒です。
Messageテーブルを 1 つ作成できます。
しかし、これにより、制約を使用して参照整合性を強制することができなくなります。また、後で Linq to SQL を使用して開発側で問題が発生することも予測できます。
この問題に対するエレガントな解決策はありますか、それとも最終的に何かを一緒にハックする必要がありますか?
火傷
database - バージョン追跡、djangoでDBスキーマの変更を自動化
私は現在、PythonフレームワークDjangoで、将来のdbベースのWebアプリと、現在PHPで記述されているいくつかのアプリの移植版を検討しています。私の過去数年間の厄介な問題の1つは、データベーススキーマの変更を追跡し、これらの変更を本番システムに展開することでした。私もそれらを元に戻すことができることをあえて求めていませんが、もちろんテストとデバッグのためにそれは素晴らしい機能になるでしょう。ここにある他の質問(これやこれなど)から、私は一人ではなく、これは些細な問題ではないことがわかります。また、そこの答えから多くのインスピレーションを見つけました。
さて、Djangoは非常に強力なようですが、上記を支援するツールはありますか?多分それは彼らのドキュメントにもあり、私はそれを逃しましたか?
mysql - MyISAM 対 InnoDB
私は、多くのデータベース書き込みを伴うプロジェクトに取り組んでいます ( 70% の挿入と 30% の読み取り)。この比率には、1 回の読み取りと 1 回の書き込みと見なされる更新も含まれます。読み取りはダーティになる可能性があります (たとえば、読み取り時に 100% 正確な情報は必要ありません)。
問題のタスクは、1 時間に 100 万を超えるデータベース トランザクションを実行することになります。
MyISAM と InnoDB の違いについて Web でたくさん読んだことがありますが、このタスクに使用する特定のデータベース/テーブルには MyISAM が当然の選択のようです。私が読んでいるように見えることから、行レベルのロックがサポートされているため、トランザクションが必要な場合は InnoDB が適しています。
このタイプの負荷 (またはそれ以上) の経験がある人はいますか? MyISAM は進むべき道ですか?
mysql - MySql に相当する Profiler はありますか?
「Microsoft SQL Server Profiler は、データベース エンジンまたは Analysis Services のインスタンスを監視するための SQL トレースへのグラフィカル ユーザー インターフェイスです。」
SQL Server Profiler は、開発、テスト、およびデータベース アプリケーションの問題をデバッグする際に非常に便利です。MySql に相当するプログラムがあるかどうか知っている人はいますか?