Sie möchten, dass eine URL für einen Benutzer eindeutig ist, danach jedoch nicht mehr eindeutig ist.
Wenn Sie jede URL für einen Benutzer aufgelistet haben, können Sie dies mit einem gefilterten/partiellen Index tun.
create unique index idx_t_user_url_seqnum on t(user, url, seqnum)
where seqnum = 1;
Aber ich denke, das Problem ist Ihr Datenmodell. Sie versuchen, mit einer einzigen Tabelle zu viel zu tun. Ich denke, Sie sollten mit Zuordnungen zwischen URLs und Benutzern eine Zuordnungstabelle haben:
create table UserUrlMapping (
UserUrlMappingId serial primary key,
UserId int references Users(UserId),
Url varchar(4000)
constraint unq_url unique (Url) -- If you think about it, being in this table once means that there is only one user
);
Dann in Ihrer Datentabelle, nicht die URL setzen dort stattdessen die UserUrlMappingId
setzen.
danke für Ihre Antwort! Würde die eindeutige URL-Einschränkung nicht bedeuten, dass der Benutzer nur eine Zeile erstellen kann? oder vielleicht missverstehe ich – Matt
@Matt. . . In der Mapping-Tabelle gäbe es nur einen Eintrag pro Benutzer und URL. Eine Zeile in dieser Tabelle kann beliebig oft von Ihrer Tabelle aus referenziert werden. –