同じデータ型の foo という名前の列を持つテーブルが 10 個以上 (わかりません) あります。
すべてのテーブルの値が一意であることを SQL に伝えるにはどうすればよいですか。
つまり、(テーブル 1 に値 "1" がある場合) テーブル 2 に値 "1" を持つことはできないはずです
5 に答える
これらの 10 個のテーブルが参照する共通 ID のテーブルがあります。これは、一意の ID を保証するという点でうまく機能しますが、誰かが本当に望むのであれば、テーブル内の ID を複製できなかったという意味ではありません。
私が言いたいのは、共通 ID のテーブルは、(この共通テーブルに ID を挿入することによって) 挿入するための重複がないことを保証しますが、それが起こらないことを保証する方法は、ビジネス ルールをシステムまたはチェック制約を配置して他のテーブルを相互参照します (一意性は保証されますが、パフォーマンスが低下します)。
質問は漠然としています。複数のテーブル間で一意の列を生成する必要がある場合は、行 GUID または共通の ID ジェネレーター テーブルを使用します。一意性を強制する必要がある場合 (およびフィールド値が既に存在する場合) は、トリガーを使用します。
通常、値を生成する場合、何も強制する必要はありません。生成ロジックは、正しく行われれば、それを処理します。たとえば、ユーザー入力を挿入する場合は、挿入中に一意性を強制できますし、強制する必要があります。検証ルールなどとして。
フィールドを GUID (または SQL サーバーの UNIQUEIDENTIFIER) として定義できます。そうすれば、何があっても常にユニークになります。
ID % 10 = N (N は 0 ~ 9 のテーブル番号) のように、各テーブルにチェック制約を設定するのはどうでしょうか。毎回 IDENTITY(N,10) を使用します。
おそらくあなたのデザインに欠陥があることをお勧めします。なぜこれらは別々のテーブルなのですか? それらを 1 つの id フィールドと別のフィールドを持つ 1 つのテーブルに配置して、これらの別個のテーブルを作成しているもの (たとえば、顧客 ID) を識別する方がよいでしょう。次に、パフォーマンス上の理由で顧客ごとにテーブルを分割したい場合は、テーブルの分割について読むことができます。