問題タブ [composite-primary-key]
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.
sql - WHERE col1、col2 IN(...)[複合主キーを使用したSQLサブクエリ]
foo
複合主キーを持つテーブルが与えられた場合、次(a,b)
のようなクエリを作成するための正当な構文はありますか?
これが不可能で、スキーマを変更できない場合、上記と同等の機能をどのように実行できますか?
また、これらのエイリアスの検索ヒットに対して、「複合主キー」、「副選択」、「副選択」、および「副クエリ」という用語をここに配置します。
編集:標準SQLの回答だけでなく、PostgreSQLとSQLite3で動作する回答にも興味があります。
hibernate - 2つのエンティティが複合主キーを使用しているが異なる列名を使用しているJPAOneToOneアソシエーション?
多くの複合キーを使用するデータベースでHibernateを使用しようとしていますが、それが多くの頭痛の種となっています。残念ながら、スキーマを変更することはできないため、フィールド間で多くの追加のマッピングを行う必要があります。JPA1.0およびHibernate3.3の使用に制限されています。
これまでの最大の問題は、2つの値の複合キーを使用して2つのエンティティを1対1で関連付けることです。この場合、テーブルにはこれらの列の名前が異なります(DBには、各列のテーブル固有のプレフィックス。)
クエリを実行するたびに、次の例外が発生します。
これらのテーブルの2つのクラス、InvestorIssuerEntityとInvestorIssuerEmailEntityには、オプションの@OneToOneアソシエーションがあります(場合によっては、InvestorIssuerにはInvestorIssuerEmailに一致するレコードがありません)。
2つのエンティティに@EmbeddableIdと同じクラスを使用し、次に次のように@AttributeOverridesを使用して、タイプの不一致の問題を回避しようとしました。
ただし、これら2つのエンティティに対してのみ変更を行い、他のエンティティには@IdClassアプローチを使用しました(エンティティに@IdClassまたは@EmbeddableIdのみを使用し、両方を使用しない場合ですか?)
「エンティティのマッピングで列が繰り返される」などの他の問題が発生したため、このアプローチに戻って、他の回避策があるかどうかを確認しました。
誰かがこの問題を回避するための解決策を持っていますか?StackOverflowを見回しましたが、関連付けで使用されている複合キーの名前が異なる場合はありません。
注: 以下の提案を試した後でも、次のエラーが発生します:org.hibernate.MappingException:エンティティのマッピングで繰り返される列:com.business.entity.InvestorIssuerEntity列:T090_091_INVESTOR_ID(insert = "false"update=でマッピングする必要があります「false」)
InvestorIssuerEntityからすべての関連付けを削除しても、同じ問題が発生しました。エラーは、複合キークラスの@Columnアノテーションを削除したときにのみ解消されました。もちろん、investorIdがマップされていないため、クエリは機能しませんでした。複合キーを除いて、T090_091_INVESTOR_IDのすべての言及をすでに削除しているため、Hibernateが「マッピングで繰り返される列」を見つけた場所がわかりません。
InvestorIssuerEntityには、同じ主キーで結合を行う他の関連付けがありますが、関連付けられたエンティティには、複合キーに追加の列もあります。@EmbeddedIdを使用したら、それらをすべてのエンティティに使用することになっていますか?他のクラスには引き続き@IdClassを使用します。しかし、それではどのようにしてどこでも「繰り返し列」が発生するのでしょうか。
c# - 複数の外部キーを使用した Linq と SQL の関連付けの問題
Visual Studio 2008、C#、LINQ to SQL を使用し、データベースを作成するためにデータベース dbml GUI エディターを使用しています。1 対多の関係を作成したいのですが、私の場合、1 つのオブジェクトに 2 つの主キーがあります。GUI edtior を使用して関連付けを作成しましたが、プログラムを実行してデータベースを作成すると、次のエラーが表示されます。
「参照されるテーブルには主キーまたは候補キーが必要です。[ FK 名 = Screen_Pixel ]」
dbml で作成された XML は次のようになります。
C# コードで生成される関連付けは次のとおりです。
何か案は?
database-design - 複合主キーかどうか?
これが私を混乱させているものです。私はデータベーステーブルに複合主キーを持っていることがよくあります。このアプローチの悪い面は、エントリを削除または編集するときにかなり余分な作業が必要になることです。しかし、このアプローチはデータベース設計の精神に基づいていると思います。
反対に、複合キーを使用することはなく、テーブルに別の「id」列を導入する友人がいます。他のすべてのキーは単なるFKです。削除および編集手順をコーディングする際の作業ははるかに少なくなります。ただし、データエントリの一意性をどのように保持するかはわかりません。
例:
方法1
方法2
どちらが良いですか?2番目のアプローチを使用することの悪い面は何ですか?助言がありますか?
sql - 2つのfkを持つ複合主キーを生成するトリガーを作成するクエリはどれですか?
複合主キーを生成するトリガーを作成するコマンドを作成しようとしています。このpkは、2つのfkに基づいています。
より具体的にサンプルテーブルを作成します。
(私が取り組んでいるテーブル)
(参考表)
これまでの私の質問
編集:したがって、この質問の背後にある考え方は、複合キーを構成する両方のキーの連結を含む分離された列があるということでした。友人が私にこれは間違っていると言いました、あなたは両方のフィールドをpkとして置くだけです、そしてそれはそれです。これは本当ですか?
sql - SQL-この関係に主キーを設定できますか?
バンドとメンバーの関係「MemberOf」には、演奏されたメンバーID(Mid)、バンドID(Bid)、「StartYear」、「EndYear」、「Instrument」が含まれます。MidとBidは、それぞれメンバーとバンドの関係の外部キーですが、この状況で「MemberOf」関係の主キーを特定するのに苦労しています。
注:メンバーが開始からバンドに参加していた場合、開始年はnullになる可能性があり、メンバーがまだバンドに参加している場合、終了年もnullになる可能性があります。
この状況では、開始年と終了年はnull値を含む可能性があるため、PKとして使用できませんが、メンバーIDとバンドIDは一意にするのに十分な情報ではありません。たとえば、同じメンバーが後日同じバンドに戻ります。
これは、主キーが存在しないことを意味しますか?ありがとう。
mysql - Mysql PRIMARY key=xであるレコードを選択します
mysqlテーブルに3つの列で構成される主キーがあります。
主キーの特定の値のレコードを選択するための簡単な方法はありますか?
私は試した。
長い手で行う方法の代わりに、
テーブルでphpキーと複合キーを処理するときの標準は何ですか。注:これを解決するために、テーブルに自動インクリメントキーを追加したくありません。それが不可能な場合は、URLで3つの制約を渡すだけです。
mysql - Hibernate は、複合 PK、バグ、またはアンチ機能の一部である AUTO_INCREMENT 列を埋めませんか?
Hibernate と複合キーに問題があり、その列の 1 つが自動インクリメントされていることがわかりました。
私は MySQL と、GID と LANG の 2 つの列で構成される主キーを使用しています。GID 列は AUTO_INCREMENT として設定されます。挿入は機能しており、hibernate は新しい行を挿入し、GID が null の場合、MySQL は auto_generated id を追加します。ただし、Hibernate は永続化するために指定されたオブジェクトに GID フィールドを設定しません。
休止状態で複合主キーを使用することに一般的に関連する問題について聞いたことがあります。これは休止状態のバグなのか、それとも開発者による計画で残されたアンチ機能なのかを尋ねています (実装されないため実装されません)。
ruby-on-rails - Railsのcomposite_primary_key Gemの問題
drnic の複合主キー gem を使用していますが、問題があります。テストで次のコマンドを使用して CourseOrder (cpk を使用) を作成したい場合:course_order = CourseOrder.new(:daily_order => daily_orders(:daily_order_one_of_today_for_hans),:course => courses(:non_veg_2), :finished => false, :ordered_at => Time.now)
次のエラーが発生します。
ActiveRecord::StatementInvalid: PGError: エラー: 列 "course_iddaily_order_id" の null 値が not-null 制約に違反しています: INSERT INTO "course_orders" ("course_iddaily_order_id", "course_id", "ordered_at", "finished", "daily_order_id") VALUES ( NULL, 489519433, '2011-03-01 10:19:27.169397', 'f', 594369222) RETURNING "course_iddaily_order_id"
course_iddaily_order_id が間違っていると思いますよね?
私の移行ファイルは次のようになります。
結果のスキーマ部分は次のようになります。
私のモデルは次のようになります。
ここで何が問題なのかわかりません、助けてもらえますか?
sqlite - SQLite - 複合主キーを使用し、両方の列を自動インクリメントする
次の表があります。
新しい行でnullのときに列「id」を自動インクリメントしたいと思います。また、列「バージョン」を1に設定したいと思います。
自動インクリメント値を sqlite_sequence に保存したいと思います。
「id」で行が挿入されたら、「version」を1つ増やしたい。
これをアプリケーション レベルで複製しましたが、データベース レベルで必要であり、1 つまたは 2 つのトリガーを作成する必要があることを理解しています。
ありがとう
アップデート:
これは単にドキュメントをバージョン管理するためのパターンであり、最適ではない可能性があり、安全ではない可能性があります。誰かがこれに問題があるか、実装するためのより良いアプローチを見ていますか?
更新 2:
現在のバージョンを追跡するために、列「現在」を追加しました。
更新時に、その ID の最高バージョンを取得してから 1 を追加するクエリを追加しました。
また、最新バージョン以外の更新を防ぐために別のトリガーを追加しました。
私はこれを機能させました: