sql >> Databasteknik >  >> RDS >> Sqlserver

Unik begränsning på två fält, och deras motsats

Två lösningar, båda egentligen om att förändra problemet till ett lättare. Jag föredrar vanligtvis T1 lösning om det är acceptabelt att tvinga konsumenterna en förändring:

create table dbo.T1 (
    Lft int not null,
    Rgt int not null,
    constraint CK_T1 CHECK (Lft < Rgt),
    constraint UQ_T1 UNIQUE (Lft,Rgt)
)
go
create table dbo.T2 (
    Lft int not null,
    Rgt int not null
)
go
create view dbo.T2_DRI
with schemabinding
as
    select
        CASE WHEN Lft<Rgt THEN Lft ELSE Rgt END as Lft,
        CASE WHEN Lft<Rgt THEN Rgt ELSE Lft END as Rgt
    from dbo.T2
go
create unique clustered index IX_T2_DRI on dbo.T2_DRI(Lft,Rgt)
go

I båda fallen, varken T1 inte heller T2 kan innehålla dubbletter av värden i Lft,Rgt par.



  1. Hitta filmer med det högsta antalet utmärkelser under ett visst år - kodduplicering

  2. Steg för att synkronisera Standby med primär databas i Oracle

  3. JDBC lagrad proceduranrop

  4. Frågetidsresultat i MySQL med PHP