1. ホーム
  2. sql

Postgresでは、特定のカラムに取り得る値をどのように制限するのですか?

2023-07-27 18:41:08

質問

カラムを作成したい element_type という名前の)テーブルの中に discussion と呼ばれる) テーブルで、テキスト値 "lesson" または "quiz" を許可しますが、他の値がその列に挿入されるとエラーが生成されます。

という別のテーブルを作成することができることは理解しています。 element_types というテーブルを作成し、カラム element_id (主キー、int) と element_type (一意、text) を作成し、外部キーとして foreign_element_id テーブルで discussion 参照 element_types のカラム element_id . または、代わりに、私は忘れることができます element_id を完全に忘れて、単に element_type を主キーとして設定します。 しかし、私は新しいテーブルを作成することを避けたいと思います。

新しいテーブルを作成することなく、列で可能な値を制限する、より簡単な方法はありますか?

どのように解決するのですか?

あなたは CHECK CONSTRAINT:

ALTER TABLE distributors 
   ADD CONSTRAINT check_types 
   CHECK (element_type = 'lesson' OR element_type = 'quiz');

IMO では、よりクリーンな選択肢として ENUM :

CREATE TYPE element_type AS ENUM ('lesson', 'quiz');