InterBaseのインストール

InterBaseは本格的な運用も可能なデータベースで、オープンソースといえども非常に優秀なデータベースです。
本格的なSQLデータベースなのでMicrosoft Accessのような手軽さはありませんが、
中小規模の開発には十分な機能を持ち合わせています。

米BorlandのサイトからInterbaseのOpenSource版をダウンロード。
Windowsのバイナリ「InterBase_WI-V6.0.1-server.zip」
圧縮ファイルを復元後Setup.exeを実行し、インストールを行ってください。

インストール初期画面
Next
Next
Yes
必要なモジュールをチェックしてInstall。
私はSample ProgramsとSample Databasesがいらないのでチェックを外しています。
Finish


インストール後、InterBaseのサービス が開始していることを確認したら、
[スタート]-[プログラム]-[InterBase]-[IBConsole]
を起動してください。



[LocalServer]をダブルクリックするとServer Loginダイアログが表示されるので、
ユーザ名「SYSDBA」
パスワード「masterkey」
を入力し、ログインします。
インストール直後はDBがないので、データベースを作ってみましょう。


※初期ユーザ「SYSDBA」のパスワードは必ず変更しましょう。


DB領域の作成

目的もなくデータベースを作成しても面白くないので、
郵便番号と住所のデータベースを作成することにします。

IBConsoleの[Tools]-[Interactive SQL]
でSQLコマンドの入力フォームを開きます。
テーブルを作る前に、データベース領域を作成します。
CREATE DATABASE 'C:\Interbase\Address.GDB'
USER 'SYSDBA'
PASSWORD 'masterkey';
※C:\InterBaseというフォルダにAddress.GDBというデータベース領域を作成します。

上記CREATE DATABASE文を実行するとデータベース領域が作成されます。
エクスプローラなどで、Address.GDBが作成されていることを確認してください。

ここまできたらInteractive SQLフォームを閉じてください。
IBConsoleのDatabasesを右クリックしRegisterを選択すると、以下のフォームが表示されます。



Fileの部分に作成したAddress.GDBを選択、User/Passwordを入力し、OKボタンを押してください。
Databasesのひとつ下のインデントにAddress.GDBが登録されたら成功です。

IBConsoleを見るとAddress.GDBのアイコンに赤いバツがついていると思います。


これはAddress.GDBに接続していないことをあらわしています。
Address.GDBを右クリックして[Connect]を選択する(またはダブルクリックする)と青いチェックに変更になります。
この状態が接続を表します。

この状態でInteractive SQLを開いてみると、Interactive SQLのタイトルバーに
Interactive SQL - ADDRESS.GDB
と表示されていると思います。
これは、Interactive SQLがAddress.GDBに対して操作を行える状態であることを意味します。





テーブルの作成

全国の郵便番号データは、ゆうびんホームページにあります。
ここから
[新郵便番号検索]-[住所の新郵便番号ダウンロードサービス]
のリンクをたどり、 郵便番号データをダウンロードしてください。
全国一括データのような大量のデータを扱ってもいいですが、
テストとして自分の住んでいる地域のデータでもいいでしょう。
東京都のデータ『13tokyo.lzh』は37,965 バイト(37KB)と手ごろなサイズなので、
このファイルを使って説明を進めます。

圧縮ファイルは『13TOKYO.CSV』というファイルに復元されます。
行数は2971行で、ファイルレイアウトはここにあるとおり、

  1. 全国地方公共団体コード(JIS X0401、X0402)……… 半角数字
  2. 現郵便番号(5桁)……………………………………… 半角数字
  3. 新郵便番号(7桁)……………………………………… 半角数字
  4. 都道府県名 ………… 半角カタカナ(コード順に掲載) (注1)
  5. 市区町村名 ………… 半角カタカナ(コード順に掲載) (注1)
  6. 町域名 ……………… 半角カタカナ(五十音順に掲載) (注1)
  7. 都道府県名 ………… 漢字(コード順に掲載) (注1,2)
  8. 市区町村名 ………… 漢字(コード順に掲載) (注1,2)
  9. 町域名 ……………… 漢字(五十音順に掲載) (注1,2)
  10. 一町域が二以上の新郵便番号で表される場合の表示 (注3) (「1」は該当、「0」は該当せず)
  11. 小字毎に番地が起番されている町域の表示 (注4) (「1」は該当、「0」は該当せず)
  12. 丁目を有する町域の場合の表示 (「1」は該当、「0」は該当せず)
  13. 一つの新郵便番号で二以上の町域を表す場合の表示 (注5) (「1」は該当、「0」は該当せず)
  14. 更新の表示(注6)(「0」は変更なし、「1」は変更あり、「2」廃止(廃止データのみ使用))
  15. 変更理由 (「0」は変更なし、「1」市政・区政・町政・分区・政令指定都市施行、「2」住居表示の実施、「3」区画整理、「4」郵便区調整、集配局新設、「5」訂正、「6」廃止(廃止データのみ使用))
