Nie możesz tego łatwo zrobić. least()
/greatest()
podejście nie zadziała we wszystkich przypadkach.
Postgres ma kilka wymyślnych operacji indeksowania. Ale najlepszym sposobem jest użycie tabeli połączeń. Na przykład:
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)
);
Ogranicza to również liczbę numerów telefonów do 2 dla każdego użytkownika.