問題タブ [rdbms]
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.
design-patterns - リレーショナル データベースの設計パターン?
設計パターンは通常、オブジェクト指向設計に関連しています。リレーショナル データベースを作成およびプログラミングするための設計パターン
はありますか?
多くの問題には、再利用可能な解決策が必要です。
例には、テーブル設計、ストアド プロシージャ、トリガーなどのパターンが含まれます。
martinfowler.comのようなパターンのオンライン リポジトリはありますか?
パターンで解決できる問題の例:
- 階層データの保存 (例: タイプを持つ単一のテーブル vs 1:1 のキーと違いを持つ複数のテーブル...)
- 可変構造でデータを保存する (例: 一般列 vs xml vs 区切り列...)
- データの非正規化 (影響を最小限に抑える方法など)
ms-access - (Type, ID) (aka 'polymorphic')- MS Access で外部キー列を作成するにはどうすればよいですか?
Ruby-on-Rails では、これを「ポリモーフィック アソシエーション」と呼びます。
私のアプリケーションにはいくつかのCommentable
ものがあります。それぞれの表は以下のとおりです。
Comments
次のようにテーブルを追加したいと思います。
この方法でデータベースの参照整合性が失われることは理解していますが、他の唯一のオプションは複数のComments
テーブルを持つことです: PostComments
、PersonComments
、PhotoComments
、 ...
そして今、質問のために:
Comments.commentable_type
最初に からテーブル名を取得し、次に から ID を取得して、ルックアップを行う方法を理解するフォームを作成するにはどうすればよいComments.commentable_id
ですか?
database - オブジェクト指向データベースが(まだ)成功していないのはなぜですか?
それが問題です。OODBが失敗した理由、または今日でも多くのシステムがリレーショナルデータベースを使用している理由を1つだけ挙げてください。
ms-access - MSAccessの質問-スケーラビリティ/インデックス作成/トランザクション
MSAccessデータベースに関するいくつかの質問-
サイズ:アクセスデータベースのサイズに制限はありますか?私が尋ねる理由は、いくつかの単純なテーブルを持つアクセスデータベースがあるからです。dbのサイズは約1GBです。クエリを実行すると、実行に10分以上かかることがわかります。
適切なインデックスを作成することで、MS Accessがこれを処理できるか、またはテクノロジに基本的な制限がありますか。
これはMSAccessXPです。
また、MS Accessはdbトランザクション、コミット、ロールバックをサポートしていますか?
xml - XMLをリレーショナルデータベースに保存して操作することを選択するのはなぜですか?
最新のRDBMSは、XML列タイプとストアドプロシージャでXMLを処理するための機能をサポートしています。歴史的に、私は常に階層データ(OOオブジェクトまたはXML)をリレーショナルテーブルにマップしていました。XMLに対するデータベースのサポートが広まっていることを考えると、自分のやり方を変える必要がありますか?
rdbms - 有向グラフを保存/アクセスする最良の方法
約 3500 の洪水制御施設があり、フロー パスを決定するためにネットワークとして表現したいと考えています (基本的に有向グラフ)。私は現在、SqlServer と CTE を使用して、すべてのノードとその上流コンポーネントを再帰的に調べています。これは、上流パスが多く分岐しない限り機能します。ただし、一部のクエリは、物理的にパスを下っていなくても (つまり、「ダウンストリーム」セグメントが 2 つまたは 3 つ)、アップストリームの複雑さが増すため、他のクエリよりも指数関数的に時間がかかります。場合によっては、クエリを強制終了する前に 10 分以上放置しました。私は単純な 2 列のテーブルを使用しています。1 つの列は施設自体で、もう 1 つは最初の列にリストされている施設の上流にある施設です。
現在の機能を使用してインデックスを追加して高速化を試みましたが、違いはありませんでした。また、グラフで可能な接続に関しては、どのノードも複数の上流接続を持つことができ、複数の「下流」ノードから接続することができます。
データに循環がある可能性は確かにありますが、これを確認する良い方法をまだ見つけていません (CTE クエリが最大再帰カウント ヒットを報告した場合を除き、それらは簡単に修正できました)。
それで、私の質問は、この情報を間違って保存しているのでしょうか? 上流のポイントを照会する CTE 以外のより良い方法はありますか?
database - 関数からリレーショナルへのマッピングは、オブジェクトからリレーショナルへのマッピングよりも簡単ですか?
オブジェクト リレーショナル マッピングについては、こちらを含め、よく議論されています。私はいくつかのアプローチと、落とし穴と妥協の経験があります。真の解決には、オブジェクト指向またはリレーショナル モデル自体の変更が必要なようです。
関数型言語を使用している場合、同じ問題が発生しますか? これら 2 つのパラダイムは、OO と RDBMS よりもうまく適合するはずです。RDBMS のセットで考えるという考え方は、関数型アプローチが約束しているように見える自動並列処理と噛み合っているようです。
興味深い意見や洞察を持っている人はいますか? 業界のプレイ状況は?
sql - データベース通信で BLOB と数値データを効率的に処理するにはどうすればよいですか?
SQL データベースは、ほとんどのソフトウェアの基盤のようです。ただし、テキストデータ用に最適化されているようです。実際、数値データ、具体的には整数を含むクエリを実行する場合、アプリケーションとデータベースの間で数値がテキストに変換されてからネイティブ形式に戻されるのは非効率的です。これと同じ非効率性が BLOB データにも当てはまるようです。私の理解では、Linq to SQL のようなものでも、この双方向の変換はバックグラウンドで行われています。
SQL でこのオーバーヘッドを回避する一般的な方法はありますか? これを他のものよりも効率的に処理する特定のデータベース管理システムはありますか (つまり、非標準の拡張機能/API を使用)?
説明。次の select ステートメントでは、IN の後の数値のリストを int の生の配列として簡単に渡すことができますが、その最適化レベルを達成する方法はないようです。
database-design - フォーミュラベースの価格設定。RDBMS に格納し、アプリケーション層で使用する
商品取引アプリケーションの設計の第 1 段階に入ろうとしています。このアプリケーションの主な機能は、価格情報の取得と評価です。この市場での価格は固定されていません。これは通常、市場ベンチマーク +/- プレミアムです。例: (A と B は市場のベンチマークです)
- 価格 = A + $1
- 価格 = A + .5(AB)
取引の最終価格は、合意された期間に適用される価格計算式を使用して計算されます。例えば; 最終的な価格は、商品を積み込む前の週と次の週の A + $1 の平均である可能性があります。
現在、トレーダーはこの詳細を Excel でキャプチャしているため、必要な数式を柔軟に設定できますが、この情報が会計システムに入力されることはなく、スプレッドシートは市場ベンチマークのライブ予測に接続されていないため、価格予測が手動で行われ、遅いタスク。
アプリケーションで数式を入力、保存、および評価するために使用できるツール/手法についての情報を探しています。
データベースとして SQL Server または Oracle を使用し、クライアント プラットフォームはまだ修正されていませんが、WinForms/WPF、ASP.NET、または Java webapp を想定できます。
これが非常に広範な質問であることは承知していますが、どのテクノロジを使用するかについて、より具体的に説明するにはまだ十分ではありません。
ありがとう
mysql - INSERT が失敗する原因となる TRIGGER? 可能?
この回答をクリーンアップTRIGGER
する際に、MySQL の s とストアド プロシージャについて少し学びましたが、BEFORE INSERT
とBEFORE UPDATE
トリガーはデータを変更できますが、挿入/更新を失敗させることはできないように見えることに驚きました (つまり、検証)。この特定のケースでは、主キーの重複を引き起こすような方法でデータを操作することでこれを機能させることができました。この特定のケースでは意味がありましたが、一般的な意味では必ずしも意味がありません.
この種の機能は MySQL で可能ですか? 他の RDBMS では (残念ながら私の経験は MySQL に限定されています)? おそらくTHROW EXCEPTION
スタイル構文?