問題タブ [primary-key-design]
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.
sql-server-2008 - 大量の SQL Server 2008 の主要なデータ型は?
大量のデータ用のデータベースを設計している最中ですが、主キーにどのデータ型を使用すればよいか疑問に思っていました。
テーブルのパーティション分割があり、データベースは最終的にクラスター化され、代替データセンターへのホット フェイルオーバーになります。
編集
テーブル - 複数の期間と物事についてチャットする複数のユーザーとチャットするための複数の期間と複数の事柄のチャットシステムを考えてください。
私が考えているのは指数関数的な問題です。つまり、何かが短期間に数十億行を生成する可能性があります。つまり、データベースや DBA が DBA のことを行う前に、
マーク - GUID に関するあなたの懸念を共有します - GUID が飛び交うコーディングは好きではありません。
sql - データベース設計と非数値主キーの使用
私は現在、顧客およびWebサイト管理アプリケーション用のデータベーステーブルを設計中です。私の質問は、テーブルの機能部分としての主キーの使用に関するものです(そして、理由だけですべてのテーブルに「ID」番号を割り当てるわけではありません)。
たとえば、これまでのデータベースの4つの関連テーブルを次に示します。そのうちの1つは従来の主キー番号を使用し、他のテーブルは主キーとして一意の名前を使用します。
ご覧のとおり、4つのテーブルのうち3つは、主キーとして「名前」を使用しています。これらは常にユニークであることを私は知っています。2つのケース(* _statusテーブル)では、ステータスオプションが将来変更される可能性があるため、基本的にENUMの動的置換を使用しています。また、「website」テーブルの場合、Webサイトの「name」は常に一意であること。
これが健全な論理なのか、名前が常に一意の識別子になることがわかっているときにテーブルIDを削除するのか、それとも災害のレシピなのか疑問に思います。私はベテランのDBAではないので、フィードバックや批評などは非常に役立ちます。
これを読んでくれてありがとう!
.net - マージされる分散データの一意の ID を作成する最良の方法は?
集中的にホストされたデータベース (MS SQL Server) があり、分散クライアントがインターネット経由でデータを保存しています。インターネット接続がダウンすると、クライアントは新しいデータを SQLite インスタンスにローカルに保存し始めます。インターネット接続がオンラインに戻ると、蓄積されたローカル データが中央データベースに移動されます (挿入されます)。
このシナリオで一意の ID を処理する最善の方法は何ですか? その他の重要な情報:
ローカル クライアントは、オフライン時にリンクの目的でローカル データベース ID を記憶できます。したがって、ローカル ID はグローバルに一意になるように生成する必要があります。
ローカル データベースの一意の ID は、中央データベースに再びマージされるときに変更しないでください。
デバイスに応じて、将来ローカル操作用にさまざまな種類のデータベースが選択される可能性があります。たとえば、JavaDb、TextFileDb などです。したがって、このソリューションには単一の独自のデータベース機能を使用するべきではないと思います。
- 変更が中央データベースにマージされると、すべてのレコードに一意の ID が必要になります。
この質問では、MyTable
フィールドで名前が付けられた単純なテーブルを想定しています: ID
(主/一意のキーは、どのようなタイプであってもよい) とField1
, Field2
,Field3
後者は実際には問題ではありません。
最初に頭に浮かんだのは、GUID の使用です。これよりも優れたパターンやプラクティス、またはこれを実行するためのより良い方法はありますか?
編集: Microsoft .NET と ADO.NET の使用
mysql - MySQL-主キーとして文字列を使用
Stack Overflowで同様の投稿をすでに見ましたが、満足のいくものではありませんでした。
Webサービスを提供しているとしましょう。http://foo.com/SERVICEID
SERVICEIDは、サービスを参照するために使用される一意の文字列ID(base 64、小文字/大文字+数字)であり、URL短縮サービスがURLのIDを生成する方法と同様です。
文字列と整数の比較には、固有のパフォーマンスの問題があることを理解しています。
しかし、String型の主キーを最大限に最適化する方法に興味があります。
私はMySQLを使用しています(現在、MyISAMエンジンを使用していますが、エンジンの違いをすべて理解しているわけではありません)。
ありがとう。
私の目的のために更新すると、文字列は実際にはbase62でエンコードされた整数だったので、主キーは整数でした。bigintのサイズを超える可能性はほとんどないので、他のものを使用してもあまり意味がありません(私の目的では特定のユースケース)
sql-server - 既存のテーブルに新しい主キーを追加する
次の詳細を含むテーブルがあります
テーブル名EMPLOYEE
と列
ここで、このテーブルに余分な列を追加して、ADD_UID
それを主キーにする必要があります
このクエリを使用していますが、失敗しています。
テーブル ' EMPLOYEE
' には既に主キーが定義されています。
編集
ここでの考え方は、新しい列が一意である必要があるため、失敗した場合に _KEY_VIOLATION をスローして、コード操作が行われるようにすることです。
asp.net - SQL プライマリ キー
そのため、同僚と私は、GUID である主キーを生成するのにどちらの方法が適しているかについて議論しています。
エンティティ 4 で .NET 4.0 を使用し、ストアド プロシージャを使用して選択/挿入/更新を行っています。
彼は、コードで GUID プライマリ キーを作成し、Guid クラスを使用して、または作成された Sequential GUID クラスを使用して、挿入の一部としてそれを返したいと考えています。
newid() または newsequentialid() のいずれかを使用して、挿入時に SQL Server によって GUID が作成されるようにします。
彼の方法に対する私の主張は、複数の挿入を行う必要がある場合、各挿入の GUID を取得するためにラウンドトリップを行う必要があるため、外部キー制約の関係を維持する必要があるということです。さらに、この方法を使用すると、挿入ごとに数回往復する必要があります。
SQLを使用して行うことについての彼の主張は、挿入が発生する前にキーにアクセスできず、コードの他の部分で使用するために主キーguidを元に戻すために挿入が発生するのを待たなければならないということです。このようにして、ストアド プロシージャへの 1 つの接続を確立し、すべての挿入を処理できます。
では、シングルインサートにはどの方法が適しているのでしょうか? トランザクションでの複数の挿入には、どの方法が適していますか?
c# - SQL Server で完全に同一のレコードをスキップする
C# の SqBulkCopy を介して SQL Server にインポートする一連のテキスト ファイルがあります。複数のレコードに表示されるレコードがいくつかあります。エラーをスローして停止するのではなく、それらをスキップしたいと思います。
明確な「uniqueID」/主キーがある場合は、すべて問題ありません。「WITH (IGNORE_DUP_KEY = ON)」を使用して効果を上げました。
ただし、この場合、すべてのフィールドを結合するか、すべてのフィールドを含む複合キーを作成しない限り、そのような uniqueID を決定することはできません。一意の transactionID または類似のものを取得しようとしましたが、利用できるものはありません。レコードは同じでも、フィールドの 1 桁が変更されている場合があります。この場合、テーブルに挿入します。
すべてのフィールドに対してキーを作成するよりも良いアプローチがあると思いますか? 私がそうすると、日付、文字列、値などをすべて混ぜてキーを形成する必要があることを意味します。
行をクエリし、入力行のハッシュと比較するために値をハッシュすることは別の考えでしたが、パフォーマンスはひどいものになると確信しています:)
これを行う最善の方法について誰か提案がありますか?
ありがとう
mysql - MySQL。リレーショナル テーブルの主キー。一意のIDまたは複数の一意のキー?
リレーショナル テーブルの主キー。それらの純粋なリレーショナル テーブルの複合主キーまたは一意の主キー?
ハイパフォーマンスのためにMySQLで使用するためにどの設計をお勧めしますか? 図を参照
技術的なメリットとデメリット!
みんな、ありがとう!
mysql - 非常に大きなテーブル クエリを最適化する
2,000 万件近くのレコードがあり、増え続けているテーブルがあります。テーブルは innodb としてセットアップされました。2 つの主要なフィールドにプライマリ インデックスがあります。
レコードの数にもかかわらず、このテーブルへのほとんどのクエリは、次の例外を除いて非常に高速です。
これにより、特定のフォームのすべての入力データが削除されます。
現在、エントリ テーブルが結果を返さない場合でも、これには 45 秒以上かかります。
私の質問は、構造に簡単な変更をentries_to_fields
加えることができるか、またはクエリをさらに最適化できるかということです。
mysql - MYSQL - 文字列を主キーとして使用する際の問題
重複の可能性:
Mysql の英数字順
テーブルがレコードを正しく並べ替えていません。主キーは、1 文字の文字列で、1 から始まる数字と組み合わせたものです。例: F1. 2桁の数字になると問題になりますex:F10。データベースは最初の 2 文字のみをチェックし、残りは破棄します。元:
F1、F2、F3、...F9、F10、F11 などのようになります。
F1、F10、F11、F12、....、F2、F3、F4などのように見えます。
ですから、何かアイデアがあれば共有してください。
注: MySql 5 サーバーと MySql Workbench 5.2 を使用
データベース内の 1 つのテーブルのスクリプト コードを次に示します。