PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Contrainte de valeur unique sur plusieurs colonnes

Vous ne pouvez pas facilement faire cela. Le least() /greatest() approche ne fonctionnera pas dans tous les cas.

Postgres a quelques opérations d'index fantaisistes. Mais le meilleur moyen est d'utiliser une table de jonction. Par exemple :

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)
);

Cela limite également le nombre de numéros de téléphone à 2 pour chaque utilisateur.