3.3.2 テーブルの作成

データベースの作成は簡単な部分ですが、SHOW TABLES が示すとおり、この時点では空です。

mysql> SHOW TABLES;
Empty set (0.00 sec)

難しい部分は、データベースの構造、つまり、どのようなテーブルが必要で各テーブルにどのようなカラムを含めるかを決定することです。

各ペットの記録を格納するテーブルが必要です。このテーブルには、pet という名前を付けることができ、少なくとも各ペットの名前を含めるべきです。名前自体には深い意味はないため、このテーブルにはほかの情報も含めるとよいでしょう。たとえば、家族の複数のメンバーがペットを飼っている場合は、各ペットの所有者を記録することができます。種や性別などの基本的な説明も記録できます。

年齢はどうでしょうか。重要な情報ではありますが、データベースに格納するには適しません。年齢は時間の経過によって変化するため、記録を頻繁に更新する必要が生じます。代わりに、生年月日などの固定値を格納する方が適切です。そうしておけば、年齢が必要になったときに、現在の日付と生年月日の差として計算することができます。MySQL には日付演算を行う関数が用意されているため、これは難しくありません。年齢の代わりに生年月日を格納することには、ほかの利点もあります。

  • たとえば、ペットの誕生日が近づいたらリマインダを生成するといったタスクにデータベースを使用できます。(このようなクエリーには意味がないと感じる場合、現在の週や月で誕生祝いのメッセージを送信する必要のあるクライアントを特定するためにビジネスデータベースを使用する場合と、コンピュータ支援の接客という点で同じ問題であることに注目してください。)

  • 現在の日付ではなく、別の日付を基にして年齢を計算することもできます。たとえば、データベースに死亡日を格納すると、ペットが何歳で死んだかを簡単に計算できます。

pet テーブルに含めると役立ちそうな情報はほかにもあるでしょうが、ここまでに挙げた名前 (name)、所有者 (owner)、種 (species)、性別 (sex)、生年月日 (birth)、および死亡年月日 (death) で十分です。

CREATE TABLE ステートメントを使用して、テーブルのレイアウトを指定します。

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
    -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

nameowner、および species の各カラムではカラム値の長さが変化するため、これらのカラムに VARCHAR を選択することは適切です。これらのカラム定義の長さは、すべて同じである必要はなく、20 である必要もありません。通常は、1 から 65535 までの範囲で、もっとも適切と思われる任意の長さを選択できます。選択が適切でなく、あとでより長いフィールドが必要になった場合は、MySQL の ALTER TABLE ステートメントを利用できます。

ペットのレコードで性別を表す値としては、'm''f'、または 'male''female' など、いくつかの種類を選択できます。1 文字の 'm''f' を使用するのがもっとも簡単です。

birth カラムと death カラムに DATE データ型を使用することはかなり明白な選択です。

テーブルを作成したあとは、SHOW TABLES で何か出力されるはずです。

mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet                 |
+---------------------+

想定どおりにテーブルが作成されたことを確認するには、DESCRIBE ステートメントを使用します。

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

DESCRIBE ステートメントは、テーブル内のカラムの名前や型を忘れた場合などに、いつでも使用できます。

MySQL のデータ型に関する詳細は、第11章「データ型を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.