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

sql-server - SQL Server の一意の識別子 ID 列のクラスター化された主キー

テーブルの ID 列が一意の識別子 (Guid) である場合、ID 列にクラスター化された主キーを作成する意味はありますか?

それらがグローバルに一意であることを考えると、並べ替えはどのように機能しますか?

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

sql-server - GUID と自動インクリメント整数の両方を使用する

データベースの主キーとしての GUID の使用を調査してきました。これまでのところ、長所が短所を上回っているようです。ただし、GUID が必要なものではない可能性がある点が 1 つあります。

私のアプリケーションでは、ユーザーはわかりやすい ID に基づいてオブジェクトを識別できる必要があります。したがって、たとえば、フルネームを入力せずに特定の製品を入手したい場合は、製品の ID を使用できます。そのような場合、GUID を覚えるのは簡単ではありません。

私が考えてきた解決策は、GUID と自動インクリメント整数の両方を使用することです。GUID は行の主キーになり、自動インクリメント整数はアプリケーションのフィルタリング関数で使用されるインデックスになります。ただし、すべての SQL SELECT、UPDATE、DELETE ステートメントは GUID を使用します。

GUID を使用する主な理由は、2 つのデータベースをマージする際の衝突を防ぐためです。データベース #1 とデータベース #2 の両方に製品 #2 がある場合、インポーター スクリプトは ID とそれを参照するすべての外部キーを変更する必要があります。GUID を使用すると、テーブル自体のわかりやすい ID を変更するだけで済みますが、外部キーはインポートされた各レコードに固有の GUID を使用するため、変更しなくても機能します。

それで、私の質問は次のとおりです。自動インクリメント整数インデックスと GUID プライマリ キーを持つことで、(GUID フィールドのサイズと簡単なページの断片化以外に) 大きな問題はありますか?

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

entity-framework - Entity Framework と文字列キー間の関連付け

私はEntity Frameworkが初めてで、そのためのORMがあります。私が関与しているプロジェクトには、すべてのキーが文字列であり、大文字と小文字が区別されないレガシー データベースがあります。

MSSQL に変換中で、EF を ORM として使用したいのですが、問題が発生しました。

以下は、私たちの問題を示す例です。

TableA にはプライマリ文字列キーがあり、TableB にはこのプライマリ キーへの参照があります。

LINQ では、次のように記述します。

TableA に "A" を読み取る主キーが含まれており、TableB に TableA を参照する 2 つの行が含まれているが、参照フィールドの大文字と小文字が異なる "a" と "A" の場合。

私たちのプロジェクトでは、両方の行が結果に含まれるようにしたいのですが、大文字と小文字が一致する行のみが結果に含まれます。

SQL プロファイラーを使用して、両方の行が選択されていることに気付きました。

キーが大文字と小文字を区別しないことを Entity Framework に伝える方法はありますか?

編集:
これを NHibernate でテストしたところ、NHibernate は大文字と小文字を区別しないキーで動作するという結論に達しました。したがって、NHibernate の方が適している可能性があります。
ただし、Entity Framework の動作を変更する方法があるかどうかを知りたいと思っています。


ご回答有難うございます!

問題は、その制約を今データベースに追加すると、その構築方法が原因でレガシー アプリケーションが動作しなくなる可能性があることです。可能であれば、EF の動作を変更することをお勧めします。無理だとは思いますが、頑張ってみます。


よろしく、
フレドリック

編集:自分の質問に回答を追加した理由は、登録ユーザーになる前にこの質問を追加したためです。アカウントを登録すると、コメントを追加したり、投稿を編集したりできませんでした。これでアカウントが統合されました。

0 投票する
6 に答える
4316 参照

mysql - Rails ActiveRecord 移行を使用して主キーを MySQL データベースに挿入するにはどうすればよいですか?

画像ファイルのテーブルの AR 移行を作成する必要があります。画像はソース ツリーにチェックインされており、attachment_fu ファイルのように動作するはずです。そういうわけで、/public/system の下にそれらの階層を作成しています。

