問題タブ [composite-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.

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

oracle - Hibernate MapKeyManyToMany は、存在しない複合キーを提供します

三方向結合テーブルを使用したマップの Hibernate (3.3.1) マッピングがあります。

基礎となるテーブル (Oracle 11g の場合) は次のとおりです。

キー エンティティは、データベースに 3 列の主キーがありましたが、現在は次のように再定義されています。

このテーブルには、主キー 'Id' と、他の各列の外部キー制約 + インデックスがあります。

何らかの理由で、Hibernate はマップのキーが複合キーであると考えていますが、複合キーではないため、次のエラーが表示されます。

org.hibernate.MappingException: 外部キー (FK1A241BE195C69C8:SiteConfig_InstConfig [SiteTypeInstallationId])) には、参照される主キー (SiteTypeInstallation [SiteTypeId,InstallationRoleId]) と同じ数の列が必要です

注釈を削除しinstallationConfigurationsて一時的にすると、エラーは消えます。

@Id が単純なキーを明確に定義しているのに、なぜ SiteTypeInstallation に複合キーがあると考えるのか、非常に混乱しています。なぜこれが起こるのか分かりますか?JBoss (5.0 EAP) + Hibernate が、サーバーの再起動やコードの再デプロイの際に主キーの誤った考えを何らかの形で覚えている可能性はありますか?

前もって感謝します、-ラース

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

.net - NHibernateで編集できる複合IDを持つことは可能ですか?

複合主キーとして使用される多くの列を持つテーブルがある状況があります。

さらに悪いことに、ビジネスロジックでは、これらを変更可能にする必要があります。

私はnhibernateを使用しており、これらをロード/保存するためのマッピングに問題はありません。ただし、プロパティ値を更新し、updateを呼び出すときにこれらの変更をDBに反映させる必要があります。

これはレガシーシステムであるため、db構造の変更はありません(恐ろしい)。

この問題を解決するためにnhibernateでできることはありますか?nhibernateは、そのキーを変更することさえ許可します。

私が使用しているのは、バックエンドとして.net4.0、nhibernate 2.1、fluentnh 1.0、およびsqlserverです。

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

sql-server - 別の列で並べ替えられた 1 つの列の MAX を効率的に計算するにはどうすればよいですか?

次のようなテーブル スキーマがあります (簡略化)。

ここで少し背景を説明すると、このトランザクション テーブルは実際には、別のベンダーのデータベース (ETL プロセスと呼びます) からのいくつかの異なるタイプのトランザクションを統合しているため、私は注文をあまり制御できません。挿入されます。私が行ったとしても、トランザクションは遡る可能性があるため、ここで注意すべき重要なことは、特定の最大値が必ずしも最新のトランザクションであるとは限らないということです。TransactionIDcustomer

実際、最新のトランザクションは日付ID の組み合わせです。日付は一意ではありません。ベンダーは時刻を切り詰めることが多いため、最新のトランザクションを取得するには、まず最新の日付を見つけてから、その日付の最新の ID を見つける必要があります。

ウィンドウ クエリ ( ROW_NUMBER() OVER (PARTITION BY TransactionDate DESC, TransactionID DESC)) を使用してこれを実行できることはわかっていますが、これには完全なインデックス スキャンと非常にコストのかかる並べ替えが必要なため、効率が大幅に低下します。ずっと書き続けるのもかなり厄介です。

2 つの CTE またはネストされたサブクエリを使用すると、もう少し効率的です。1 つはMAX(TransactionDate)perを検索しCustomerID、もう 1 つは を検索しますMAX(TransactionID)。繰り返しますが、機能しますが、2 番目の集計と結合が必要です。これは、ROW_NUMBER()クエリよりもわずかに優れていますが、パフォーマンスに関してはかなり苦痛です。

CLR User-Defined Aggregate の使用も検討しており、必要に応じてフォールバックしますが、展開を簡素化するために、可能であれば純粋な SQL ソリューションを見つけたいと思います (これ以外の場所では SQL-CLR は必要ありません)。事業)。

質問は、具体的には次のとおりです。

最新のperを返し、最新 の の最大値として定義されたクエリを作成し、通常の/クエリと同等のパフォーマンスを実現するクエリを作成することは可能ですか?TransactionIDCustomerIDTransactionIDTransactionDateMAXGROUP BY

(つまり、計画の重要なステップは、インデックス スキャンとストリーム集計のみにする必要があります。複数のスキャン、並べ替え、結合などは、遅すぎる可能性があります。)

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

database-design - 正規化の方が優れていますか、それとも複合主キーの方が優れていますか?

Oracle DBにテーブルがあります。たとえば、Studentテーブルです。StudentIDは、テーブルの主キーです。別の列に関心のあるサブジェクトがあります。たとえば、列名はinterested_SUBです。学生は複数の興味のある科目を持つことができます。この場合、次の2つのオプションがあります。

1)StudentID列とInterested_SUB列を複合主キーとして使用します。この場合、たとえば、学生が3つの科目に関心がある場合、列の値として(S1、SUB1)(S1、SUB2)および(S1、SUB3)を含むテーブルに3つの行があり、他のすべての列は同じになります。これらの3つの行の値。

