PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Vincolo di valore univoco su più colonne

Non puoi farlo facilmente. Il least() /greatest() approccio non funzionerà in tutti i casi.

Postgres ha alcune operazioni di indicizzazione fantasiose. Ma il modo migliore è usare una tabella di giunzione. Ad esempio:

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

Questo limita anche il numero di numeri di telefono a 2 per ogni utente.