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

別のテーブルを参照するチェック制約を設定するにはどうすればよいですか?

    列 tblItem.ItemType 列を追加します。この列は、任意の行で値を 1 つだけ持つことができます (当然のことです)。 ItemID、ItemType に一意の制約を追加します。

    ここでの秘訣:これを覚えている人はほとんどいませんが、外部キーは一意制約の列を参照できます。

    CREATE TABLE tblItem (
      ItemID INT PRIMARY KEY,
      ItemType CHAR(1),
      UNIQUE KEY (ItemID, ItemType)
    );
    
    CREATE TABLE tblGoodItem (
      ItemID INT PRIMARY KEY,
      ItemType CHAR(1),
      CHECK (ItemType='G')
      FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
    );
    
    CREATE TABLE tblBadItem (
      ItemID INT PRIMARY KEY
      ItemType CHAR(1),
      CHECK (ItemType='B')
      FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
    );
      

    各子テーブルの ItemType を固定値に制限すると、tblItem の特定の行は 1 つの子テーブルのみから参照できます。

    ただし、アイテムを良いものから悪いものに変更するのは 3 ステップのプロセスです:

    1. tblGoodItem から行を削除
    2. tblItem の行の ItemType を更新
    3. tblBadItem に行を挿入


    1. すべてのニュースとすべてのコメントを取得する

    2. mysql文字列列から数字/数字を削除します

    3. Python-mysqlDB、辞書としてのsqliteの結果

    4. PHPを介してSSH経由でmysqlデータベースに接続します