PostgreSQL 制約: 型と例
制約とは
データ型は、テーブルに格納できる情報の種類を制限するために使用されます。 しかし、このアプローチには 2 つの問題があります。
- 問題1: データ型によって強制される制約は、特定のアプリケーションには適切ではありません。 たとえば、品目の価格を含む列は正の値のみを受け入れる必要があります。 ただし、正の数のみを受け入れる特定のデータ型はありません。
- 問題2: 他の列または行との関係で、行/列データ内の情報を制限したい場合があります。 たとえば、アイテム情報を含むテーブルには、一意の列制約ごとに XNUMX 行のみを含める必要があります。
このような問題を克服し、これらのルールを定義するには、次を使用できます。 制約s内 PostgreSQL。簡単に言うと、制約とはデータが従わなければならないルールです。テーブル制約を追加すると、データベース システムでデータの整合性を強制できるようになります。
したがって、ユーザーが定義された制約に違反する列にデータを保存しようとすると、エラー メッセージが表示される必要があります。
の型 PostgreSQL 制約
いろいろな種類を見てみましょう PostgreSQL データの正確性を保証するために作成できる制約:
- ユニークな
- Null ではありません
- チェック制約
- 主キー
- 外部キー
- 実行制約
1) PostgreSQL 固有の制約
一意制約は、列または列制約のグループに含まれるデータが一意であることを確認するのに役立ちます。
例
CREATE TABLE Item( Item_no integer UNIQUE, Name text, );
2) NOT NULL 制約
非 null 制約は、列が決して null 値であってはいけないことを定義します。このタイプの制約は、チェック制約の作成とよく似ています。しかし、 PostgreSQL より効率的な not-null 制約を作成します。この方法の問題は、not-null 制約に明示的な名前を付けることができないことです。
not null 制約はデフォルトではありません PostgreSQL 標準であり、ポータブルアプリケーションでは使用しないでください。これは後に PostgreSQL 他のものと互換性を持たせるため DBMSシステムスクリプト ファイル内の制約を簡単に切り替えることができるため、多くの人がこれを使用します。
構文:
CREATE TABLE Item ( product no integer NULL, Item_name text NULL, Itm_price numeric NULL );
3) PostgreSQL 制約を確認する
チェック制約は、一部の列の値がブール式である必要があることを指定するのに役立ちます。
この PostgreSQL check 制約は、CHECK キーワードとその後に括弧で囲まれた式で構成されます。 Postgres のチェック制約には、制約されるべき列が含まれている必要があります。そうでないと意味がありません。
構文:
CREATE TABLE Item( Item_id INTEGER PRIMARY KEY, name VARCHAR(20), Item_price NUMERIC CHECK(price>0) );
サブスクリプション型フィットネスアプリでは、
CREATE TABLE Emp( ID INTEGER primary key, First_name VARCHAR(20), Last_name VARCHAR(20), Gender CHAR(l) check(gender gender='M'), Salary INTEGER NOT NULL, Dept_Num INTEGER );
CREATE TABLE ITEM( Id INTEGER PRIMARY KEY, name VARCHAR(15), price numeric CHECK (price > 0) );
4) 主キー制約
主キー制約を使用すると、列または列のグループをテーブル内の行の一意の識別子として使用できます。 主キー制約を定義するには、宣言された値が一意であり、null ではない必要があります。 これにより、XNUMX つのテーブル定義が同じデータを受け入れることができます。
構文:
Create Table Item( Item_no, integer PRIMARY KEY, Item_name text, Item_Price numeric );
例1:
CREATE TABLE Employee( ID INTEGER PRIMARY KEY Fname VARCHAR(20), Lname VARCHAR(20), Gender CHAR(l), Salary INTEGER NOT NULL, Dept INTEGER, UNIQUE(FNAME, LNAME) );
例2:
CREATE TABLE first( A1 INTEGER. A2 INTEGER. PRIMARY KEY (tl) ); Second way CREATE TABLE test( tl INTEGER PRIMARY KEY, t2 INTEGER. );
例3:
CREATE TABLE Items ( Item_no integer UNIQUE NOT NULL, name text, price numeric CREATE TABLE Items ( Items_no no integer PRIMARY KEY, name text, price numeric
5) 外部キー制約
外部キー制約は、列または列のグループの値が、別のテーブルのある行に表示される値と一致する必要があることを指定します。 これにより、関連付けられた XNUMX つのテーブル間の参照整合性を確立できます。
さまざまな製品の注文を保存するテーブルがあると仮定します。 テーブルに存在する製品の注文が含まれていることを確認したいと考えています。 したがって、ここでは、products テーブルを参照する order テーブルに外部キー制約を定義する必要があります。
構文:
CREATE TABLE ( id INTEGER PRIMARY KEY. name VARCHAR(IO) >; CREATE TABLE testable Id INTEGER PRIMARY KEY read INTEGER REFERENCES (id) );
例2:
CREATE TABLE Student ( Std_ID INTEGER primary key, First_name VARCHAR(20), Last_name VARCHAR(20), Gender CHAR(l), Steam, VARCHAR(20), Dept_NUM INTEGER REFERENCES Department );
6) 除外制約
排他制約は、指定された列または指定された演算子を持つ式で任意の2つの行を比較する場合、これらの演算子比較の少なくとも1つがnullまたはfalse値を返すようにするのに役立ちます。これを追加すると、 PostgreSQL constraint は、constraint 宣言で指定されたタイプのインデックスを自動的に作成します。
サブスクリプション型フィットネスアプリでは、
たとえば、次の PostgreSQL ステートメントは、School という名前の新しいテーブルを作成し、5 つの列を追加します。
CREATE TABLE SCHOOL6( STDID INT PRIMARY KEY NOT NULL, STDNAME TEXT NOT NULL, STDAGE INT NOT NULL, FEEDBACK CHAR(50), STANDARD INT NOT NULL,
たとえば、次の PostgreSQL ステートメントは、Branch という名前の新しいテーブルを作成し、6 つの列を追加します。列 STD_ID は外部キーであり、テーブル SCHOOLXNUMX の ID フィールドを参照します。
CREATE TABLE BRANCH ( BRANCHCODE INT PRIMARY KEY NOT NULL, BRAMCHNAME CHAR(50) NOT NULL, STD_ID INT references SCHOOL6(ID) );