Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Ràng buộc duy nhất trên hai trường và sự đối lập của chúng

Hai giải pháp, cả hai đều thực sự về việc thay đổi vấn đề thành một vấn đề dễ dàng hơn. Tôi thường thích T1 giải pháp nếu việc buộc người tiêu dùng thay đổi là có thể chấp nhận được:

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

Trong cả hai trường hợp, cả T1 đều không cũng không phải T2 có thể chứa các giá trị trùng lặp trong Lft,Rgt các cặp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn Hình ảnh PictureBox vào cơ sở dữ liệu Máy chủ Sql

  2. Làm thế nào để đối phó với kiểu dữ liệu TIME từ SQL Server 2008 với NHibernate?

  3. LEN () so với DATALENGTH () trong SQL Server

  4. Tính Hash hoặc Checksum cho một bảng trong SQL Server

  5. .NET SQL chèn chậm so với JDBC? (JDBC nhanh hơn gấp 4 lần)