問題タブ [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.
mysql - データベース設計:複合キーと1列の主キー
私が取り組んでいるWebアプリケーションで、予期しない「バグ」が発生しました-アプリのデータベースには、「States」と「Cities」という2つのテーブルがあります(他にも多数あります)。
'状態'テーブルフィールド:
' idStates 'は、自動インクリメントの主キーです。
'都市'テーブルフィールド:
' idAreaCode 'は、国コード+市外局番で構成される主キーです(たとえば、91422はインドの国コード、422はインドの都市の市外局番です)。' idStates 'は、' States 'テーブルから派生した外部キーであり、' Cities 'テーブル内の各都市を対応するStateに関連付けます。
国コードと市外局番の組み合わせは都市ごとに一意であるため、主キーとして安全に使用できると考えました。すべてが機能していました。しかし、インドのある場所では、データベース設計に予期しない「欠陥」が見つかりました。米国のように、インドは連邦民主主義であり、地理的に多くの州または連邦直轄領に分割されています。州と連邦直轄領の両方のデータが「州」テーブルに保存されます。ただし、 2つの州(ハリヤーナ州とパンジャブ州)に属し、それ自体が連邦直轄領でもある1つの場所(チャンディーガル)があります。
明らかに、現在のデータベース設計では、都市「チャンディーガル」の複数のレコードを保存することはできません。
提案された解決策の1つは、列' idAreaCode 'と' idStates 'を組み合わせた主キーを作成することです。
これが可能な最善の解決策であるかどうか知りたいですか?
(参考:InnoDBエンジンでMySQLを使用しています)。
詳しくは:
- データベースには、各都市の気象情報が格納されています。したがって、州と市は各クエリの開始点です。
- 各都市の最新データは、CSVファイルを使用して毎日挿入されます。CSVファイルには、各レコードを識別するために使用されるidStates(州の場合)およびidAreaCode(都市の場合)列が含まれています。
- データベースの正規化は私たちにとって重要です。
注:都市テーブルに自動インクリメントの主キーを使用しない理由は、データベースがCSVファイル(別のアプリによって生成されたもの)を使用して毎日/毎時更新されるためです。また、CSVファイルの各レコードは、idStates列とidAreaCode列で識別されます。したがって、都市テーブルで使用される主キーは、テーブルが削除されて再度更新された場合でも、すべての都市で同じであることが望ましいです。郵便番号(またはPINコード)と市外局番(またはSTDコード)は、一意で静的(頻繁に変更しない)であるという基準を満たし、これらのリストを簡単に入手できます。(インドはPINコードを新しい形式に更新中であるため、今のところ市外局番を決定しました)。
私たちが決定した解決策は、データベース設計に変更を加えるのではなく、アプリケーションレベルでこれを処理することでした。データベースには、「チャンディーガル」のレコードを1つだけ保存します。このアプリケーションでは、検索をこのレコードにリダイレクトするために、「Chandigarh、Punjab」または「Chandigarh、Haryana」の検索用のフラグを作成しました。ええ、それは理想的ではありませんが、これが私たちがこれまでに遭遇した唯一の例外であるため、許容できる妥協案です。
sql - Postgres:複合キーを行うには?
複合キーを作成する際の構文エラーがわかりません。私は多くの品種をテストしたので、論理エラーかもしれません.
Postgres で複合キーを作成するにはどうすればよいですか?
nhibernate - nHibernate 複合キー クラス タイプの不一致
このテーブルには他の属性が含まれているため、他の3つのテーブルにマップされた複合キーを持つレガシーテーブルがあります。これは単純なマッピングテーブルではないため、多対多セットソリューションを使用してこれをマップすることはできません.
以下は私がやったことです:
AKey は 3 つの ID を保持する単なる構造体であり、Id_one、Id_two、および Id_three はすべて、それぞれのクラスで int として定義されています。
これは正常にコンパイルされますが、実行しようとするとエラー メッセージが表示されます。
NHibernate.QueryException : NHibernate.Criterion.SimpleExpression の型の不一致: ID は AKey 型、実際の型は System.Int32 と予想されます
私が間違ったことや見逃したことについてアドバイスしてください。
本当にありがとう!
sql - 自己参照テーブルの複合キー
以下に定義されているサイト テーブルの複合主キーがあります。機能的には、これは私たちが望んでいるものとまったく同じです。各サイトには、同じ地区の親サイトが必要です。このようにテーブルを定義すると、特にそれが可能になります。
私の具体的な質問は、複合 PK で定義された自己参照 FK に関するものです。この特定のデザインについていくつかの意見を聞いたことがありますが、それらは相反する傾向があります。複合キーの一般的な理解の範囲内で機能するため、特に気に入っている人もいます。他の人は、それは理論的に正しくなく、[district_id] の代わりに [partner_district_id] フィールドを FK に含める必要があると主張しています。この設計では、[district_id] = [partner_district_id] を適用するための検証が必要になります。これは、チェック制約またはアプリケーション レベルのロジックで行うことができます。
これらのソリューションまたはその他のソリューションに関するさらなる意見をお待ちしております。
mysql - MySQLの複合主キーパフォーマンスの欠点
3つのフィールドで構成される複合主キーを持つテーブルがあります(MySQL 5.1にあります)。このテーブルには1秒あたり200近くの挿入と200の選択があり、テーブルのサイズは約100万行であり、増加しています。
私の質問は、「複合主キー」はこのテーブルの挿入と選択のパフォーマンスを低下させますか?
複合主キーの代わりに、単純な自動増加INT IDフィールドを使用する必要がありますか?(答えは、MySQLが複数の列のインデックスを処理する方法に非常に関連していると思います)
.net - キーの半分がデータベースのIDフィールドである、流暢なnhibernateで複合キーをマッピングすることは可能ですか?
質問が述べているように、コンポジットで使用される2つのフィールドの1つがIDフィールドである場合、流暢なnhibernate(または非流暢だと思います)でコンポジットキーをマッピングすることは可能ですか?
主キーの一部がIDフィールドで、もう一方がテナントIDであるテーブルがあります。これは、複合キーが全体で外部キーとして使用されるレガシーデータベースであるため、データベースの変更は非常に重要です。
ありがとう!
c# - プロパティのペアに対して同じ値を持つアイテムがコレクション内にあるかどうかを判断するLinq操作はありますか?
C#: オブジェクトのコレクションがあります。T には 2 つのプロパティがあります。プロパティ A とプロパティ B。このコレクションが準拠する必要がある規則は、A と B の値の組み合わせがコレクション内で一意でなければならないということです。つまり、A と B は複合主キーとして機能する必要があります。
この状態を確認するために使用できる Linq の操作はありますか? 私はそれが次のようなものになると予想します
上記のステートメントは、コレクション内に重複する名前を持つアイテムがあるかどうかを確認する方法ですが、複数のプロパティに対してそれを行う方法がわかりません。
sql - 複合キーに対する外部キーとしての代理キー
同様の質問があるかもしれませんが、ガイダンスに十分近いものを見つけることができませんでした.
このスペックを考えると、
私の提案する設計/実装は
これで何か問題がありますか?ここで SeriesID サロゲートを外部 * キーとして使用しても問題ありませんか? 発生する可能性のある明らかな問題を見逃しているかどうかはわかりません。それとも、複合自然キー (SiteID+SeriesCode / SiteID+EpisodeCode) を使用した方がよいでしょうか? 本質的に、それはエピソード テーブルをシリーズ テーブルから分離することになり、私には合いません。
追加する価値があるのは、これらのテーブルに入力される生の入力データでは、SeriesCode が「ABCD-1」のように見え、EpisodeCode が「ABCD-1NMO9」のように見えることです。
*: 「仮想」外部キー。上層部によって事前に決定されているため、実際の外部キーは使用しないでください。
inheritance - 継承された複合IDから複合IDをマッピングするFluentNHibernate
次の3つのテーブルを持つ既存のデータベースがあるとします。
表1:
(PK)T1ID1
(PK)T1ID2
表2 :
(PK)T2ID1
表3:
(FK)T1ID1
(FK)T1ID2
(FK)T2ID1(3つのキーは上の表からのものです)
私の質問は、Table3をFluent NHibernateでマッピングするにはどうすればよいですか?
私が混乱しているのは、その複合キーが2つの異なるテーブルからのものであるという事実をどうするかです。
表1と表2のマッピングには次のものがあります。
tsql - 2つの整数の複合キーから一意の整数キーを作成する簡単な方法はありますか?
質問にあまり関係のないさまざまな理由で、2つの整数で構成された複合キーを含むテーブルがあり、これら2つの数値から単一の一意キーを作成したいと思います。私の最初の考えはそれらを連結することでしたが、(51,1)の複合キーが(5,11)と同じ一意のキー、つまり511になることに気付いたとき、すぐに問題に遭遇しました。
生成された整数が開始整数のペアに一意になるように、2つの整数から整数を生成する賢い方法はありますか?
編集:印象的な量の数学に直面した後、私が含めるべき詳細の1つは、問題のキーのサイズであることに気付きました。元のペアでは、最初のキーは現在6桁であり、システムの存続期間中はおそらく7桁のままになります。2番目のキーはまだ20を超えていません。これらの制約を考えると、問題はそれほど困難ではないように見えます。