問題タブ [relational]

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

database - データベース内の変更されたタプルを追跡するための最良の方法は何でしょうか?

私は現在、リレーショナルデータベースで変更されたタプルを追跡する必要があるプロジェクトに取り組んでいます。これには、更新されたタプルだけでなく、挿入および削除されたタプルも含まれる必要があります。私の質問は、これを達成するための最良の方法は何でしょうか?私は自分自身のアイデアをいくつか持っていますが、私が考えていなかったより簡単でより良い方法があるかもしれません。あるいは、これを正確に行うプロジェクトがすでに存在します。

プロジェクトの最終的な目標は、さまざまなベンダーのリレーショナルデータベースで機能することですが、最初の実装ではMySQLデータベースを使用します。他のデータベースシステムは後でサポートできます。しかし、MySQLで機能するソリューションを別のデータベースに簡単に適応させることができれば素晴らしいと思います。

私の最初のアイデアは、ログファイルを解析することでした。ただし、これらのログファイルに実際に変更されたタプルが含まれているかどうかはわかりません。さらに、これらのログファイルが常に利用できるとは限らないことも想像できます(共有ホスティングなど)。

私の2番目のアイデアは、アプリケーションレベルでクエリをインターセプトすることでした。INSERT、DELETE、またはUPDATEクエリが実行されると、これらのクエリを解析でき、影響を受けるタプルを事前に決定できます。INSERT操作の場合、これは単に挿入されたタプルであり、DELETEまたはUPDATE操作の場合、新しいSELECTステートメントでWHERE句を適用することでタプルを識別できます。

最後に、開発のこの段階ではパフォーマンスは重要な要素ではないことを付け加えておきます。

詳細が必要な場合は、喜んで提供させていただきます。

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

mysql - リレーショナル用のデータベースを構築する方法は?データ

得点とその得点を追跡する必要があります。以前は、次のようなフラットファイルデータベース(これは混乱していました)を使用してこれを行いました。

各チームには行と列があり、全体が一種のグラフになっていると思います。これはMySQLでも実行できますが、肥大化し、各行に不条理な数の列を強制することになります。

私はこれを行うための他の劇的に簡単な方法を見逃しているに違いないと感じています。誰かが手を貸すことができますか?

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

c# - 拡張性の高いプロジェクトの設計に関する質問 - ベスト プラクティスを念頭に置いて

開発環境は、SQL Server 2008 データベースと Entity Framework を備えた C# 3.5 です。

ソフトウェアが制御する必要があるサードパーティによって作成された物理的な電子サインを表す Sign という名前のクラスとテーブルがあるとします。標識との実際の通信を処理する SignDriver というクラスもあります。サインのプロパティ/列は、サイン ドライバーがサインと適切に対話するために必要な構成可能な情報を表します。

すべてが素晴らしく、あなたは背中を徹底的に叩きました。次に、別のサインと話す必要が生じます。ただし、この記号は前のものとは動作が異なり、Sign クラスとテーブルに追加情報を格納する必要があります。5 つの新しいもの (列/プロパティ) を保存する必要があるとしますが、残念ながら、最初のタイプの標識はこれら 5 つのものを必要としません。次に、各タイプの記号を 10 個制御したい場合、テーブルに多くの NULL 値があることがわかります。

ドメイン モデルは、Sign のようなクラスが増えるまで成長します。各クラスは、問題ドメインの異なる部分を表し、それぞれがデータベース内の対応するテーブルを持ちます。各クラスは、そのタイプの共通情報を適切に収集するという同じ問題を抱えていますが、各タイプの特殊化にはまったく対応していません。

問題の性質上、制御すべき兆候の種類が増え、対応すべき他のエンティティの種類が増えることを意味します。より拡張可能なモデルが必要です。

このようなシステムの最善の方法は何でしょうか??

私はこれについて同僚と長々と話し合いましたが、このような問題に取り組む最善の方法は何かを知りたいと思っています. 特に、多くの人が過去に直面したであろう問題のように思えるからです。

以下は、私たちが思いついたオプションと、それぞれについてのいくつかのポイントです。

  • 1 対 1 の関係を共有するエンティティごとに n個の「タイプ」クラスとテーブルを作成します。
    • 非常に継承的です。
    • 伸ばすときに一番時間がかかります。
    • 多くのテーブル。
  • キーと値のペアを保持するために、エンティティごとに 1 つの「拡張プロパティ」テーブルを作成します。
    • 参照整合性。
    • 拡張可能。
  • Create one global ‘extended properties’ table to store properties for ANY entity. (schema: entityType, entityId, key, value, dataType)
    • Super extensible.
    • Cannot have referential integrity with existing tables.
    • Doesn’t look like Entity Framework will be able to handle this well.

What would you do and why??

Any help greatly appreciated. Cheers.

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

php - Doctrine ORM DQL(NOT IN)で行を除外する

私はcodeigniterとdoctrineを使ってチャットアプリケーションを構築しています。

テーブル:
-ユーザー
-User_roles
-User_available

関係:
1人のユーザーには多くの役割があります。1人のuser_availableには1人のユーザーがいます。

チャットに使用できるユーザーは、user_availableテーブルにあります。

問題:
role_id7を取得していないuser_availableにすべてのユーザーを取り込む必要があります。

したがって、DQLで次のように表現する必要があります(これはSQLでもなく、言葉で表現するだけです):

SELECT * from user_available WHERE NOT user_available.User.Role.role_id = 7

本当にこれにこだわる

編集:私は不明確だったと思います。テーブルはすでにマップされており、DoctrineがINNERJOINの仕事をしてくれます。私はこのコードを使用して、最も長く待機した管理者を取得していますが、今はユーザーが必要です。