となっています。
郵便番号は『3.新郵便番号』、
住所は『7.都道府県名』『8.市区町村名』『9.町域名』をあわせたものにします。

テーブルは以下のように作ります。
No 項目名 定義名 データ型 サイズ
1 郵便番号 ZIP_CODE CHAR 7
2 住所 ADDRESS VARCHAR 90
※CHARは固定長、VARCHARは可変長です。

ここまで決まったら、テーブルを作ってみましょう。

Interactive SQLフォームから、以下のSQLを実行するとテーブルが作成されます。

CREATE TABLE "ADDRESS" (
  "ZIP_CODE"     CHAR(7) NOT NULL,
  "ADDRESS"      VARCHAR(90)
);
郵便番号は、一意ではないので、PrimaryKeyはつけられません。
もしPrimaryKeyをつける場合、
CREATE TABLE "ADDRESS" (
  "ZIP_CODE"     CHAR(7) NOT NULL,
  "ADDRESS"      VARCHAR(90),
  PRIMARY KEY ( "ZIP_CODE" )
);
という記述になります。
Indexの作成は、以下の記述で行えます。
CREATE INDEX IDX_ZIP ON ADDRESS ( "ZIP_CODE" );




データの投入

ここにきて問題発生。
どうやってデータを投入しようか、ということ。
1行1行SQLを作成してINSERTしていくほどバカらしいことはないので、
CSVデータからINSERT文を作成するツールをフリーウェアで作成してみます。
(まだ記事を書いていません。近日公開予定)

上記のリンクで作ったツールでできたファイルを仮に『TOKYO.SQL』とすると、
InteractiveSQLから[Query]-[LoadScript]でTOKYO.SQLを読み込み、
クエリを実行してデータの登録を行ってください。
最後にCOMMITするのをお忘れなく。





データの抽出

Interactive SQLでSQLを実行し、データが登録されているか調べてみましょう。
SELECT * FROM ADDRESS;
ADDRESSフィールドの値が文字バケしていると思います。
これは、InterBaseが2バイト文字表示に対応していないためです。
データは正しく登録されているので、日本語表示の可能なツールで表示して
確認してください。

IBConsoleから
[Address.GDB]-[Tables]
を選び、右側に表示されたAddressテーブルをダブルクリックすると、
テーブルのプロパティフォームが開きます。
そのフォームの[Data]タブをクリックすると、テーブルに登録されているデータが表示されます。
ここでは日本語も問題なく表示されます。



ユーザ定義関数

InterBaseのドキュメントは参照しましたか?
見た方は気づいたと思いますが、組み込み関数が少ないのです。
組み込み関数が少ないと、ちょっとしたことができなくてすぐに行き詰ってしまいます。
そこで登場するのがユーザ定義関数(UDF)です。
UDFは自分で作成することもできますが、今回は公開されているものを登録してみましょう。

このリンクにおいてあるZIPファイルをダウンロードし、復元してください。
たくさんファイルが出てきますが、使うのは の2つのファイルだけです。

FreeUDFLib.dllは、C:\Program Files\Borland\Interbase\UDFにコピーします。
ext_funcs.sqlは、Interactive SQLから
[Query]-[Load Script]
で読み込み、実行します。
こうすることで、非常に多くの関数をSQLから使えるようになります。



InterBase情報

FireBirdというプロジェクトがInterBase6を拡張しています。
またtwise labo.という会社がFireBird1.0を日本語化したものを公開しています。
InterBaseはドキュメントも公開されています。
InterBase 6.0 Beta Documentation Setを参照してください。