दो समाधान, दोनों वास्तव में समस्या को एक आसान में बदलने के बारे में। मैं आमतौर पर T1
. पसंद करूंगा समाधान अगर उपभोक्ताओं पर बदलाव के लिए मजबूर करना स्वीकार्य है:
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
दोनों ही मामलों में, न तो T1
न ही T2
Lft,Rgt
. में डुप्लीकेट मान हो सकते हैं जोड़े।