問題タブ [surrogate-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 投票する
1 に答える
1076 参照

mysql - テーブルの代理キーをMySqlの自然キーで改造しますか?

自然キーを使用し、既存の行が多数あるテーブルを想定します。MySql を使用して代理キー列を改良し、一意の値を入力する最も簡単な方法は何でしょうか?

すなわち変換

新しい id 列に有効な id:s を入力します。

ありがとう/エリック

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

entity-framework - Entity Framework の代理キーとの多対多の関係

Entity Framework は、魔法のように次のテーブル構造を多対多の関係として解釈します。

ただし、結合テーブルに追加のフィールドがある場合は、代わりに 2 つの 1 対多の関係として解釈されます。

結合テーブルが主キーとして代理キーを持つデータベースを使用しています。このため、EF はそれを 2 つの一対多の関係として解釈します。

EF:s の解釈を変更して、モデル内で実際の多対多の関係にすることは可能ですか? デザイナーを使用して行うことはできますか?

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

algorithm - 一意の代理キー割り当ての保証 - 非二部グラフの最大マッチング

マージする必要があるエンティティのクラスに関する複数のデータ ソースを持つデータ ウェアハウスを維持しています。各ソースには自然キーがあり、自然キーごとに常に 1 つだけの代理キーが作成されることが想定されています。特定の自然キーを持つ 1 つのソース システムからの 1 つのレコードが、別の自然キーを持つ別のソース システムからの別のレコードと同じエンティティを表す場合、同じ代理キーが両方に割り当てられます。

つまり、ソース システム A に、ソース システム B の自然キー DEF と同じエンティティを表す自然キー ABC がある場合、両方に同じ代理キーを割り当てます。テーブルは次のようになります。

それが計画でした。ただし、このシステムはしばらく本番環境にあり、代理キーの割り当てがめちゃくちゃです。ソース・システム A は、ある日、ソース・システム B がそれを知る前に、ナチュラル・キー ABC を与えます。DW はそれに代理キー 1 を割り当てました。次に、ソース システム B は、ソース システム A の自然キー ABC と同じものを表す自然キー DEF を与え始めました。DW は、このコンボ サロゲート キー 2 を誤って指定しました。テーブルは次のようになります。

だから倉庫がぐちゃぐちゃ。これよりもはるかに複雑な状況があります。クリーンアップのための短いタイムラインがあり、サロゲート キーから自然キーへのマッピングのクリーンなセットを見つけ出す必要があります。

少しグーグルで調べてみると、これは非二部グラフのマッチング問題としてモデル化できることがわかります。

ウィキペディア - マッチング

MIT 18.433 組み合わせ最適化 - 非二部マッチングに関する講義ノート

Edmond のパス、ツリー、および花のアルゴリズムの (最適なパフォーマンスではない) 理解しやすい実装が必要です。私は正式な数学やコンピュータ サイエンスのバックグラウンドを持っていません。私が持っているのは独学であり、今夜は数学のヘッドスペースにはいません。誰でも助けることができますか?実装に私を導くよく書かれた説明は、深く感謝されます.

編集:

グローバルな適合度を最大化したいので、数学的なアプローチが最適です。貪欲なアプローチ (最初に A のすべてのインスタンスを取得し、次に B、次に C...) を使用すると、局所的な最大値のコーナーに追い込まれます。

いずれにせよ、私はこれをビジネス アナリストに手動で行うようにプッシュしました (2,000 万人全員)。私は、グローバルな試合の質を評価する機能で彼ら​​を支援しています。とにかくサインオフするのは彼らなので、これは理想的です。

代理キーを使用しなくても、一致の問題は変わりません。発見して維持する必要がある 1:1 の自然キー マッピングがまだあります。代理キーはそのための便利なアンカーであり、それ以上のものではありません。

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

php - 「id」または「一意のユーザー名」を使用する必要がありますか?

PHP、AS3、および mysql を使用しています。

私はウェブサイトを持っています。フラッシュ (as3) Web サイト。フラッシュ Web サイトは、メンバーの情報を php を介して mysql データベースに保存します。「メンバー」テーブルには、主キーとして「id」、一意のフィールドとして「ユーザー名」があります。

今私の状況は次のとおりです。フラッシュがメンバーのプロフィールを表示したいとき。私の質問:

  1. mysql クエリを処理するために、Flash はメンバーの「ID」または「ユーザー名」を php に渡す必要がありますか?

  2. 「ID」または「ユーザー名」を渡す違いはありますか?

  3. どちらがより安全ですか?

  4. どれをお勧めしますか?

セキュリティとパフォーマンスの観点から Web サイトを最適化したいと考えています。

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

django - Django ManyToManyFieldアソシエーションテーブルには代理キーが必要ですか?

既存のデータベース構造をDjangoモデルにマッピングしています。私は多対多の構造を持っており、関連テーブルは自然キーです。

DjangoのORMにこれをマッピングさせる方法はありませんか?代理キーを使用するには、foo2barを変更する必要がありますか?例えば

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

sql - 複合キーに対する外部キーとしての代理キー

同様の質問があるかもしれませんが、ガイダンスに十分近いものを見つけることができませんでした.

このスペックを考えると、

私の提案する設計/実装は

これで何か問題がありますか?ここで SeriesID サロゲートを外部 * キーとして使用しても問題ありませんか? 発生する可能性のある明らかな問題を見逃しているかどうかはわかりません。それとも、複合自然キー (SiteID+SeriesCode / SiteID+EpisodeCode) を使用した方がよいでしょうか? 本質的に、それはエピソード テーブルをシリーズ テーブルから分離することになり、私には合いません。

追加する価値があるのは、これらのテーブルに入力される生の入力データでは、SeriesCode が「ABCD-1」のように見え、EpisodeCode が「ABCD-1NMO9」のように見えることです。

*: 「仮想」外部キー。上層部によって事前に決定されているため、実際の外部キーは使用しないでください。

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

database - リモートで代理キーを生成する

この質問は他の質問と似ていますが(同じではありません!)、事前に申し訳ありません。

とにかく、後で同期するために、複数の場所で代理キーを生成できる必要があります。GUIDの使用を検討していましたが、これらのキーはURLのパラメーターに表示される必要があり、GUIDは非常に複雑で見苦しいものになります。

整数を使用してデータベースのパフォーマンスを向上させるスキームを検討していましたが、明らかに自動数値を使用することはできません。アイデアは、2つの意味を持つキーを使用することです-私がそれが呼ばれていると信じている高低戦略。キーは、ソース(生成された場所、このビジネスケースでは通常2つの場所のうちの1つ)と自動インクリメントされた値で構成されます。例えば:

1-000000567、1-000000568、1-000000569、1-000000570、..。

そして別の情報源のために:

2-000000567、2-000000567、..。

これは、それらを整数としてデータベースに格納できることも意味します(つまり、「2-000000567」は整数「2000000567」になります)。

誰かがこれに関する問題を見ることができますか?発生する可能性のあるインデックス作成断片化など?それとも、それを行うためのより良い方法ですか?

確認のために、このキーにはビジネス上の意味はありません。ユーザーはこのキーを表示したり(URLのパラメーターを除いて)使用したりすることはありません。

私はあなたの意見を楽しみにして、あなたの時間を感謝します、百万に感謝します:)

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

