問題タブ [compound-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.
jpa - JPA - 多対多テーブルでの複合キーと生成された ID
私は一種のソーシャル ネットワークを作成しており、他のユーザーをフォローできるユーザーがいます。だから私は次のようなエンティティを持っています:
FollowedUser エンティティに複数のフィールドがあるため、ManyToMany 関係を持つことはできません。今、私が持っている質問は次のとおりです。
- 複合キーまたは生成された ID (代理キー) を使用する必要がありますか? 代理キーが提案されているトピックに関する次のリンク ( 1、2、3 ) を読みましたが、具体的なケース (複合キーが 2 つの代理外部キーで構成される場合) に適用されるかどうかはわかりません。 . また、ここ( 4 )には、「複合主キーは通常、レガシーデータベースからマッピングするときに発生する」と書かれているため、推奨されていないと思います。
- 複合キーを使用する必要がある場合、 @IdClass (ここで推奨5 ) または @EmbeddedId (ここで推奨6 ) またはその他のオプションを使用する必要があるかどうかわかりません。私はそれが問題ではないと思いますが。
- 代理キーを使用する必要がある場合、複合候補キーを繰り返さないようにする方法がわかりません。ここ ( 7 ) で一意のインデックスについて読みましたが、それがその問題の正しい回避策であるかどうかはわかりません。
mysql - MySQL 複合主キーの問題
複合主キーを使用するテーブルに問題があります。キーは、日付とそれに続く bigint で構成されます。
PK からフィールドのみを選択し、両方の列を含む where 句を使用している場合でも、テーブルの選択はスキャンしているように見えます。例えば
考慮される行の場所と数が数百万であることを使用して、select ショーを説明します。
奇妙な点の 1 つは、key_len が 7 と表示されていることです。これは小さすぎるようです。
私の本能は鍵が壊れていると言っていますが、明らかな何かを見落としている可能性があります。
何かご意見は?
ありがとうございました
リチャード
java - 外部キーと列挙型を持つ JPA 複合キー
こんにちは、みんな、
レガシーデータベースからすべての jpa エンティティを構築しようとしています。繰り返し発生する問題があります。一部の「メイン」エンティティには「翻訳」のコレクションがあり、主キーは「メイン」のキー + 「言語」識別子です。言語は、処理を容易にするためにデータベースと Enum に格納されます。
使用している JPA 実装は Hibernate 4 です。
以下、現在の実装:
メイン: (メッセージ)
翻訳: (MessageDesc)
翻訳複合キー: (MessageDescPK)
言語: (LanguageEnum)
問題は、説明にいくつかの翻訳があり、言語とメッセージが設定されている翻訳を含むメイン (メッセージ) エンティティを永続化しようとすると、次の例外が発生し続けることです。
messageDesc インスタンスに言語とメッセージ (既に保持されている) の両方を設定した後、PK が null になる理由がわかりません。ヘルプ、コメント、手がかりをいただければ幸いです。
ありがとう!
sql-server - SQL Server : データベース設計 - 複合主キー
SQL Server のテーブル リレーションシップを実装する方法について、あなたの提案が必要です。
私には多くの顧客がいて、それぞれが一意の ID を持っています (
customerID
)各顧客には多くのカテゴリを関連付けることができます (
categoryID
)各顧客は、次のサブカテゴリ (
subCategoryID
) を持つことができます。顧客がログインするとき、私はその
CustomerID
、CategoryID
およびを知っていSubCategoryID
ます。顧客は、今後 1 年間の毎週の勤務時間を事前に計画します (2014 年 12 月では、2015 年の 52 週間を計画しています)。
顧客は毎日、仕事をしたか休みを取ったかを報告します。
WeeklyPlanning
列で呼び出されるテーブルを持つことを考えました:
DailyWorkingHours
および列で呼び出される別のテーブル:
私の質問:
これら 2 つのテーブルを結合する方法がわかりません。複合キーを使用しますか? ( ) または、 で FK として使用されるCustomerID, CategoryID, SubCategoryID, Year, WeekNumber
固有の PK を生成しますか?WeeklyPlanning
DailyWorkingHours
これを実装する最良の方法を探しています。
ありがとう
java - 複合 ID を持つテーブルへの休止状態の OneToMany 関係に注釈を付けるにはどうすればよいですか?
宛先テーブルに複合 ID がある 2 つのテーブル間に OneToMany 関係を作成しようとしています。複合 ID の 1 つの列にキーを設定したいのですが、わかりません。テーブルの例:
EXCHANGE_RATE テーブルには、特定の CURRENCY_ID を持つ複数の行がありますが、CURRENCY_ID と YEAR の組み合わせは常に一意です。そこで、CURRENCY_ID と YEAR を含む EXCHANGE_RATE に複合 ID を定義しました。
ただし、PRICE テーブルの fk CURRENCY_ID は、EXCHANGE_RATE テーブルの CURRENCY_ID 列にのみマップされます。PRICE オブジェクトを EXCHANGE_RATE オブジェクトにマップするために考えられるすべてのことを試しましたが、うまくいきません。Price.java クラスの注釈の例を次に示します。
次の注釈も試しました。
referencedColumnName: を除外します。
ID_ を前に付けた referencedColumnName の使用:
ID で referencedColumnName を使用します。先頭に追加:
これを機能させる方法を知っている人はいますか?前もって感謝します。
sql-server - ジャンクション テーブルでは、主キーと一意の制約を使用する必要がありますか、それとも複合キーまたは複合キーを使用する必要がありますか?
私は、これを重複した質問にするように思われるもののいくつかを読みました。しかし、これらすべてを読んで、私は不安になりました。多くの質問/回答が議論に発展するため、以下の絶対的な例に基づいて回答を得たいと考えています。
私が持っている場合:
ここで、単純なジャンクション テーブルには 2 つの選択肢があります。
上記は、両方の FK の複合/複合キーであり、両方の列の FK 関係を設定します - 削除時にカスケードも使用します。
また
BookID と AuthorID の外部キー関係、および削除時のカスケード。また、BookID と AuthorID に一意の制約を設定します。
上記の特定の例で、ある方法が別の方法よりも優れている理由についての簡単な答えを探しています。私が読んでいる回答は非常に詳細であり、複合キーに落ち着こうとしていたのですが、最初の例のように Identity 列を使用した例のビデオを見ました。
このトピックは少し半分に引き裂かれているように見えますが、私の直感は、複合キーを使用する必要があることを示しています。
クエリを効率的に行うにはどうすればよいですか? 2つの列に一意の制約を設定するとともに、PK ID列を持つようです.AND FK関係は、たとえ少しでもコストがかかります.