ここで、最も長く待機したユーザーを取得する必要がありますが、これは機能しません

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

sql - 2 つの列に COUNT と GROUP BY を使用した非常に遅い SQL クエリ

私はこのウェブ フォーラムをアーカイブしていますが、通常は 1 週間に 1 回削除されます。だから私はそれをスクリーンスクレイピングし、データベース(PostgreSQL)に保存しています。

また、フォーラムが最もアクティブな時間帯など、ユーザーが楽しめるいくつかのグラフを使用して、データを少し分析します。

だから私は次のようにpostsテーブルを持っています:

そして、トップ 10 の小さな投稿者テーブルについて、各ユーザーの投稿数を取得したいと考えています。

私はこれを思いついた:

これは非常に遅いことがわかりました。9 秒、現時点で posts テーブルには約 300,000 行しかありません。

1 つの列だけでグループ化すると、0.5 秒しかかかりませんが、両方が必要です。

私はリレーショナル データベースと SQL にかなり慣れていないので、これが正しいかどうか、またはどのように間違っているのかよくわかりません。

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

sql - SQLで両方向に関連する2行を挿入する

私はこのような2つのテーブルを持っています:

各テーブルは互いに関連しています。

それらの外部キーを介して。

問題は、外部キー制約の1つを削除し、行を挿入してから制約を追加し直さないと、最初の人/従業員を作成できないことです(これはかなり不自由です)。

ここで明らかな神のパラドックスは、最初の「従業員」はそれ自体を作成するために存在しないということです (「人」)。

2 つのテーブルに同時にデータを挿入する方法はありますか? この作成者が作成者であるというシナリオは、一度だけ発生する必要があります。データを 2 つのテーブルに同時に挿入できない場合、天才が提案する他の方法はありますか?

明確化

「生徒」や「保護者」など、「人物」テーブルに関連する他のテーブルがあります。個人はタイプを切り替えることはできません (従業員は学生または保護者に切り替えることはできません。また、その逆も同様です)。このパラドックスは、ManagerID FK を持つ Employee テーブルに似ています。私の場合を除いて、テーブルは分離されています。

ソリューション は、Remus Rusanu と b0fh に感謝します

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

mysql - mysqlクエリの通常の関係テーブルと連結された関係テーブル

2 つのテーブル間の関係について質問があります。

テーブル users とリンクがあるとします。


これら 2 つをリンクする通常の方法は、name_links テーブルを使用することです。例えば:

今、私はこのようなテーブルを作るのが良い考えかどうか疑問に思っていました.

私が考えることができる長所と短所は次のとおりです。

長所1:

常にインデックスを検索します。より高速なクエリの例では、uid=1 を選択してから、リンク 1、3 を選択します。どちらもインデックスなので高速ロードになります。

1000 人のユーザーがいて、それぞれに 20 個のリンクがある場合、すべてのリンクを取得するには 20.000 レコードを通過する必要があることを意味します (これについてはわかりません)。この方法を使用すると、インデックスを 1 つだけ取得して完了です。

短所1:

name_links テーブルをより頻繁に更新し、読み取り、編集、書き込みを行う必要があります 例 ユーザー 2 は link2 を削除します メソッドは次のようになります:
+ ユーザー 1 の文字列を取得 +
文字列から番号を削除
+ 新しい文字列を挿入

ここでのすべてはインデックスで行われるため、高速になると思います。

短所2:

別の短所は、リンク 2 を削除するときに、すべての文字列を調べなければならないことですが、これはあまり問題にならないということです。

これは私がこれまでに思いついたものであり、私はプロジェクトの時点で、どちらを使用するかを決定する必要があります.

どの方法を選ぶべきか、アドバイスをいただければ幸いです。私の長所と短所は正しいですか?私が考慮していないことはありますか?このトピックに関するヘルプは大歓迎です。

君たちありがとう!

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

c# - 1-Mの関係で参照主キーを引き出すEF

1-Mの関係では、関係の多くの側面で、次のようなものを使用して別のクエリを実行せずに、親アイテムのIDを引き出すことができます。

しかし、別のクエリを実行せずに1から多くのIDを引き出す同様の方法があるかどうか疑問に思っていますか?

乾杯アンソニー

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

php - CodeIgniter でリレーショナル データを処理する最良の方法は?

CodeIgniter プロジェクトを作成するとき、モデル間の関係を処理する最良の方法は何ですか? モデルには関連する他のモデルを含める必要がありますか、これはコントローラーで処理する必要がありますか、またはこれらのシナリオを処理する他の方法はありますか? 1 対 1、1 対多、または多対多の関係について考えています。

例: タグ付きの多対多とコメント付きの 1 対多のブログ投稿があるとします。ブログ投稿を取得するときにタグとコメントを取得するためのベスト プラクティスは何ですか?

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

tuples - 関係代数、ドメイン関係論理、タプル関係論理を使用して、最も高い/最大のものをどのように見つけることができますか

これは宿題の一部です。給与が最も高い、または2番目に高い従業員のeidを見つけるように求めるいくつかの質問があります。ほとんどの航空機で認定されているパイロットを見つけてください。どうすればいいのかわからない。この章には例がなく、グーグルはそれほど役に立たないことを証明しています。誰かがこれらのうちの1つだけを行う方法を教えてくれれば、それは大いに役立ちます。

ここに表があります:


航空機(援助:整数、名前:文字列、巡航範囲:整数)

Certified(eid:整数、aid:整数)

Employees(eid:整数、ename:文字列、給与:int)