ColumnName ColumnDataType
[DEFAULT DefaultVal |
[NOT] INLINE |
[NOT] NULL] |
[PRIMARY KEY ] | [ UNIQUE]
]
列定義には、次のパラメータがあります。
ColumnName | 新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。表には最大255の列を定義できます。 |
DEFAULT DefaultVal | INSERTで、列の値が指定されていない場合、デフォルト値DefaultValを列に挿入します。指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。 DefaultValの有効なデータ型は、次のいずれかです。 ConstantValue: 詳細は、「定数」を参照してください。 デフォルト値がユーザーのいずれかである場合、列のデータ型は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とともに使用することはできません。 |
ハッシュ索引は、一定数のバケットで生成されます。バケットの数は、ALTER TABLE文を使用してハッシュ索引のサイズが変更されないかぎり、表の存続期間中は一定に保たれます。ハッシュ索引のバケット数が少ないと、ハッシュの衝突が発生しやすくなります。バケットの数を増やすと衝突は減少しますが、より多くのメモリーを消費します。ハッシュ・キーの比較は高速で実行されるため、少数のハッシュの衝突がTimesTenのパフォーマンスに影響することはありません。デフォルトの設定では、20行ごとにバケットが1つ作成されます。
バケットの数は、PAGES値から生成される表のカーディナリティの最大数の割合として、値20までの間に設定されます。UNIQUE HASH ON句が省略されている(および、そのためにPAGESに対して値が指定されていない)場合、TimesTenでは200バケットを含むハッシュ索引が作成されます。この値は最大4,000行の表に適しています。
ハッシュ索引の正確なサイズを設定するには、アプリケーションにおいて表の想定サイズを指定する必要があります。これにはPAGESパラメータを使用します。PAGESパラメータには、表の想定行数を256単位で指定します(256はTimesTenで各ページに保存される行数の単位で、表の想定ページ数が値として設定されます)。メモリーの使用量を抑える必要がない場合は、アプリケーションでPAGESに多めの値を設定できるため、バケット当たりの行数が平均して少なくなります。
ハッシュ索引は、主キーである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);
ハッシュ索引は、主キーであるClubName列に作成されます。
CREATE TABLE Recreation.Clubs (ClubName CHAR(15) NOT NULL PRIMARY KEY, ClubPhone SMALLINT, Activity CHAR(18)) UNIQUE HASH ON (ClubName) PAGES = 30;
ハッシュ索引は、2つの列MemberNameおよびClubで作成されます(共に主キーであるため)。
CREATE TABLE Recreation.Members (MemberName CHAR(20) NOT NULL, Club CHAR(15) NOT NULL, MemberPhone SMALLINT, PRIMARY KEY (MemberName, Club));
Recreation.Events表にはハッシュ索引は作成されません。
CREATE TABLE Recreation.Events (SponsorClub CHAR(15), Event CHAR(30), Coordinator CHAR(20), Results VARBINARY(10000));
ハッシュ索引は、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;
ハッシュ索引は、列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;
ハッシュ索引は、列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));
次の文では、VARCHAR列のデフォルト文字が優先され、1つのVARCHAR (10)列がNOT INLINEで、1つのVARCHAR (144)がINLINEである表が作成されます。
次の文では、本のタイトルの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));
次の文では、列x1のデフォルト値が1で、列dのデフォルト値がSYSDATEである表が作成されます。