sql >> Databáze >  >> RDS >> Sqlserver

Jedinečné omezení ve dvou polích a jejich opak

Dvě řešení, obě ve skutečnosti o změně problému na jednodušší. Obvykle bych preferoval T1 řešení, pokud je vynucování změny spotřebitelům přijatelné:

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

V obou případech ani T1 ani T2 může obsahovat duplicitní hodnoty v Lft,Rgt párů.



  1. Vložit do tabulky Mysql, když uživatel zavře prohlížeč?

  2. Uživatelé Wordpress a uživatelská meta - spojení více řádků v jedné tabulce do jednoho řádku v jiné tabulce

  3. oratop

  4. Jak zobrazím skryté znaky pole ve výsledku dotazu v Oracle?