ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## 列定義

SQL構文

ColumnName ColumnDataType
[DEFAULT DefaultVal |
[NOT] INLINE |
[NOT] NULL] |
[PRIMARY KEY ] | [ UNIQUE]
]

パラメータ

列定義には、次のパラメータがあります。

ColumnName | 新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。表には最大255の列を定義できます。
DEFAULT DefaultVal | INSERTで、列の値が指定されていない場合、デフォルト値DefaultValを列に挿入します。指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。 DefaultValの有効なデータ型は、次のいずれかです。 NULL ConstantValue: 詳細は、「定数」を参照してください。 SYSDATE USER CURRENT_USER SYSTEM_USER デフォルト値がユーザーのいずれかである場合、列のデータ型はCHARまたはVARCHARのいずれかであり、列の幅は30文字以上である必要があります。
ColumnDataType | 列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型については、「データ型」を参照してください。
INLINE / NOT INLINE | デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
NULL | 列にNULL値を含めることができます。
NOT NULL | 列にNULL値を含めることはできません。NOT NULLを指定した場合、列にNULL値を保存しようとする文はすべて拒否されます。
UNIQUE | 列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意のTツリー索引が作成されます。これは、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があることを意味します。PRIMARY KEYとともに使用することはできません。
PRIMARY KEY | 列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。TimesTenでは、一意のハッシュ索引が内部的に作成されます。UNIQUEとともに使用することはできません。

説明

- TimesTenシステムでは、現在、1つの表につき単一のハッシュ索引がサポートされています。また、ハッシュ索引は、表の主キーに対してのみサポートされています。ハッシュ索引は、表の1つ以上の列に主キーを指定して表を作成すると、自動的に作成されます。

ハッシュ索引は、一定数のバケットで生成されます。バケットの数は、ALTER TABLE文を使用してハッシュ索引のサイズが変更されないかぎり、表の存続期間中は一定に保たれます。ハッシュ索引のバケット数が少ないと、ハッシュの衝突が発生しやすくなります。バケットの数を増やすと衝突は減少しますが、より多くのメモリーを消費します。ハッシュ・キーの比較は高速で実行されるため、少数のハッシュの衝突がTimesTenのパフォーマンスに影響することはありません。デフォルトの設定では、20行ごとにバケットが1つ作成されます。

バケットの数は、PAGES値から生成される表のカーディナリティの最大数の割合として、値20までの間に設定されます。UNIQUE HASH ON句が省略されている（および、そのためにPAGESに対して値が指定されていない）場合、TimesTenでは200バケットを含むハッシュ索引が作成されます。この値は最大4,000行の表に適しています。

ハッシュ索引の正確なサイズを設定するには、アプリケーションにおいて表の想定サイズを指定する必要があります。これにはPAGESパラメータを使用します。PAGESパラメータには、表の想定行数を256単位で指定します（256はTimesTenで各ページに保存される行数の単位で、表の想定ページ数が値として設定されます）。メモリーの使用量を抑える必要がない場合は、アプリケーションでPAGESに多めの値を設定できるため、バケット当たりの行数が平均して少なくなります。

- ハッシュ・キーには、最大16列を指定できます。
- 主キーに保存されるすべての列は、NULL以外である必要があります。
- 一意のハッシュ索引は、主キーに対してのみ指定できます。
- ColumnDefinitionで指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。
- ColumnDefinitionパラメータとCREATE TABLEパラメータの両方でPRIMARY KEYを指定することはできません。
- 主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。
- キャッシュ表を参照する外部キーを持つ表は作成できません。
- UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。

##### 例13.43

ハッシュ索引は、主キーであるPartNumberに作成されます。

    CREATE TABLE Price
    (PartNumber INTEGER NOT NULL PRIMARY KEY,
     VendorNumber INTEGER NOT NULL,
     VendPartNum CHAR(20) NOT NULL,
     UnitPrice DECIMAL(10,2),
     DeliveryDays SMALLINT,
     DiscountQty SMALLINT);

##### 例13.44

