1

データベーステーブルを作成していますが、ある列のデータが常に別のテーブルの列のデータによって制限されていることを確認したいと思います。例えば:

Table_1にはColumn_1がありますColumn_1には次
の値を指定できます:
v1
v2
v3
v4
v2
v3

ここで、Column_3を使用してTable_2を作成しようとし
ていますが、この列の値が常にTable_1:Column_1のサブセットであることを確認したいと思います。

これを達成するために適用できる制約はありますか?

4

2 に答える 2

1

OracleとPostgreSQLでは、チェック制約を使用します

たとえば、Oracleの場合:

ALTER TABLE Table_3
ADD CONSTRAINT my_name
CHECK
    (column_3 in 
        (SELECT Column_1 FROM Table_1))

これはPostgreSQLでも機能します

SQL ServerとDB2では、実際のテストを実行する関数を作成する必要があると思いますが、それ以外は同じです。この関数には単一の引数(column_3の値)があり、EXISTS(SELECT 1 FROM Table_1 WHERE Column_1 =引数)を返します。

残念ながら、MySQLでは、挿入トリガーと更新トリガーで使用する必要があります

于 2013-02-25T09:31:26.160 に答える
0

Table_1.Column_1ユニークですか?

  • はいの場合は、それをPRIMARY KEYまたはUNIQUEにしてから、のFOREIGNKEYから参照しTable_2.Column_3ます。
  • いいえの場合(あなたの例で明らかに示されているように)、FKをからTable_2Table_1主キーにします。はTable_2.Column_3存在しません。代わりにTable_1.Column_1、2つのテーブルを結合することでの値を取得します。Table_2.Column_3そのJOINをVIEWに配置して、実際に存在するかのように(クライアントアプリケーションに)表示させることができます。
于 2013-02-25T10:21:13.193 に答える