2016-06-16 17 views
0

私はショップデータベースを持っています。これまでのところ、あなたは登録ユーザーであるときにしか買うことができないので、すべての顧客はデータベースに一度だけ登録する必要があるため、顧客の電子メールアドレスに対してユニークなインデックスを持っています。MySql:他のフィールドがfalseの場合のユニークなインデックスのみ

今、自分で登録することなく注文したいと思っています。そのアイデアは、ユーザーがゲストとして作成されたかどうかを示すために、フィールド "guest BOOL NOT NULL DEFAULT false"をユーザーデータベースに追加することでした。しかし、注文をゲストとして許可することで、同じユーザーの電子メールアドレスを複数回ユーザーテーブルに入れることができます(1人のユーザーがゲストとして複数回注文する可能性があるため)。

だから、私は次のようなものが必要になるでしょう: "email-address"フィールドは一意であるべきですが、 "guest"フィールドがfalseのときだけです。

mysql-featuresでこれを行うことは可能ですか、または電子メールから一意のインデックスを削除して、すべての電子メールが一意でなければならないコードにしておく必要がありますか?

答えて

1

これはMySQLで簡単にはできません。他のデータベースでは、フィルタリングされたインデックスと計算カラムが提供されています。

ゲスト以外のユーザーには一意のguestidがありますが、値は1つ(例:-1、ただしNULLではありません)です。次に、(emailaddress, guestid)にユニークなインデックスを作成することができます。

トリガーを使用してこのような列を維持することさえできます。もちろん、トリガーを使用している場合は、同様に制約を適用することができます。

関連する問題