TiDB データベース スキーマ設計の概要
このドキュメントでは、TiDB のオブジェクト、アクセス制御、データベース スキーマの変更、オブジェクトの制限など、TiDB データベース スキーマ設計の基本について説明します。
以降のドキュメントでは、 書店例として、データベースを設計し、データベースでデータの読み取りおよび書き込み操作を実行する方法を示します。
TiDB のオブジェクト
いくつかの一般的な用語を区別するために、TiDB で使用される用語について簡単に説明します。
一般的な用語データベースとの混同を避けるために、このドキュメントのデータベースは論理オブジェクトを指し、 TiDBは TiDB 自体を指し、クラスターはTiDB のデプロイされたインスタンスを指します。
TiDB は MySQL 互換の構文を使用します。この構文では、スキーマはデータベース内の論理オブジェクトではなく、一般的な用語スキーマを意味します。詳細については、 MySQL ドキュメントを参照してください。論理オブジェクトとしてスキーマを持つデータベース (たとえば、 PostgreSQL 、 オラクル 、およびマイクロソフト SQL サーバー ) から移行する場合は、この違いに注意してください。
データベース
TiDB のデータベースは、テーブルやインデックスなどのオブジェクトのコレクションです。
TiDB にはtest
という名前のデフォルト データベースが付属しています。ただし、 test
データベースを使用する代わりに、独自のデータベースを作成することをお勧めします。
テーブル
テーブルは、関連するデータをデータベースに集めたものです。
各テーブルは行と列で構成されます。行の各値は特定の列に属します。各列には 1 つのデータ型のみが許可されます。列をさらに修飾するには、いくつかの制約を追加できます。計算を高速化するために、 生成された列 (実験的機能)を追加できます。
索引
インデックスは、テーブル内の選択された列のコピーです。 テーブルの 1 つ以上の列を使用してインデックスを作成できます。インデックスを使用すると、TiDB はテーブル内のすべての行を毎回検索することなくデータをすばやく見つけることができるため、クエリのパフォーマンスが大幅に向上します。
インデックスには、次の 2 つの一般的なタイプがあります。
- Primary Key : 主キー列のインデックス。
- セカンダリ インデックス: 非主キー列のインデックス。
ノート:
TiDB では、 Primary Keyのデフォルト定義がInnoDB (MySQL の一般的なstorageエンジン) とは異なります。
- InnoDB では、 Primary Keyの定義は一意であり、null ではなく、クラスター化されたインデックスです。
- TiDB では、 Primary Keyの定義は一意であり、null ではありません。ただし、主キーがクラスター化インデックスであるとは限りません。主キーがクラスター化インデックスかどうかを指定するには、
CREATE TABLE
ステートメントのPRIMARY KEY
の後に予約されていないキーワードCLUSTERED
またはNONCLUSTERED
を追加します。ステートメントでこれらのキーワードが明示的に指定されていない場合、デフォルトの動作はシステム変数@@global.tidb_enable_clustered_index
によって制御されます。詳細については、 クラスタ化インデックス参照してください。
特殊なインデックス
さまざまなユーザー シナリオのクエリ パフォーマンスを向上させるために、TiDB はいくつかの特殊なタイプのインデックスを提供します。各タイプの詳細については、 索引付けと制約を参照してください。
サポートされているその他の論理オブジェクト
TiDB は、 tableと同じレベルで次の論理オブジェクトをサポートします。
- ビュー : ビューは仮想テーブルとして機能し、そのスキーマはビューを作成する
SELECT
ステートメントによって定義されます。 - シーケンス : シーケンスはシーケンシャル データを生成して格納します。
- 一時テーブル : データが永続的でないテーブル。
アクセス制御
TiDB は、ユーザーベースとロールベースの両方のアクセス制御をサポートしています。ユーザーがデータ オブジェクトとデータ スキーマを表示、変更、または削除できるようにするには、 権限からユーザー直接付与するか、 権限から役割までをユーザーに付与します。
データベース スキーマの変更
ベスト プラクティスとして、ドライバまたは ORM の代わりにMySQL クライアントまたは GUI クライアントを使用してデータベース スキーマの変更を実行することをお勧めします。
オブジェクトの制限
詳細については、 TiDB の制限事項を参照してください。