1

次のフィールドを持つテーブルがあるとします。

primaryEmail | secondaryEmail

フィールドの 1 つに制約を作成する方法と、両方のフィールドを結合する制約UNIQUEを作成する方法を知っていますが、両方の列に値が 2 回存在しないようにする方法はありますか? たとえば、フィールドに の値がある場合、フィールドまたはフィールドに再び表示できるようにしたくありません。UNIQUEjoe@example.comprimaryEmailprimaryEmailsecondaryEmail

4

2 に答える 2

2

データ モデルを修正し、電子メール アドレスを別のテーブルに移動してから、新しいテーブルと古いテーブルを関連付けることを検討してください。私の頭の上から、このようなものがうまくいくはずです

create table master (
  id int not null primary key,
  name varchar(64)
);

create table email (
  id int not null primary key,
  address varchar(128) not null unique,
  parent_id int not null,
  type enum('prim', 'secd'),
  foreign key (parent_id) references master(id)
    on delete cascade,
  unique (parent_id, type)
);

私はこのデザインが好きではありません-たとえば、私は列挙型のファンではありません-しかし、それはあなたの一意性の制約を解決します.

于 2012-09-19T20:55:10.023 に答える
0

私の意見では、それが本当に達成しようとしているのであれば、そのフィールドに 2 つの別個の制約を設定する必要があります。実際にやろうとしているのは、2 つの異なることです (列がレコード内で一意であることを確認し、その行内の列もテーブル全体で一意であることを確認してください)。

于 2012-09-19T20:01:41.207 に答える