types - 代理キーのデータ型番号とVarcharを推奨

代理キー(numberまたはvarchar2)に最適なデータ型を教えてください。代理キーは数値タイプで最適に機能することを読みました。しかし、パフォーマンスはデータ型に深刻な影響を及ぼしますか。そしてそれはデータベースにも依存していますか?

返信をいただければ幸いです。

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

sql - 代理キーの場合は別のテーブル?

Stack Overflowや他のWebサイトで、コンポジットキーとサロゲートキーに関する白熱した議論を読んでいます。与えられた議論のいくつかに戸惑いましたが、それぞれの長所と短所を認識していると感じています。

代理キーを探したくなりますが、別の質問があります。私の状況を説明させてください。一意の組み合わせを構成する5つの整数で構成されるテーブルがあり、このエンティティを参照するテーブルがいくつかあります。現在、すべてのテーブルには5つのフィールドすべてが含まれており、すべてのJOIN操作では5つのフィールドすべてを結合基準として指定する必要があります。これで、代理キーを追加しました。しかし、「メイン」テーブルを参照する代理外部キーを優先して、すべてのテーブルから5つのフィールドすべてを削除する必要がありますか?

他の表では、5つのフィールドのそれぞれが選択基準として頻繁に使用されるため、これを行うことに不安を感じています。選択操作が高速に実行されるように、特定の自然な順序でインデックスが定義されています。5つのフィールドすべてを別のテーブルに移行する場合、最初の3つを選択する場合は、JOINを定義してそこから選択する必要がありますが、インデックスは定義されていません。そのJOINは生成されたばかりなので、パフォーマンスが低下します。

または、5つのキーを含む各テーブルのVIEWを何らかの方法で定義し、そのインデックスを作成する必要がありますか?

私は混乱していると感じ、これらすべてを入力した後、再び自然キーを使い続ける傾向がありました。ヘルプ?

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

database - 既存のOracleDBテーブルに代理キーを追加するための推奨される方法

代理自動番号キーを追加するには、数千のレコードを持つOracle10gDBの既存のテーブルを変更する必要があります。私の頭に浮かぶ1つの方法は

  1. 新しいシーケンスを作成する
  2. ID列を作成し、null値を許可します
  3. シーケンスでid列を更新する
  4. テーブルを変更して、新しいID列に「notnull」と「primarykey」を追加します

これを行うためのより簡単またはより効率的な方法はありますか(またはこれが機能しない理由がありますか)?