データベースオブジェクトには,表,ビュー,索引,プロシージャなどがあります。
表はデータを格納するオブジェクトです。次の構文で作成することができます。
CREATE TABLE 表名
( 列名 データ型[(有効桁数)] [ 制約 ]
[ , 列名 データ型[(有効桁数)] [ 制約 ], ・・・] )
[ TABLESPACE 表領域名 ] ;
表の作成時には,次のことを定義できます。
- 列名とそのデータ型,有効桁数
- 制約
Oracleが提供する主なデータ型には次のものがあります(表1)。
データ型 | 説明 |
---|---|
NUMBER | 数値 |
DATE | 日付と時刻 |
TIMESTAMP | 日付と最大9桁までの少数秒を含む時刻 WITH TIMEZONE WITH LOCAL TIMEZONE |
CHAR | 固定長文字列 |
VARCHAR2 | 可変長文字列 |
LONG | 可変長文字列。最大2GB |
CLOB | 可変長文字列。最大4GB |
BLOB | バイナリ。最大4GB |
BFILE | 最大4GB |
どういうデータの場合,どのデータ型が最適か,考えておきましょう。住所などの長さが決まらない文字列はCHARではなく,VARCHAR2が適しています。2GBを越える長い文章,例えば論文などを格納する場合は,CLOBがよいでしょう。
制約には,次のものがあります(表2)。
制約 | 説明 |
---|---|
NOT NULL | NULLを許可しない |
UNIQUE | 重複を許可しない。一意キー制約 |
PRIMARY KEY | 識別子。主キー制約。一意でNULLでない値を許可する |
FOREIGN KEY | 参照整合性制約(参照先に存在する値を許可する)。外部キー制約 |
CHECK | 指定した条件を満たしているか評価する |
1つの列に複数の制約を指定することが可能です。例えば,NOT NULL制約とFOREIGN KEY制約を同時に設定することができます。
UNIQUE制約またはPRIMARY KEY制約を定義すると,自動的に「一意索引」が作成されます。また,FOREIGN KEYが参照する列は,異なる表の列でも同じ表の異なる列でも構いません。ただし,参照先の列には,UNIQUEまたはPRIMARY KEY制約が定義されている必要があります。
制約を定義したCREATE TABLE文を次に示します。
CREATE TABLE emp
(empno NUMBER CONSTRAINT emp_pk PRIMARY KEY
,ename VARCHAR2(20) CONSTRAINT emp_nm_nn NOT NULL
,ext VARCHAR2(20) CONSTRAINT emp_ext_u UNIQUE
,sal NUMBER CONSTRAINT emp_sal_ck CHECK(sal > 0)
,mgr NUMBER CONSTRAINT emp_mgr_fk REFERENCES emp(empno));
※empno:社員番号,ename:社員名,ext:内線,sal:給与,mgr:上司の社員番号
CREATE TABLE emp
(empno NUMBER
,ename VARCHAR2(20) CONSTRAINT emp_nm_nn NOT NULL
,ext VARCHAR2(20)
,sal NUMBER
,mgr NUMBER
,CONSTRAINT emp_pk PRIMARY KEY(empno)
,CONSTRAINT emp_ext_u UNIQUE(ext)
,CONSTRAINT emp_sal_ck CHECK(sal > 0)
,CONSTRAINT emp_mgr_fk FOREIGN KEY(mgr) REFERENCES emp(empno));