0

3 つの主キー (FirstName、SecondName、VersionID と呼びましょう) と 1 つのデータ列 (EmailAddress) を持つテーブルがあります。

データが挿入されたときに、データ列が最初の 2 列のいずれかで一意であることを確認したいと考えています。

つまり、すべての EmailAddress は、FirstName、SecondName の任意の組み合わせに対して一意です。ただし、FirstName と SecondName は同じで versionID が異なる、同じ EmailAddress の複数の値が存在する可能性があります。

私の最初の考えは、これらの列にインデックスを作成して一意性を確保することでしたが、その方法がまったくわかりません....次に、トリガーを検討しましたが、それらを構築する方法がわかりません。

最も効率的な方法は何ですか?また、どのように進めればよいでしょうか?

4

3 に答える 3

0
# firstname, secondname & emailaddress together must be unique
ALTER TABLE mytable
ADD CONSTRAINT ux_email_firstname_secondname_versionid
UNIQUE (firstname, secondname, emailaddress);

# emailaddress and versionid together must be unique
ALTER TABLE mytable
ADD CONTRAINT ex_emailaddress_versionid
UNIQUE (emailaddress, versionid);

3 つの列の組み合わせを一意にするようなものですが、1 つが異なると、一致しなくなります。

于 2013-04-07T01:09:27.190 に答える
0

複数一意制約:

ALTER TABLE your_table
  ADD CONSTRAINT constraint_name_name UNIQUE (FirstName, SecondName, versionID , EmailAddress)
于 2013-04-07T01:09:59.873 に答える
0

あなたが話していることのトリガーについてのアイデアは捨てます。上記のコメントに基づいて、メールアドレスに一意の制約が必要なだけです。

ALTER TABLE Table_Name
  ADD CONSTRAINT constraint_name UNIQUE (EmailAddress)

ユーザーが間違った電子メール アドレスを入力すると、別のユーザーが電子メール アドレスを正しく入力できなくなる可能性があるため、これはお勧めできません。

あなたの最善の策は、@TheEwook によって書かれたクエリを使用することです。

複数一意制約:

ALTER TABLE your_table ADD CONSTRAINT constraint_name_name UNIQUE (FirstName, SecondName, versionID , EmailAddress) share|edit

2 人のユーザーが同じメール アドレスを使用しようとしていることに懸念がある場合は、挿入時に各ユーザーの最大バージョンを確認し、そのメールと挿入されているメールを比較することで処理する必要があります。 .

于 2013-04-07T01:50:12.967 に答える