attachment_fu がリンクを生成する方法のため、ディレクトリの命名規則を使用して主キーの値を挿入する必要があります。次のようなことができるように、MySQL と Rails マジックの自動インクリメントをオーバーライドするにはどうすればよいですか。

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

hibernate - 休止状態、識別子/主キーの変更

で自分を変更しようとすると、次の例外が発生し@IDます@Entity

テーブルの主キーを変更していることはわかっています。JPAアノテーションを使用しています。

この単一のHQLクエリを使用してこれを解決しました:update Table set name=:newName where name=:oldName

よりOOのアプローチを使用する代わりに:

差分が何であるかについて何か考えはありますか?

0 投票する
9 に答える
309683 参照

sqlite - 複数の列の Sqlite 主キー

SQLITE で複数の列に主キーを指定する構文は何ですか?

0 投票する
6 に答える
544 参照

database-design - データベースの主キー -> ID フィールドと名前フィールド?

私のすべてのテーブルには、Id何らかのタイプのフィールドがあります(UserId, PostId, FooIdなど)。私は通常、これをPrimary Keyにします。

私が持っているテーブルは と呼ばれていCountriesます。それは持っています

今、私はNameが一意でなければならないことを知っています。すべての国名は一意です。PrimaryKey==CountryId ASC _ Name ASC_

それが良い場合、誰かが単にIdPK であるよりも優れている理由を説明できますか? データの整合性を保証するだけですか(たとえば、テーブルに2つの国名が存在しません)。それが悪いなら..なぜですか?

よろしくお願いします。

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

c# - 主キーをリセット

これをオンラインで行うための答えを見つけようとしましたが、明らかにそれはできません(データベースではなくアプリレベルで意味します)。データセットを完全に消去し、同時に主キーをリセットする必要があります。何か案は?

別の方法として、データセットを再初期化することもできますが、アプリ内の異なるクラス間でデータセットが共有されているため、これも可能ではないようです (Program.cs で共有データセットを作成しています)。

ありがとう

ファルーク

アップデート:

わかりました私はこれを試しました:

MyDataSet sharedDS = new MyDataSet();

. . .

CleanDS()

{

}

元の問題は解決しましたが、System.ArgumentException for Column1 が Table1 に属していないため、DataSet ビューアーで列を表示したり、入力された行を表示したりできます。また、DataSet 全体を手動で再作成しても、同じエラーが発生することに注意してください。何か案は?

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

sqlite - Sqlite3:挿入中に主キーインデックスを無効にしますか?

テーブルと 2 つの整数で構成される主キーを持つ Sqlite3 データベースがあり、そこに大量のデータを挿入しようとしています (つまり、約 1GB 程度)。

私が抱えている問題は、主キーを作成すると暗黙的にインデックスも作成されることです。これは、私の場合、数回のコミット後にクロールへの挿入が停止することです (データベース ファイルが NFS にあるためです..ため息)。

だから、どういうわけかそのインデックスを一時的に無効にしたいと思います。これまでの私の最善の計画は、主キーの自動インデックスを削除することでしたが、SQLite はそれを好まず、そうしようとするとエラーがスローされるようです。

2 番目に良い計画は、アプリケーションがネットワーク ドライブ上にデータベースの透過的なコピーを作成し、変更を加えてからマージすることです。ほとんどの SQlite/NFS の質問とは対照的に、アクセスの同時実行は必要ないことに注意してください。

そのようなことをする正しい方法は何でしょうか?

アップデート:

既に使用しているフラグを指定するのを忘れていました:

更新 2: 実際にはアイテムをバッチに挿入していますが、次のバッチは前のバッチよりもコミットが遅くなります (これはインデックスのサイズに関係していると思います)。10k から 50k のタプルのバッチを試してみました。それぞれのタプルは 2 つの整数と浮動小数です。