■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
                      2007年12月02日

    楽しいJava講座 - 初心者から達人へのパスポート
                  vol.081

                                セルゲイ・ランダウ
 バックナンバー: http://www.flsi.co.jp/Java_text/
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


[このメールマガジンは、画面を最大化して見てください。]


========================================================
◆ 01.Tomcatのアプリケーション開発
========================================================


では、次に注文(Order)のテーブルのほうですが、これは最低2つの
テーブルで構成することが望ましいです。それは、注文した品目の
個別の明細情報と、注文日や購入者の情報などの共通の情報の2種類の
情報があるためです。

したがって、注文の顧客や注文日などを記録する

[テーブル名]:ORDERHEADER
[カラム]:
 O_NUM(注文番号、整数、プライマリー・キー)
 C_NUM(購入者の顧客番号、文字列、外部キー)
 O_DATE(注文日、日付)
 PAYMENT(料金支払い、整数[0=未払い、1=支払い済み])
 DELIVERY(商品の配達、整数[0=未配達、1=配達済み、2=配達中])

と、注文された個々の商品の情報を記録する

[テーブル名]:ORDERITEM
[カラム]:
 O_NUM(注文番号、整数、プライマリー・キーかつ外部キー)
 SEQ_NUM(注文内の品目の番号、整数、プライマリー・キー)
 I_NUM(商品番号、文字列、外部キー)
 QUANTITY(注文数、整数)

という2つのテーブルで管理することにしましょう。

これら2つのテーブルの役割は具体的な注文書をイメージしていただけ
れば理解できることと思います。

つまり、ORDERHEADERは注文書のヘッダー部分に相当するテーブルで、
注文番号と注文日、顧客の氏名、住所、配達先を書き込んでおく部分
です。ただし、顧客の氏名や住所はCUSTOMERテーブルに書かれていま
すから、ここでは、顧客番号を外部キーとして指定するだけで済みま
す。

また、ORDERITEMは注文した品目情報を書き込むテーブルで、実際の
注文書であれば項目番号と商品番号、商品名、注文数、商品の料金
などが書かれるところですが、商品名、商品の料金などについては、
ITEMテーブルに書かれていますから、ここでは商品番号を外部キー
として指定するだけで済みます。

なお、合計料金はコンピューターで即座に算出できますから、
テーブルには書いていません。
また、本来なら配達先は顧客の住所と異なることもありますが、ここ
では、アプリケーションを簡単にするために「配達先 = 顧客の住所」
ということにしておきます。


なお、上記のカラム名のうち、O_NUMはorder numberの略、C_NUMは
customer numberの略、SEQ_NUMはsequential numberの略、I_NUMは
item numberの略のつもりです。

ちょっと言葉が紛らわしいのですが、itemという単語を英和辞書など
で調べると、項目とか品目とかいう訳しか載っていなくて、商品と
いう訳は載っていないと思います。
itemはショッピング関連の用語としては、カタログや注文書上の項目
(品目)ということから、商品を指す言葉として使われます。
それに対して、sequential numberは直訳すると順次番号のような訳
になってしまいますが、それでは日本語としてはわかりにくいので、
上の説明書きでは「品目の番号」というふうに書いておきました。



では、MySQLを使って、実際にテーブルを作っていきましょう。

まず、MySQLのコマンド・ライン・クライアントを起動します。
そのためには、パソコンの
「スタート」ボタン→「すべてのプログラム」→「MySQL」→
「MySQL Server 5.0」→「MySQL Command Line Client」
を選択します。

rootのパスワードを聞いてきますので、MySQLのインストール時に
設定した

rootpass

を入力しましょう。

そうすると、MySQLのプロンプト(mysql>)が表示されますね。
ここにSQLのコマンド(SQL文)を入力して実行させることができ
ます。


まず、データベースを作成しておきましょう。データベース名は
INTSHOP
にすることにします。


CREATE DATABASE INTSHOP;

というコマンドを入力してください。

なお、最後のセミコロン(;)は文の終わりを表します。もし
セミコロンを入れ忘れると、文がまだ終わっていないものと
判断されてしまい、
->
というプロンプトが現れます。
この場合は、その時点でセミコロン(;)だけを入力すれば済み
ます(コマンドが実行されます)。あるいは
\c
を入力するとコマンドが実行されずにキャンセルされます。



続いて、このデータベースを使用するようにコマンドを送りま
しょう。

use INTSHOP

というふうに入力してください。なお、このコマンドだけ特殊で、
最後にセミコロン(;)が必要ありません。


では、CUSTOMERテーブルを作成しましょう。
以下を入力しましょう。(全部を一挙に入力する必要はありません。
一行ずつ入力していけば、最後のセミコロンで終わる行を入力した
時点で実行されます。)

create table CUSTOMER (
NUM char(5) not null,
NAME varchar(20) not null,
ZIPCODE char(8) not null,
ADDRESS varchar(100) not null,
primary key(NUM)
);


┌注意─────────────────────────┐
MySQLのWindows版では、データベースやテーブルなどの名前は
大文字でも小文字でも区別されませんが、Linux版やUNIX版では
大文字と小文字が区別されてしまいます。
したがって、互換性を維持するためには、Windows版でも、大文字
と小文字を明確に使い分ける習慣をつけることが望ましいです。
さもなければ、たとえばWindowsでテストした後にUNIXにデプロイ
するなどという場合に問題がおきることがあります。
たとえば、Windows環境であろうとUNIX環境であろうと名前はす
べて大文字にする、というふうに決めておけば、問題が生じませ
ん。
└───────────────────────────┘


上記のSQL文のうち、varcharというのは、初めて出てきたと思いますが、
これは、charと同じく文字列の型ですが、データが少ないときは最小限
の記憶域しか取らないように記憶域のサイズが自動的に変えられるもの
です。
たとえば、上記の「varchar(20)」というのは最長(半角英数で)20文字
まで記憶できますが、たとえば3文字のデータしか入力されなかったと
すると3文字分の記憶域しか取られません。
つまり、記憶装置の節約になります。


ところで、このコマンドの入力方法は、ちょっとやりずらいですね。



別のやり方として、コマンドをファイルに保管しておいて、ファイル
から読み込んで実行させる方法もありますので、以後はその方法を
使うことにしましょう。

ここで、いったんMySQLのコマンド・ライン・クライアントを終了して
おきましょう。
終了するためには、

quit

と入力してください。


(次回に続く)


何か、わからないところがありましたら、下記のWebページまで質問を
お寄せください。



┏━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
★ホームページ:
      http://www.flsi.co.jp/Java_text/
★このメールマガジンは
     「まぐまぐ(http://www.mag2.com)」
 を利用して発行しています。
★バックナンバーは
      http://www.flsi.co.jp/Java_text/
 にあります。
★このメールマガジンの登録/解除は下記Webページでできます。
      http://www.mag2.com/m/0000193915.html
★このメールマガジンへの質問は下記Webページにて受け付けて
 います。わからない所がありましたら、どしどしと質問をお寄
 せください。
      http://www.flsi.co.jp/Java_text/
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

Copyright (C) 2007 Future Lifestyle Inc. 不許無断複製