sql >> Database >  >> RDS >> Sqlserver

Unieke beperking op twee velden en hun tegendeel

Twee oplossingen, beide echt over het veranderen van het probleem in een eenvoudiger probleem. Ik geef meestal de voorkeur aan de T1 oplossing als het afdwingen van een wijziging aan de consument acceptabel is:

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

In beide gevallen is geen van beide T1 noch T2 kan dubbele waarden bevatten in de Lft,Rgt paren.



  1. Hoe zet ik PostgreSQL VERBOSITY aan in de django db-verbinding?

  2. SchemaSpy PostgreSQL - WARN - Verbindingsfout

  3. Hoe lange regels tekst in SQLite-resultaten te laten lopen

  4. Hoe krijg ik in SQL de maximale waarde voor een geheel getal?