2)StudentId列とInterested_SUB列を含む個別のテーブルと、最初のテーブルに追加の列を作成して、学生が複数の科目に関心があるかどうかを示します。この場合、studentIdとSUBを(S1、SUB1)として、新しいインジケーター列を「Y」として、studentテーブルの学生ごとに1行にします。2番目のテーブル(S1、SUB2)&(S1、SUB3)。

上記のオプションのどれがDBのパフォーマンスを向上させているかを教えてください。

前もって感謝します

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

c# - EntityFrameworkCTP4と複合キー

私はEntityFrameworkCTP4で遊んでいて、それを現在のプロジェクトの1つに適用することにしました。アプリケーションはSQLServerデータベースを使用し、複合キーを持つテーブルが1つあります。たとえば、テーブル「MyEntity」には、外部キー(個別)と複合主キーの両方として「Key1」と「Key2」があります。

EntityConfigurationから派生した構成クラスを作成しました:

次に、私のDataContext(DbContextから派生)で:

問題は、「MyEntities」にすべてのレコードを照会すると、次のようになることです。

最初のレコードが18回繰り返され、次に2番目のレコードが18回繰り返されるという非常に奇妙な結果が得られます(レコードの場合、私のテーブルには36のレコードがあります)。

他のエンティティがこの問題を示していないため、問題は複合キーにあると思われます。

助けていただければ幸いです、ありがとう:)

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

java - Hibernate: 複合キーを使用したオブジェクトとエンティティの ID マッピングの戦略/パターン?

任意の型 (アトミック型) の複数列の主キーのハッシュ コードを生成するための一般的な衝突のない Java のベスト プラクティスは何ですか?

私はそれについて数時間考え、すべての主キー列で連結された文字列がそうする唯一の信頼できる方法であるという結論に達しました。次に、その連結された文字列で Java の hashCode メソッドを呼び出すと、一意の整数が生成されます。(実際には、データベースのインデックスが行うことを何らかの形で模倣しますが、ここではわかりません)

フォームの複数列の主キーの場合

ハッシュコードは次のように計算できます。

もちろん、equals もこれに基づいている場合、これは HashSets と Hashtable でのみ機能します。

私の質問: これは良い一般的な戦略ですか?

オンザフライ計算が最速ではない可能性があることがわかります。複合キーの値が変更されるたびに、ハッシュ コードを再計算したい場合があります (たとえば、キー プロパティで動作するすべてのセッター内から rehash() メソッドを呼び出します)。

提案と改善を歓迎します。これに対する一般的に知られている戦略はありませんか?パターン?

0 投票する
4 に答える
5552 参照

sql - 複数の列に複合キーを作成する方法

複数の列に複合キーを作成するにはどうすればよいですか?そのうちの1つは値を持っていても、null(または定数値)を持っていませんか?

例えば:

4番目のレコードを挿入すると、複合キー違反エラーが発生します。

0 投票する
4 に答える
724 参照

sql - SQLServer複合キーエクスペリエンス

Documentsテーブルに複合キーを作成したいと思います(それはアイデアですが、他の提案も受け付けています)。これは、年(2010、...)とIDの2つの列で構成され、自動インクリメントされますが、毎年自動的に再起動する必要があります。

したがって、これらの2010-1、2010-2、...、2011-1、2011-2、...のようなキー、およびできればこれらのキーは、表示、印刷、および検索にも使用する必要があります。

自動インクリメントが機能するとは思いませんが、毎年リセットされるため、自分でインクリメントする必要があると思いますね。

または、varchar列を作成して各キーを自分で作成し、その列に一意の列を配置する必要がありますか?

だから、私のオプションは何ですか?

また、選択したデザインで発生する可能性のある将来のデザインの問題と、クエリのしやすさも考慮に入れてください。

アップデート:

私は実際に、アプリケーションにキーを作成させ、挿入時にそれを提供させることを検討し始めています。ただし、最後に発行されたIDをDBで調べる必要があるため、大量の使用で問題が発生する可能性があります。

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

nhibernate - NHibernate を使用した複合キー/ID マッピング

データベースに次のテーブルがあります。

通常、多対多の関係を使用して「AnnouncementsRead」をマップしますが、このテーブルには追加の「DateRead」フィールドもあります。

これまでのところ、次のエンティティを定義しました。

次のマッピングを使用します。

ただし、これを実行すると、次のエラーが表示されます。

誰かが私を正しい方向に向けることができれば幸いです。ありがとう

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

validation - 複合一意インデックスの検証ルール(非プライマリ)

テーブルに複合一意キーを持ち、それらを検証したいのは私が最初ではないと確信しています。自転車を発明したくないので、まずはここでお願いします。'id'列を主キーとして、他の2つの列を一意の複合キーとして持つテーブルがいくつかあります。送信されたエントリが一意であることを確認し、一意でない場合は検証エラーを表示する検証ルールがあると便利です。Cakephpでは、カスタム検証ルールで実行できます。誰かがすでにそのようなメソッドを作成していると確信しています。

理想的には、さまざまなモデルで使用できるapp_model.phpのメソッドになります。