これを簡単に行うことはできません。 least()
/ greatest()
アプローチはすべての場合に機能するとは限りません。
Postgresにはいくつかの凝ったインデックス操作があります。ただし、最良の方法はジャンクションテーブルを使用することです。例:
create table userPhones (
userPhoneId bigint primary key ,
userId bigint references users(id),
phone_counter int check (phone_counter in (1, 2)),
phone varchar,
unique (userId, phone_counter),
unique(phone)
);
これにより、ユーザーごとに電話番号の数も2つに制限されます。