sql >> データベース >  >> RDS >> Sqlserver

2 つのフィールドに対する一意の制約とその反対

    2 つの解決策、どちらも問題をより簡単なものに変えることです。私は通常 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 に重複する値を含めることができます



    1. htmlとphpを使用して特定の方法でデータをフォーマットする方法

    2. Oracleデータベースのテーブル変更列を変更します

    3. Postgresql:MacOSXを使用してpg_hba.confファイルを見つける方法

    4. MySQLで過去12か月のデータを取得する方法