この記事では、さまざまな種類のSQLテーブルと、SQLServerでユーザー定義テーブルを作成するためのベストプラクティスについて説明します。
テーブルは、リレーショナルデータベースにデータを格納するための主要なオブジェクトです。表を視覚化するには、Excelスプレッドシートを検討してください。スプレッドシートは、データを行と列の形式で整理します。同様に、リレーショナルデータベースは複数のテーブル(シート)を使用してデータを整理します。
- 行 :レコードを一意に識別します。たとえば、行1のデータは[Raj]という名前の従業員に属しています。別の従業員のデータを保存することはできません。
- 列 :各列はテーブルの属性を定義します。たとえば、[FirstName]列には、すべての従業員の名が格納されます。 [City]などの他のデータをこの列に保存することはできません。
SQLデータベースに[Employee]テーブルが必要だとします。このテーブルには、会社の従業員レコードが格納されます。 [EmpID]列には、正の数(小数点なし)が必要です。この場合、[integer]データ型が最適です。 [EmpID]列を整数として定義すると、SQLServerでは整数データ型を満たさない値を挿入できなくなります。たとえば、[EmpID[列]に文字列「Raj」を挿入することはできません。
SQLテーブルの作成
大まかに言うと、SQLテーブルを作成するには、次の情報が必要です。
- オブジェクトストレージのSQLインスタンスとデータベース名は何ですか?
- テーブルをどのスキーマに保存しますか?
- 特定のテーブルの列名は何ですか?
- これらの列のデータ型は何ですか?
- 列でNULL値を格納できますか?
- 主キー列を使用していますか?はいの場合、どの列が主キー列として機能しますか?
- 非クラスター化インデックスを作成しますか?
このデモンストレーションでは、これらの質問に対する次の回答を使用して、従業員テーブルを作成しましょう。
- 回答1:ターゲットデータベース名は[AzureDemoDatabase]
- 回答2:テーブルをデフォルトのDBOスキーマに保存したい
- 回答3:[Employee]テーブルには、[ID]、[FirstName]、[LastName]、[City]、[DOB]の5つの列が必要です。
- 回答4:[Employee]テーブルは次のデータ型を使用する必要があります。
- [ID]:整数
- [FirstName]:Varchar(50)NOT NULL
- [LastName]:Varchar(30)NOT NULL
- [市]:Varchar [50] NULL
- [DOB]:DATE NOT NULL
- 上記で定義されたNULLプロパティ
- はい、[ID]列は主キー列です
- いいえ、必要なのはクラスター化インデックスのみです
SQLテーブルの種類
SQL Serverテーブルは、次のカテゴリに分類できます。
システムテーブル
SQL Serverは、インスタンス構成とデータベースプロパティを特別なテーブルセットに格納します。これらのテーブルは、システムテーブルと呼ばれます。ユーザーは、これらのテーブルに直接変更を加えることはできません。 SQL Serverでは、特定のシステムテーブルを直接クエリすることはできません。代わりに、これらのコンポーネントを照会するためのシステムストアドプロシージャ、関数、SQLServer管理オブジェクトおよびレプリケーション管理オブジェクトを提供します。システムテーブルをより詳細に理解するには、Microsoftのドキュメントを参照してください。
一時テーブル
場合によっては、計算、操作、または中間結果の保存のために、データをデータベースに一時的に保存する必要があります。このような場合、TempDBシステムデータベースに常に保持されている一時テーブルを利用できます。
SQL Serverには、次の2種類の一時テーブルがあります。
- ローカル: 各ローカル一時テーブルは記号(#)で始まります。その範囲は現在の接続に限定されます。ユーザーが切断すると、SQLServerはこれらのテーブルを自動的に削除します。
- グローバル: 各グローバル一時テーブルは、符号(##)で始まります。すべてのユーザーは、グローバル一時テーブルを参照できます。グローバルテーブルを参照しているすべてのユーザーが接続されている場合、SQLServerはそれを削除します。
–TEMPORARYテーブル(ローカル)
テーブル#TableAを作成
(
ID int、
[Name] varchar(50)
)
–グローバル一時テーブル
テーブルの作成## TableB
(
ID int、
[Name] varchar(50)
)
永続テーブルまたはユーザー定義テーブル
ユーザーは、アプリケーションの要件に応じて、独自のテーブル構造、列、データ型、制約、およびインデックスを定義できます。これらのテーブルはユーザー定義テーブルと呼ばれます。
これらのテーブルは、誰かが明示的に削除しない限り、常にデータベースに保存されます。したがって、これらは永続テーブルとも呼ばれます。
SQLServerでユーザー定義テーブルを作成する方法は複数あります。
- SQL Server Management Studio GUI
- T-SQLスクリプトの使用
–永続テーブル
テーブルTableAを作成します
(
ID int、
[Name] varchar(50)
)
外部テーブル
外部テーブルは、SQLServer2016以降で使用できる特定の種類のテーブルです。これらのテーブルは、SQL ServerのPolyBase機能を使用して、Azure BLOBストレージ、Hadoop、Oracle、Excel、ODBC、Bigdata、MongoDB、Teradataなどの他のデータソースを参照しています。
このドキュメントを参照して、SQLServerのPolyBaseをさらに詳しく調べることができます。
グラフテーブル
SQL Serverグラフデータベースは、さまざまなノード(頂点)とエッジ(関係)のコレクションを使用します。
- ノードテーブル :ノードテーブルは、類似したタイプのノードのコレクションです。たとえば、人物ノードテーブルには、グラフ内のすべての人物ノードが含まれます。
- エッジテーブル :エッジテーブルは、類似したエッジのコレクションです。たとえば、フレンドテーブルには、ある人を別の人に接続するすべてのエッジが含まれます。
これをさらに詳しく調べるには、グラフデータベースのカテゴリを参照してください。
SQLServerでユーザー定義テーブルを作成するためのガイドライン
- テーブル名の適切な命名規則を定義します。
- 異なるスキーマを使用して、類似したテーブルオブジェクトをグループ化します。
- 主キーや外部キーなどのSQLServer制約を使用して、参照整合性が維持されていることを常に確認してください。
- データの読み取りと書き込みをすばやく行うために、常に適切なデータ型とその長さを定義してください。
- データベースの正規化手法を使用して、データの冗長性を減らし、データの整合性を向上させます。
- さまざまな正規化形式とその使用方法を理解します。 (この記事を参照できます:SQL Serverのデータベース正規化とは何ですか?)
- クエリワークロードに適したインデックスを定義します。
- データベースモデリングとベストプラクティスの適用に関するアドバイスについては、常にデータベースの専門家に相談してください