Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Unikalne ograniczenie dwóch pól i ich przeciwieństwa

Dwa rozwiązania, oba naprawdę dotyczące zmiany problemu na łatwiejsze. Zwykle wolę T1 rozwiązanie, jeśli wymuszenie zmiany na konsumentach jest dopuszczalne:

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

W obu przypadkach żaden T1 ani T2 może zawierać zduplikowane wartości w Lft,Rgt pary.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana i wypełnianie tabeli Temp z połączonej procedury składowanej parametrami

  2. Jak zmienić typ danych kolumny w bazie danych SQL bez utraty danych?

  3. Różnica między liczbami, liczbami zmiennoprzecinkowymi i dziesiętnymi w SQL Server

  4. Jak znaleźć sortowanie bazy danych obsługiwane przez instancję SQL Server?

  5. C++ wstępnie określa długość VARCHAR przy użyciu parametrów związanych z ODBC