データベースのテーブルは、データオブジェクト間の関係を表現し、データを格納するための一連の二次元配列の集合です。この章では、テーブルに関連するデータベースオブジェクトおよびテーブルの使用特性について説明します。これには、テーブルストレージ、テーブル圧縮、テーブルグループ、一時テーブルなどが含まれます。
データベースにおいて、テーブルはデータの基本単位であり、縦の列と横の行で構成されています。例えば、著者情報に関するテーブルの名前を「著者」とします。テーブル内の各列は、すべての著者の特定の種類の情報(例:姓)を含み、各行は特定の著者のすべての情報(例:姓、名、住所など)を含みます。指定されたデータベーステーブルにおいて、列数は通常テーブル作成時に決定され、列名によって識別されます。一方、行数は動的に変更可能です。
テーブルは通常テーブルと一時テーブルに分けられます。OceanBaseデータベースのOracleモードでは、一時テーブルのライフサイクルは通常テーブルと同じです。一時テーブルは作成後、すべてのセッション(session)から見える状態になり、明示的にDROPコマンドを実行しない限りクリーンアップされません。一時テーブルは通常テーブルの名前空間を占有するため、オブジェクト名は通常テーブル名と同じにすることはできません。また、DROPコマンドで削除してもゴミ箱には入りません。
一時テーブルのデータクリア戦略は、セッションレベルとトランザクションレベルに分かれています。セッションレベルの一時テーブルデータは、各セッションごとに個別に保存され、セッション間で相互に干渉しません。セッションが切断されるとデータはクリーンアップされます。一方、トランザクションレベルの一時テーブルデータは、トランザクションがコミットされる際にクリーンアップされます。
列
データベースにおいて、列(Column)はテーブル上の特定の属性のフィールド値を記録するために使用されます。ユーザーが各属性に付けた名前が列名です。列名に加え、列にはデータ型やデータ型の最大長(精度)などの情報も含まれます。
通常の列に加え、OceanBaseデータベースのOracleモードでは、仮想列(Virtual Column/Generated Column)と非表示列(Invisible Column)も含まれます。
仮想列は通常の列のように実際の物理ストレージ領域を持たず、クエリ時にユーザーが仮想列に定義した式または関数を用いて結果を計算します。
非表示列は、クエリ時に列名が明示的に指定された場合にのみユーザーに表示されます。SELECT *でテーブルデータをクエリする場合、非表示列はユーザーには見えません。非表示列は、データ移行や既存のアプリケーションへの機能拡張に多く利用されます。
行
データベースにおいて、行(Row)はテーブル内の単一レコードにおけるすべての列のデータ集合を表します。簡単に言えば、データベースは列と行で構成されていると考えることができます。テーブル内の各行は一連の関連データを表し、テーブル内の各行は同一の構造を持ちます。
例えば、企業情報に関するデータテーブルでは、各行が一社の企業を表し、対応する列は企業名、企業の住所、付加価値税番号などの内容を表す可能性があります。