標準のSQLデータベースを使用するのはやや新しい(現在は主にMySQLで動作している)私はまだこの使用法の多くを実行していません。
テーブルをインデックス付けする負の(またはむしろ署名された)キーを持つのはいつ、なぜ便利ですか?
標準のSQLデータベースを使用するのはやや新しい(現在は主にMySQLで動作している)私はまだこの使用法の多くを実行していません。
テーブルをインデックス付けする負の(またはむしろ署名された)キーを持つのはいつ、なぜ便利ですか?
回答:
主キーはすべて、レコードで最も重要な値であると判断した値です。そのキーが符号付きint、符号なしint、文字列、blob(実際には制限があります)、またはUUID(または今日の名前)であっても、それがキーであり、最も重要なこと。
キーに正の方向の数値のみを使用するように制限されていないため、符号付き整数は最大20億になり、符号なし整数は最大40億になると考えるのは理にかなっています。ただし、signed intを使用して、初期値を〜-20億に設定し、増分を1に設定しても問題はありません。20億件のレコードが記録された後、「ゼロ」にヒットし、その後20億件まで続きます。
テーブルに「負のキー」を含めることが役立つ理由については、「なぜテーブルにキーを入れるのが役立つのか」と同じ質問です。キーの「値」は、キーとしてのステータスには影響しません。キーは、キーはキーです。
重要なのは、キーが有効かどうかです。
ネガティブなキーを許可することが有用である理由について、いくつかの理由を提案できます。
販売システムで、正の販売注文番号と一致する負の販売注文番号として返品を表示したい場合、相関関係を簡単にします(これは単純で設計が不十分ですが、「スプレッドシート」の意味では機能します)。
ユーザーテーブルを作成し、負の数を持つものがシステム制御されていることを示す場合(SOはこのことをチャットフィードユーザーに対して行います)。
先に進むこともできますが、実際に、負の数が重要である唯一の理由は、あなたまたは私が重要性を割り当てるかどうかです。それ以外は、キーの価値がキー自体に影響を与える大きな理由はありません。
ID列または自動番号列について説明している場合、値自体に意味はありません。(時々、ドラチェンスターンに言及されたSOのチャットユーザーのように、私は自分の前にやったことがあります)
ただし、通常、符号付き整数を使用している場合、範囲の半分が失われます。
参照:テーブルのフィールドが符号付きまたは符号なしの最大32ビット整数に近づいたらどうするか?
別の例:小規模なレプリケーションシナリオでは、あるサイトに負の値を使用し、別のサイトに正の値を使用すると、特定の行のソースに関する暗黙的な知識が得られます。
NOT FOR REPLICATION
ご存知のMySQL(または他の)類似物はありますか?
すべてのデータベースシステムが符号なし整数型さえサポートしているわけではありません。MSSQLはサポートしていない整数型の1つです。これらの場合、整数キーフィールドでは負の値が可能なのは、単に型で可能なためです(この例に示すように、ルールまたはトリガーを使用してそれらをブロックできますが、そのようなルールを適用するオーバーヘッドをおそらく追加する必要はありません)すべてのインター/更新)。
データベースに関する限り、主キーの実際の値は、テーブル内で一意である限り重要ではありません。それに対して-42と42は、42と69と同じように2つの異なる数字にすぎません-意味は、コードによって負の値にのみ与えられるか、値の値には与えられません。
符号なし整数型をサポートしないことは、おそらく複雑さを減らすことに基づいた設計上の決定です。つまり、2つの異なる32ビット整数型に値を割り当てるときに範囲をチェックすることを心配しないようにします。0または1から始まる自動インクリメントフィールドで可能なインデックスの数を、符号なしのタイプで可能なものの半分(〜4e9ではなく〜2e9)に制限しますが、これは重要な問題になることはほとんどありません(必要な場合)特にそのような値が32ビットの値よりも効率的に処理される64ビットアーキテクチャを使用している場合は、おそらく64ビットタイプのキー値の多くはおそらくとにかく行きました)スペース上の理由で32ビットに固定するには、-2,147,483,647で増分を開始できます。