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

0 投票する
19 に答える
75939 参照

database - サロゲート キーと自然/ビジネス キーの比較

繰り返しますが、古い議論がまだ発生しています...

ビジネス キーをプライマリ キーとして使用する方がよいでしょうか。それとも、ビジネス キー フィールドに一意の制約があるサロゲート ID (つまり、SQL Server の ID) を使用する方がよいでしょうか。

あなたの理論を裏付ける例または証拠を提供してください。

0 投票する
7 に答える
3628 参照

sql - 主キーとしてのintからGUIDへの移行

整数の主キーを持ついくつかの参照テーブルを使用します。ここで、intをGUIDに変更して、すべての参照をそのままにします。それを行う最も簡単な方法は何ですか?

ありがとうございました!

添加

私は一般的なプロセスを理解しているので、新しいGUID列に入力する方法など、より詳細なアドバイスが必要です。デフォルト値のnewid()を使用するのは正しいですが、既存の行はどうでしょうか。

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

mysql - 主キーと挿入に関する簡単なmysqlの質問

mysql では、自動インクリメントの場合、挿入操作に使用される主キーを取得するにはどうすればよいですか。

基本的に、ステートメントが完了すると、新しい自動インクリメント値が返されるようにします。

ありがとう!

0 投票する
11 に答える
4480 参照

database-design - 専用の主キー フィールドが必要ですか?

Web アプリケーションで使用する小さな SQL データベースを設計しています。

特定のテーブルに、2 つの行が同じ値を持つことを許可されない Name フィールドがあるとします。ただし、ユーザーはいつでも [名前] フィールドを変更できます。

このテーブルの主キーは、他のテーブルで外部キーとして使用されます。そのため、Name フィールドが主キーとして使用された場合、すべての変更を他のテーブルに伝達する必要があります。一方、一意性要件は自動的に処理されます。

私の本能は、データベースによって自動的に入力される主キーとして機能する整数フィールドを追加することです。このフィールドを持つことに意味はありますか、それとも時間の無駄でしょうか?

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

insert - 解像度をダブルクリックしてダブル挿入しますか?

チーム メンバーが古い社内システムで問題に遭遇しました。ユーザーが Web ページのリンクをダブルクリックすると、ブラウザーから 2 つの要求が送信され、レースで同じレコードが 2 つのデータベースに挿入される可能性があります。調子; 最後に実行したものは主キー違反で失敗します。いくつかのソリューションとハックが提案され、議論されています。

  1. Web ページで Javascript を使用して、最初のクリックでリンクを無効にすることにより、2 回目のクリックを軽減します。これは、問題の発生を減らすための迅速かつ簡単な方法ですが、完全になくすことはできません。

  2. サーバー側でのリクエスト実行をトランザクションにラップします。これは、サーバーの負荷と問題のテーブルのロック レベルが原因で、操作のコストが高すぎると見なされています。

  3. 失敗した挿入によってスローされた主キー例外をキャッチし、それを識別して食べます。これには、(a) ベンダー ロックイン、データベース固有の例外のニュアンスを知る必要がある、(b) 正当なデータベース障害のログ記録/対処ができない可能性があるという欠点があります。

  4. 挿入が失敗した場合にレコードの更新を試行し、更新の結果をチェックして、影響を受ける 1 つのレコードが返されるようにする #3 の拡張。

考慮されていない他のオプションはありますか?見落とされていた提示されたオプションの長所と短所はありますか? すべての悪の中でどれが小さいですか?

0 投票する
8 に答える
33162 参照

database - 標準GUIDに対するシーケンシャルGUIDのパフォーマンスの向上は何ですか?

データベース内でプライマリキーとして使用されたときに、誰かがシーケンシャルGUIDと標準GUIDのパフォーマンスを測定したことがありますか?


一意のキーが推測可能かどうかはわかりません。WebUIまたは他の部分からそれらを渡すこと自体は悪い習慣のようです。セキュリティ上の懸念がある場合は、GUIDの使用がどのように改善されるかわかりません。物事(これが問題である場合は、フレームワークの適切な暗号化機能を使用して実際の乱数ジェネレーターを使用してください)。
他の項目は私のアプローチでカバーされています。シーケンシャルGUIDは、DBアクセスを必要とせずにコードから生成でき(Windowsの場合のみ)、時間と空間がユニークです。
そして、はい、質問はそれに答えることを目的として提起されました。PKにGuidを選択した人々に、データベースの使用を改善する方法を提供するためです(私の場合、顧客はサーバーを変更することなく、はるかに高いワークロードを維持できます)。

セキュリティ上の懸念は非常に大きいようです。この場合、Sequential Guidを使用しないか、UIから前後に渡されるPK用の標準Guidと、その他すべてのシーケンシャルGUIDを使用してください。いつも絶対的な真実はないので、これを反映するためにメインアンサーも編集しました。

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

java - シーケンス生成の主キーの適切なサイズは?

現在、システムの主キーの長さは 10 桁で、Java 整数の制限をわずかに超えています。これらのキーの数値オーバーフローによって引き起こされる今後のメンテナンスの問題を回避したいのですが、同時に、必要のない無限大の数値を格納するためにシステム パフォーマンスを大幅に犠牲にしたくありません。

主キーのサイズをどのように管理していますか? より大きな Long よりもパフォーマンス上の利点があり、必要に応じてサイズを大きくするために、Java 整数に固執する方がよいでしょうか。シーケンスサイズ?

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

c# - 新しいエントリの主キーを取得する

親テーブルへの外部キーを持つ子テーブルがいくつかあります。

親テーブルにエントリを追加し、そのエントリの主キーを取得して、親テーブルのエントリを指す子テーブルに行を入力するにはどうすればよいですか?

私は C# アプリケーションから MS Access データベースでこれを行っています。

0 投票する
13 に答える
18656 参照

sql - INSERT ステートメントの後の @@IDENTITY は常に 0 を返します

データベースで INSERT ステートメントを実行し、Auto_Increment 主キーを返す関数が必要です。私は次の C# コードを持っていますが、INSERT ステートメントは正常に動作しますが (データベース内のレコードを確認でき、PK は正しく生成され、行 == 1)、id 値は常に 0 です。違う?

答えに応じて、私は試しました:

しかし、「SQLステートメントの終了後に文字が見つかりました」というエラーが表示されます

OleDb 接続で MS Access データベースを使用しています。Provider=Microsoft.Jet.OLEDB.4.0

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

database - 巨大な (20 桁) 主キーと SQLite

20 桁の主キーを持つデータを SQLite データベースに挿入しようとすると、「一意ではない」ため、2 番目の挿入ステートメントでエラーが発生します。値を選択すると、SQLite コマンド プロンプトから、主キーが科学表記法で記述されていることがわかります。列のタイプは 10 進数です。値が長い場合でも、精度/「通常の表現」を維持して、SQLiteに値を「そのまま」挿入させる方法はありますか?