問題タブ [newsequentialid]
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.
entity-framework-5 - ID が newsequentialid() の Guid である場合、親と子の間の Entity Framework 5.0 マップ関係を使用する
1対多の関係を持つ2つのクラスがあります。
マッピング クラスは次のとおりです。
クライアント クラスの新しいインスタンスを作成し、それらをデータベースに正常に保存できます。しかし、Client_Local クラスを追加してデータベースに保存しようとすると、「ReferentialConstraint の依存プロパティがストアで生成された列にマップされています。列: 'Guid'.」というメッセージが表示されます。
キー フィールドは、パフォーマンス上の理由から、SQL で newsequentialid として生成されます。また、Client_Local.Guid と Client.Guid の間には外部キーの関係があります。
データベースからのデータの取得は、上記のマッピング クラスで機能します。どんな助けでも大歓迎です。
sql - Entity Framework 6 Code First での newid()
Entity Framework 6 Code First を使用して、newid() を使用して SQL データベースのテーブルの主キーの既定値を設定したいと考えています。私はこれがコードを介してどのように行われるかを知っており、エンティティフレームワークで GUID に NewId() を設定する方法など、スタックオーバーフローに関するいくつかのアプローチも見つけました
BUT:私は、オブジェクトを介してではなく、データベースへのバルジとしてデータを挿入するバックアップ/復元メカニズムを持っています。したがって、ここでは Entity Framework は使用されません。これは、GUID が null の行が SQL データベースに挿入され、失敗することを意味します。
注釈を追加することが可能です
そして、これは NEWSEQUENTIALID() をデフォルト値として正常に追加します。これは newid() と同様のことを行います (最近の GUID よりも高い新しい GUID を追加するため、入力に順序があるため、パフォーマンスが向上します)。しかし、これは EF なしで既に存在するデータベースであるため、変更をできるだけ少なくしたいと考えています。したがって、私は NEWSEQUENTIALID() にはまったく満足していません。まだ newid() だったらいいのにと思います。しかし、Entity Framework 6 Code First で newid() の注釈/マッピングが見つかりませんでした。また、設計上、データベースへのすべての変更はコードで行う必要があります。デフォルト値 newid() をコードで行に追加する方法を知っている人はいますか?
前もって感謝します!
sql-server - NEWID() を使用すると、NEWSEQUENTIALID() よりも多くのスペースが使用されるのはなぜですか?
私は少し調査をしている最中で、説明できない異常に遭遇しました (そして、Google で何も見つけることができませんでした)。次の SQL を検討してください。
結果:
質問
NEWID() よりも NEWSEQUENTIALID() を使用すると、予約済み/実際のスペースがかなり小さくなる理由を誰でも説明できますか?
回答に応じて
以下のLuaanからの回答を確認するために、次のテストを実行しました。
違いは、主キーを削除したことです (テーブルがヒープ テーブルになったことを意味します)。これにより、両方のテーブルのサイズがまったく同じになりました。これは、テーブルがクラスター化インデックスによって物理的に編成されていることを証明します。
sql - NEWSEQUENTIALID はどの程度予測可能ですか?
に関する Microsoft のドキュメントにNEWSEQUENTIALID
よると、NEWSEQUENTIALID の出力は予測可能です。しかし、予測可能性はどの程度予測可能ですか? によって生成された GUID があるNEWSEQUENTIALID
とします。
- 次の値を計算しますか?
- 前の値を計算しますか?
- 最初の値を計算する
- GUID をまったく知らなくても、最初の値を計算しますか?
- 行数を計算する たとえば、整数を使用する場合
/order?id=842
、アプリケーションには 842 の注文があることがわかります。
以下は、私が行っていることと、さまざまなトレードオフについての背景情報です。
整数よりも GUID を主キーとして使用することのセキュリティ上の利点の1 つは、GUID が推測しにくいことです。たとえば、データベース内の最初のユーザーが管理ユーザーである可能性が高いため、ハッカーが/user?id=845
にアクセスしようとするような URL を見たとします。/user?id=0
さらに、ハッカーは反復処理を繰り返して、/user?id=0..1..2
すべてのユーザーをすばやく収集できます。
同様に、整数のプライバシーに関する欠点は、情報が漏洩することです。/order?id=482
は、実装以来、Web ショップに 482 件の注文があったことを教えてくれます。
残念ながら、主キーとして GUID を使用すると、よく知られたパフォーマンス上の欠点があります。この目的のために、SQL Server はこのNEWSEQUENTIALID
関数を導入しました。この質問では、 の出力がどの程度予測可能かを知りたいと思いNEWSEQUENTIALID
ます。
sql-server - SQL Server の多対多の関係で順次 GUID を使用する
「特にパフォーマンスに関して、主キーとして GUID を使用するためのベスト プラクティスは何ですか? 」という質問に基づいて、非クラスター化インデックスでシーケンシャル GUID を PK として使用し、クラスター化インデックスとしてINT
またはを使用BIG INT IDENTITY
し、アプリが後でレプリケーションが必要になった場合、それは有益であり、テーブル スキャン、内部結合、および挿入でそれほど多くのパフォーマンスが失われることはありません。
しかし、メイとメイの関係はどうだろうか?FKを使用したブリッジ テーブルと同じパフォーマンスを得るには、ブリッジ テーブルに別の (INT
または) クラスター化インデックスを使用する必要がありますか?BIGINT
BIGINT
c# - GUID は、最初に newsequentialid() と EF データベースで空です
最初にEF 4.1とデータベースを使用してWebサイトに取り組んでいます。aspnet_Users
特に主キーとして Guid を使用している aspnet テーブルも使用しています。aspnet_Users
したがって、私のカスタム User テーブルには、 IDの外部キーである主キーとして Guid もあります。
最近、主キーとして Guid を使用するのは悪い考えだと読みましたnewsequentialid()
。
Sql Server Management Studio を使用して、すべての主キーのデフォルト値を に更新し、edmx デザイナーで にnewsequentialid()
設定StoreGeneratedPattern
しました。Identity
ただし、オブジェクト (たとえばItem
、Guid プライマリ キーを持つオブジェクト) を追加しようとすると、その ID はデータベースで空 (すべて 0) のままになります。
そして追加方法:
私は何かを忘れましたか?データベースの主キーのデフォルト値を設定しましたがDefault Value
、edmx デザイナーのプロパティはまだNone
. 正常ですか?
別の解決策は、 Guid の代わりに int を主キーとして使用することですが、カスタム User テーブルとaspnet_Users
Guid を使用する との間のリンクをどのように行うことができますか?
どうもありがとう !
c# - C#で連続したGUIDをソートする方法は?
シーケンシャル GUID は一意ですが、順序で作成されます。この順序は少し変わっており、標準の .NET Guid 比較子を使用した場合の順序とは異なります。
シーケンシャル GUID のルールでソートする C# Guid 比較子を探しています。
==更新==
私は特に SQL Server の NewSequentialId() によって作成されたシーケンシャル GUID を参照していますが、標準の Win32 API 呼び出し UuidCreateSequential() が SQL Server とは異なるスキームを使用していることに気付きました (質問を書いたときは同じだと思いました)。 .
== 更新 2==
たとえば、List<System.Data.SqlGuid>.Sort() を使用すると、petelidsは以下の答えを返します (各 4 ビット位置に 1 を持つ GUID の初期リストを使用)...
List<System.Guid>.Sort() によって返される次の順序とは対照的に
sql-server - Newsequentialid による SQL 新規列エラー
こんにちは、私は非常に大きなデータを持っており、ObjectID とそのデフォルト値 newsequentialid() の列があります。そのテーブルにデフォルト値で新しい列を作成しようとしているときに、「列 'ObjectID' のデフォルト値を検証中にエラーが発生しました」というメッセージが表示されました。
そのダイアログ メッセージに「はい」と答えたら、何が起こりますか? 既存のデータに影響を与えたくありません。
この状況を説明していただけますか。
ありがとうございます。それでは、お元気で
sql-server - サーバー全体でクラスター化された GUID 列と newsequentialid
クラスター化インデックスを持つ列でランダムな値を使用することはお勧めできないことはよく知られています。そのため、クラスター化インデックスを持つ主キーに GUID を使用することは通常はお勧めできません。newsequentialid() 関数を使用すると、これらの問題のほとんどを克服できます。
しかし、Web サーバーのファームで GUID を生成し、すべて同じデータベースにアクセスするとどうなるでしょうか? この記事で説明されているように、UuidCreateSequential を使用して .NET コードでシーケンシャル ID を作成しています 。 -sql-server-in-net.aspx
問題は、結果として得られる GUID が 1 台のマシンから連続している場合でも、複数のマシンでは同じようにならないことです。最上位の 11 バイト (SQL Server によると) は、同じマシンではほぼ同じままであるように見えるため、望ましい逆ではなく、効果的にマシン、次に時間でソートされます。
GUID 内のバイトを並べ替えてマシン間でほぼ連続した GUID を取得することは価値があり実行可能でしょうか? それともあきらめてインデックスを非クラスター化する必要がありますか?
ありがとう!