今回は、新しいテーブルの作成に挑戦してみましょう。これまでのSELECT文に代わって、「CREATE」文の登場です。
CREATE文は、テーブルのみならず、さまざまなデータベース上のオブジェクトを作成するために使われます。また、データベースそのものを作成する場合にも使用します。今回は、新たにMEMBER CARDの情報を保存する「CardInfo」テーブルを作成してみましょう。
テーブルを作成する前に、CardInfoにどのような情報が必要なのかを洗い出す必要があります。次のような項目のリストを作成してみました。
項目名 | 内容 |
---|---|
カード番号 | 6桁の数字のカード番号 |
顧客 | カード発行先の顧客 |
発行日 | 発行した年月日 |
有効期限 | 有効期限の年月日(通常は、発行日から1年間) |
発行した従業員 | カードを発行した従業員 |
この項目リストをもとに、各項目をどのようにデータベース上に格納するかを検討します。ここで検討が必要なのは、データを直接テーブルへ格納するか、ほかのテーブルの情報を参照するキー値を格納するかです。今回の例では、顧客と従業員の項目は、それぞれCustomersテーブルとEmployeesテーブルを参照するように、キー値であるID列を格納することにしました。データベースの設計方法については、ここでは詳細には触れませんが、回を改めて解説したいと考えています。
項目名 | 内容 |
---|---|
カード番号 | カード番号を文字情報としてテーブルへ格納する |
顧客 | CustomersテーブルのCustomerIDをテーブルへ格納する |
発行日 | 日付情報としてテーブルへ格納する |
有効期限 | 日付情報としてテーブルへ格納する |
発行した従業員 | EmployeesテーブルのEmployeeIDをテーブルへ格納する |
これらの情報をもとに、テーブルの列の定義を次のとおりとします。CustomerIDとEmployeeIDは、それぞれCustomers、Employeesの定義と同じデータ型としている点に注意してください。
項目名 | 列名 | データ型 |
---|---|---|
カード番号 | CardID | nchar(6) |
顧客 | CustomerID | nchar(5) |
発行日 | IssueDate | datetime |
有効期限 | ExpireDate | datetime |
発行した従業員 | EmployeeID | int |
SQL Serverで取り扱える主なデータ型は、次のリストのとおりです。
分類 | データ型名 | 説明 |
---|---|---|
数値型 | int | 整数データを格納するデータ型 記憶域サイズ:64bits 範囲:-2^31 (-2,147,483,648) 〜 2^31 - 1 (2,147,483,647) |
decimal | 固定長桁数、固定長小数桁数を持つ数値データを格納するデータ型 範囲:桁数最大38桁(標準セットアップでは28桁) |
|
money | 通貨を格納するデータ型 記憶域サイズ:64bits 範囲:-2^63(-922,337,203,685,477.5808)〜2^63 - 1(+922,337,203,685,477.5807) |
|
float | 浮動小数点数値を格納するデータ型 記憶域サイズ:64bits、128bits 範囲:- 1.79E + 308 〜1.79E + 308 |
|
文字列型 | char、nchar | 8000文字以内の固定長の文字列を格納するデータ型。UNICODEで格納する場合はncharを使用する(4000文字以内) |
varchar、nvarchar | 8000文字以内の可変長の文字列を格納するデータ型。UNICODEで格納する場合はnvarcharを使用する(4000文字以内) | |
text、ntext | 約20億文字以内の可変長の文字列を格納するデータ型。UNICODEで格納する場合はntextを使用する(約10億文字以内) | |
日付型 | datetime | 日付を格納するデータ型 範囲:1753 年 1 月 1 日〜9999 年 12 月 31 日 精度:3.33ミリ秒 |
ほかにも幾つかのデータ型がありますので、用途に応じて使い分ければよいでしょう。
なお、UNICODEへの対応がこのバージョンより拡張されており、頭に「n」が付く文字列データ型が追加されています。これまでサンプルとして使用してきた、「Northwind」データベースも、UNICODE対応の「n」文字型を使用しています。今後の例題では、Northwindデータベースに倣って「n」文字型を使用していきます。実際のアプリケーションでデータベースを作成していく際は、特に文字数の制限が制約とならない場合は、「n」文字型の使用を標準としていくことをお勧めします。
では、実際にテーブルを作成してみましょう。次のSQL文を実行します。
【例1】
CREATE TABLE CardInfo ( CardID nchar(6), CustomerID nchar(5), IssueDate datetime, ExpireDate datetime, EmployeeID int )
CREATE文はまず、「何」を作成するのかの指定をCREATEの後に記述します。ここでは、テーブルを作成するので、CREATE TABLEとしました。このほかに、CREATE DATABASEやCREATE VIEWのように、オブジェクトのタイプを指定することができます。CREATE TABLEの後には、( )の中に、カラム名をデータ型の指定とともに列挙します。ncharの後ろの( )の中の数字は、文字列の桁数の指定です。
さて、テーブルが実際に作成されたかどうかを確認するために、次のSQL文を実行してみましょう。
【例2】
SELECT * FROM CardInfo
データが1件も登録されていないテーブルが作成されたのが分かりますね。テーブルがカラム名を含めて、指定したとおりに作成されたかどうかを確認するには、次のコマンドを実行することでも可能です。
【例3】
sp_help CardInfo
sp_helpというコマンドは、データベースオブジェクトの定義情報を返すシステムストアドプロシージャです。ストアドプロシージャは、SQLによるユーザー定義の関数です。SQL Serverは、システムの管理を容易にするために、幾つかのストアドプロシージャを標準で提供しています。sp_helpも標準で提供されるストアドプロシージャの1つです。sp_helpの後にテーブル名などのデータベースオブジェクト名を指定すると、その定義を結果としてリストします。
テーブル名が「CardInfo」で、5つのフィールドが指定どおりに作成されていることが確認できますね。画面には表示しきれていないですが、右側にスクロールすると、データ型の確認もできますので、参照してみてください。
CREATE文を使用しなくても、SQL Server Enterprise Managerでテーブルの作成が可能です。その手順を紹介しましょう。
まずは、スタートメニューから「SQL Server Enterprise Manager」を起動し、Northwindデータベースを左側の階層リストから選択し、さらに「テーブル」を選択します。
いま追加した、「CardInfo」テーブルがリストされているのが分かりますね。まずは確認のために、定義情報を表示させてみましょう。CardInfoテーブルを右クリックし、「プロパティ」を選択します。
確認が済んだら、プロパティ画面を閉じ、左側のペインの「テーブル」オブジェクトを右クリックし、「新規テーブル」を選択します(右側のテーブルリストが表示されている個所を右クリックしても「新規テーブル」は選択可能です)。
新規に作成するテーブル名を入力します。ここでは、「CardInfo2」とします。
次に、CardInfoと同じ内容でカラムを定義します。「列名」「データ型」を順に入力していきます。ncharのフィールドは、「長さ」も同様に入力しましょう。入力が終わったら、左上のディスクのアイコンをクリックし、保存をするとテーブルが作成されます。
先ほどのCardInfoと同様にテーブルが作成されているか、SQL Server Enterprise Managerかsp_helpで確認しましょう。
今回は、CREATE文とEnterprise Managerでのテーブルの作成の解説をしました。次回は、テーブル定義の詳細について解説をしていきます
Copyright © ITmedia, Inc. All Rights Reserved.