address_book という名前のテーブルがあります。
フィールド id、user_id、......、default_address、address_type があります。
address_type は boolean (0: 配送先住所 - 1 : 請求先住所) default_address は boolean (0: デフォルトの住所ではない - 1 : デフォルトの住所)
会社には8つの住所があると考えてください。5 つの住所は配送先、3 つの住所は請求先です。
しかし同時に、address_type に依存するデフォルト値は 1 つだけです。配送用の 1 つのデフォルトの住所 請求書用の 1 つのデフォルトの住所。
このステートメントをクエリすると
alter table address_book add unique index(default_address, address_type)
論理的ではないでしょう。
id | user_id | default_address | address_type|
.. | .. | | |
.. | .. | | |
.. | .. | | |
----------------------------------------------
12 | 10 | 1 | 1 |
----------------------------------------------
13 | 10 | 0 | 1 |
----------------------------------------------
14 | 10 | 0 | 1 |
----------------------------------------------
15 | 10 | 1 | 0 |
----------------------------------------------
16 | 10 | 0 | 0 |
----------------------------------------------
17 | 10 | 0 | 0 |
この概念では、すべてのユーザーが最大 2 つの default_address を使用できます。1 つは請求書、もう 1 つは配送先住所です。
この状況の検証が必要な場合に一意のインデックスを使用するにはどうすればよいですか。