問題タブ [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.
database-design - レプリケーションを行う場合、PK に GUID が最適な選択であるのはなぜですか?
Oracle バックエンドを使用してイントラネット Web アプリを構築しています。この説明では重要ではない理由により、Oracle DB は別のサーバーに複製されます。Advanced ではなく、Oracle Basic Replication を使用することになると確信しています。
主キーに関するほとんどの議論が次のようになる理由を誰かが説明してくれませんか。
- PK の自動インクリメント int の使用は、99% の確率で問題ありません
- レプリケーションを行っている場合を除きます。次に、PK に GUID を使用します。
レプリケーションの例外の理由を誰も説明していないようで、その理由がわかりません。
database - 複数のデータベース間での重複キーの防止
私は、古いものとは別のデータベース (スキーマの大幅な変更) を使用するソフトウェアの新しいリリースが出てくる状況にいます。新しいシステムと古いシステムの両方が稼働する期間がかなり長くなり、2 つのデータベース間で一意の ID が生成されるようにする必要があります (データベース A に行は必要ありません)。データベースの行と同じ ID を持つ B)。データベースは Sybase です。
私が思いついた可能な解決策:
- 非常に大きな数値をサポートするデータ型を使用し、オーバーフローしないことを期待して、それぞれに範囲を割り当てます。
- 一方のデータベースには負の値を使用し、もう一方のデータベースには正の値を使用します。
- データベースを識別する追加の列を追加し、それと現在の ID の組み合わせを使用してキーとして機能します。
- 泣く。
他に何ができますか?2 つのデータベースを連携させるための、より洗練されたソリューションはありますか? 問題があれば、2 つのデータベースは同じサーバー上にあると思います。
sql - 「選択」は常に主キーで並べ替えられますか?
DBAの皆さんへの基本的な簡単な質問。
選択を行うとき、結果が主キーで並べ替えられることが常に保証されていますか、それとも「順序付け」で指定する必要がありますか?
DBとしてOracleを使用しています。
sql - SQL: 主キーにするか、主キーにしないか?
ユーザーの設定のセットを含むテーブルがあり、次の列があります。
UserID と Set および Key は一意です。そのため、特定のユーザーが特定の設定セットで同じキーを 2 つ持つことはできません。設定はセットごとに取得されるため、ユーザーが特定のセットから特定のキーを要求すると、セット全体がダウンロードされるため、次に同じセットのキーが必要になったときにデータベースにアクセスする必要はありません。 .
3 つの列すべて (ユーザー ID、セット、およびキー) に主キーを作成する必要がありますか、または主キーを持つ追加のフィールドを作成する必要があります (たとえば、SettingID と呼ばれる自動インクリメント整数、悪い考えです)、または主キーを作成しないでください。キーを作成し、一意のインデックスを作成するだけですか?
- - - アップデート - - -
わかりやすくするために、これは行末テーブルであり、結合されていません。UserID は、Users テーブルの FK です。セットは FK ではありません。私のGUIのヘルパーテーブルです。例として、ユーザーが Web サイトの一部に初めてアクセスすると、必要に応じて閉じることができるヘルプ バルーンが表示されます。クリックして離れたら、"GettingStarted" セットにいくつかの設定を追加し、バルーン X が無効になっていることを示すようにします。次にユーザーが同じページにアクセスすると、ヘルプ バルーン X が表示されないように設定されます。
database - GUID と INT IDENTITY
重複の可能性:
主キーはどうですか?
GUID を使用する利点と、データベースで PK として INT を使用する利点を認識しています。GUID は本質的に 128 ビットの INT であり、通常の INT は 32 ビットであることを考慮すると、INT は省スペースです (ただし、この点は最近のほとんどのシステムでは一般的に意味がありません)。
最後に、どのような状況で INT を GUID ではなく PK として使用すると思いますか?
database - データベース テーブルには常に主キーが必要ですか?
データベース テーブルには常に主キーを設定する必要がありますか?
SOタグ付けを見てみましょう。どのリビジョンでもタグを確認できます。タグは、postID とリビジョン番号を持つ tag_rev テーブルにある可能性があります。そのためにPKが必要ですか?
また、rev テーブルにあり、現在は使用されていないため、複数の post_id タグ ID ペアの複数のエントリではなく、タグ ID のブロブにする必要がありますか?
primary-key - テーブルのコピー+新しいPK
PKのないテーブルがあります。テーブルには約500行あるので、手動で書きたくありません。PKを追加する最良の方法は何ですか?
ありがとうございました、
ラファ
mysql - NetBeans 6.7 Beta - 特定のテーブルに主キーがないと判断されるのはなぜですか?
NetBeans 6.7 Beta を使用して、MySQL (バージョン '5.0.45-log') データベースからエンティティ クラスを作成しています。NetBeans はほとんどのテーブルを受け入れますが、「主キーがない」と言って、特定のテーブルを一貫して拒否します (パターンはわかりません)。すべてのテーブルは InnoDB エンジンを使用しています。すべてのテーブルには、1 つ以上の列の主キーがあります。MySQL クエリ ブラウザと NetBeans の内部データベース ナビゲータはどちらも、実際にはすべてのテーブルに主キーがあることに同意しています。調子はどう?
以下は、不適切なテーブルを生成するスクリプト スニペットです。
何を与える?前もって感謝します。
primary-key - RDBMS で多対多のコレクション エンティティをどのように解決しますか?
私はアーティストと曲をモデル化しようとしていますが、多くのアーティスト (デュエットなど) が Song_Performance を実行できるという問題があるため、曲の実行者を表す Artist_Group があります。
これで、Artist と Artist_Group の間に多対多の関係ができました。ここで、Artist_Group は、そのグループ内のアーティストのコレクションによって一意に識別されます。Artist_Group へのアーティストの参加を表す交差エンティティを作成できます (Artist_Group_Participation?)
同じアーティストのセットが同じグループを表すという事実を保持する Artist_Group エンティティの主キーを作成する方法がわかりません。Artist_Group エンティティの主キーがないということは、 Artist_Group_Participation エンティティの外部キー。
John Carlis と Joseph Maguire による本「Mastering Data Modeling」では、この形状について言及し、「Many-Many Collection Entity」と呼んでおり、非常にまれであると述べていますが、解決方法については述べていません。 -to-many の関係は、RDBMS に直接格納することはできません。これを表現するにはどうすればよいですか?
編集:
誰もが交差テーブルを提案しているように見えますが、それは私の問題ではありません。私は持っています。私の問題は、Artist_Group エントリに含まれるアーティストのグループが既存のグループと同じである場合、順序を無視して、Artist_Group エントリを追加できないという制約を適用することです。Artist_Group の ID を、それを構成するさまざまなアーティストの連結である varchar にすることを考えました。これにより、順序が重要な場合は問題が解決しますが、「エルトン ジョンとビリー ジョエル」の Artist_Group を使用しても追加は妨げられません。 「ビリー・ジョエルとエルトン・ジョン」のグループ。
ruby-on-rails - データベースの自動インクリメント主キーに頼ることができますか?
私の現在の Rails アプリケーションでは、モデルを " created_at
" フィールドでソートすることにより、スケジューリングの競合を解決しています。created_at
しかし、これが可能なフォームから複数のモデルを挿入すると、すべての時間がまったく同じになることに気付きました。
これは、プログラミングのベスト プラクティスの問題です。アプリケーションは、データベース内の ID 列に依存してINSERT
、作成順序を取得するたびに増加していくことができますか? 別の言い方をすれば、データベースから取り出した行のグループを ID 列で並べ替えて、これが作成順序に基づく正確な並べ替えであることを確認できますか? そして、これは私のアプリケーションで良い習慣ですか?