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

SQL の条件付き外部キー

    PERSISTED COMPUTED を使用できます case ステートメントを使用して列を作成しますが、最終的にはオーバーヘッドしかありません。

    最善の解決策は、最初から 3 つの異なる値としてモデル化することです。

    CREATE TABLE Mails (MailID INTEGER PRIMARY KEY)
    CREATE TABLE Phones (PhoneID INTEGER PRIMARY KEY)
    CREATE TABLE Emails (EmailID INTEGER PRIMARY KEY)
    
    CREATE TABLE PartyChannel (
      ID INTEGER NOT NULL
      , ChannelID INTEGER NOT NULL
      , ChannelType CHAR(1) NOT NULL
      , MailID AS (CASE WHEN [ChannelType] = 'M' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Mails (MailID)
      , PhoneID AS  (CASE WHEN [ChannelType] = 'P' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Phones (PhoneID)
      , EmailID AS  (CASE WHEN [ChannelType] = 'E' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Emails (EmailID)
    )
    

    免責事項

    できるからといって、すべきだとは限りません。



    1. 挿入前にテーブル内の重複しない行をチェックする手順(Oracle)

    2. テーブルの構造が不明な2つのテーブルを比較するためのplsqlプロシージャ

    3. データベース全体の空の文字列をNULLに更新

    4. SQL Server(T-SQL)でサーバー照合を表示する方法