17.10 - PRIMARY KEY - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)

列または列セットがtable_nameのプライマリ キーになります。定義された列セットにより、テーブル内の各行が固有になります。プライマリ キーは、参照制約を強制するためにも使用されます。

この列はNOT NULLとして定義する必要があります。

PRIMARY KEY制約は、次のものとして指定できます。
  • 単一の列または列セットに対する列属性
  • テーブル属性(揮発テーブルを除く)
PRIMARY KEY制約は、次のデータ型を持つ列に対しては指定できません。
  • BLOB
  • BLOB UDT
  • CLOB
  • CLOB UDT
  • VARIANT_TYPE
  • ARRAY
  • VARRAY
  • Period
  • XML
  • Geospatial
  • JSON
  • DATASET

1つのテーブルに指定できるプライマリ キーは1つのみです。他のテーブルとの参照整合性関係のためのプライマリ キーの候補を指定するには、UNIQUE列属性を使用します。これは、参照制約には必要ありませんが、標準の参照整合性制約とバッチ参照整合性制約では必要です。

PRIMARY KEY制約は、テンポラル テーブルと非テンポラル テーブルに対して有効です。テンポラル テーブルとテンポラル構文については、<Teradata Vantage™ - ANSIテンポラル テーブル サポート、B035-1186>および<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。

PRIMARY KEY制約の場合、非テンポラル テーブルではシステム定義のセカンダリ インデックスが使用され、テンポラル テーブルでは単一テーブル結合インデックスが使用されます。この制約に使用するシステム定義のセカンダリ インデックスまたは単一テーブル結合インデックスは、テーブルごとに最大32のセカンダリ インデックス、ハッシュ インデックス、および結合インデックスにカウントされます。

UNIQUE制約のように、PRIMARY KEY制約により、代替キーが参照整合性関係で指定されているときには、その代替キーの固有性が保証されます。

正規化テーブルに対してPRIMARY KEY制約が定義されると、Vantageは正規化行の制約を検証します。正規化された行がPRIMARY KEY制約に違反している場合、システムは要求元にエラーを返します。

名前なしのPRIMARY KEY列制約には、この構文を使用します。

     PRIMARY KEY
CONSTRAINT constraint_name
名前付きのPRIMARY KEY列制約には、この構文を使用します。
     CONSTRAINT constraint_name PRIMARY KEY
この制約を単一の列に適用する場合は、PRIMARY KEY列属性を使用します。
データベース オブジェクトの命名ルールについては、<Teradata Vantage™ - SQLの基本、B035-1141>を参照してください。

例: テーブル レベル名前付きCHECK、PRIMARY KEY、UNIQUE、およびFOREIGN KEY制約の指定

この例のリクエストでは、テーブル レベルの制約に名前を付けます。

    CREATE TABLE good_2 (
      column_1 INTEGER NOT NULL,
      column_2 INTEGER NOT NULL,
      column_3 INTEGER NOT NULL,
      column_4 INTEGER NOT NULL,
      column_5 INTEGER,
      column_6 INTEGER, 
      CONSTRAINT primary_1
      PRIMARY KEY (column_1, column_2),
      CONSTRAINT unique_1
      UNIQUE (column_3, column_4),
      CONSTRAINT check_1
      CHECK (column_3 > 0 OR column_4 IS NOT NULL),
      CONSTRAINT reference_1
      FOREIGN KEY (column_5, column_6) 
      REFERENCES parent_1 (column_2, column_3));

例: 列レベルおよびテーブル レベル名前付きおよび名前なしPRIMARY KEY、UNIQUE、およびFOREIGN KEY制約の混合の指定

この文では、名前付きおよび名前なしの制約を、列レベルとテーブル レベルで定義しています。

    CREATE TABLE good_3 (
      column_1 INTEGER NOT NULL
      CONSTRAINT primary_1 
      PRIMARY KEY,
      column_2 INTEGER NOT NULL
      CONSTRAINT unique_1 UNIQUE
      CONSTRAINT check_1
       CHECK (column_2 <> 3)
      CONSTRAINT reference_1
       REFERENCES parent_1
       CHECK (column_2 > 0)
       REFERENCES parent_1 (column_4),
      column_3 INTEGER NOT NULL,
      column_4 INTEGER NOT NULL,
      column_5 INTEGER,
       CONSTRAINT unique_2 UNIQUE (column_3),
       CONSTRAINT check_2
       CHECK (column_3 > 0 AND column_3 < 100),
       CONSTRAINT reference_2
     FOREIGN KEY (column_3)
     REFERENCES parent_1 (column_5), UNIQUE (column_4),
       CHECK (column_4 > column_5),
     FOREIGN KEY (column_4, column_5)
     REFERENCES parent_1 (column_6, column_7));