ハッシュ索引は、主キーであるClubName列に作成されます。

    CREATE TABLE Recreation.Clubs
    (ClubName CHAR(15) NOT NULL PRIMARY KEY,
     ClubPhone SMALLINT,
     Activity CHAR(18))
    UNIQUE HASH ON (ClubName) PAGES = 30;

##### 例13.45

ハッシュ索引は、2つの列MemberNameおよびClubで作成されます（共に主キーであるため）。

    CREATE TABLE Recreation.Members
    (MemberName CHAR(20) NOT NULL,
     Club CHAR(15) NOT NULL,
     MemberPhone SMALLINT,
     PRIMARY KEY (MemberName, Club));

##### 例13.46

Recreation.Events表にはハッシュ索引は作成されません。

    CREATE TABLE Recreation.Events
    (SponsorClub CHAR(15),
     Event CHAR(30),
     Coordinator CHAR(20),
     Results VARBINARY(10000));

##### 例13.47

ハッシュ索引は、VendorNumber列に作成されます。

    CREATE TABLE Purchasing.Vendors
    (VendorNumber INTEGER NOT NULL PRIMARY KEY,
     VendorName CHAR(30) NOT NULL,
     ContactName CHAR(30),
     PhoneNumber CHAR(15),
     VendorStreet CHAR(30) NOT NULL,
     VendorCity CHAR(20) NOT NULL,
     VendorState CHAR(2) NOT NULL,
     VendorZipCode CHAR(10) NOT NULL,
     VendorRemarks VARCHAR(60))
    UNIQUE HASH ON (VendorNumber) PAGES = 101;

##### 例13.48

ハッシュ索引は、列MemberNameおよびClubで作成されます（共に主キーであるため）。

    CREATE TABLE Recreation.Members
    (MemberName CHAR(20) NOT NULL,
     Club CHAR(15) NOT NULL,
     MemberPhone SMALLINT,
     PRIMARY KEY (MemberName, Club))
    UNIQUE HASH ON (MemberName, Club) PAGES = 100;

##### 例13.49

ハッシュ索引は、列FirstNameおよびLastNameに作成されます（共にAuthors表の主キーであるため）。

外部キーは、Authors表の主キーを参照するBooks表のAuthorFirstNameとAuthorLastName列に作成されます。

    CREATE TABLE Authors
    (FirstName VARCHAR(255) NOT NULL,
     LastName VARCHAR(255) NOT NULL,
     Description VARCHAR(2000),
     PRIMARY KEY (FirstName, LastName))
    UNIQUE HASH ON (FirstName, LastName) PAGES=20;
    CREATE TABLE Books
    (Title VARCHAR(100),
     AuthorFirstName VARCHAR(255),
     AuthorLastName VARCHAR(255),
     Price DECIMAL(5,2),
     FOREIGN KEY (AuthorFirstName, AuthorLastName)
     REFERENCES Authors(FirstName, LastName));

##### 例13.50

次の文では、VARCHAR列のデフォルト文字が優先され、1つのVARCHAR (10)列がNOT INLINEで、1つのVARCHAR (144)がINLINEである表が作成されます。

    CREATE TABLE t1 (c1 VARCHAR(10) NOT INLINE NOT NULL,
    c2 VARCHAR(144) INLINE NOT NULL);

##### 例13.51

次の文では、本のタイトルのUNIQUE列を持つ表が作成されます。

    CREATE TABLE Books
    (Title VARCHAR(100) UNIQUE,
     AuthorFirstName VARCHAR(255),
     AuthorLastName VARCHAR(255),
     Price DECIMAL(5,2),
     FOREIGN KEY (AuthorFirstName, AuthorLastName)
     REFERENCES Authors(FirstName, LastName));

##### 例13.52

次の文では、列x1のデフォルト値が1で、列dのデフォルト値がSYSDATEである表が作成されます。

    CREATE TABLE t1 (x1 INT DEFAULT 1, d TIMESTAMP DEFAULT SYSDATE);

関連項目

ALTER TABLE
DROP TABLE
TRUNCATE TABLE
UPDATE