Java World の 5月号に O/R マッピングについての記事が載っていました。
現在でもサンプルのソースは Java World のサイトからダウンロードできるようになっています。
これを iSeries を使ってテストしてみようと考えて、いろいろ見ていて気がついたことがありますが、やはりこういうケースで一番の注意点はデータベースアクセスに使われる SQL の修正ですね。
最近、MySQL がデータベースの例として使われているのをよく目にします。
今回の記事も、データベース作成用の SQL が MySQL 用になっていますので DB2
用に修正する必要がありました。
オリジナルから太字のところを DB2 用に修正してあります。
auto_increment というデータ型は DB2 ではなく、上の例のように GENERATED ALWAYS AS IDENTITY で同様の指定をします。
create table BID_ENTRY ( BID_NUMBER integer not null auto_increment, USER_NAME varchar(40) not null, PRICE numeric(19, 0) not null, AUCTION_ITEM_ID varchar(255), primary key (BID_NUMBER) ); |
datetime というデータ型も今のところなく、timestamp と指定します。
create table AUCTION_ITEM ( AUCTION_ITEM_ID varchar(255) not null, TITLE varchar(40) not null, OWNER_USER_NAME varchar(40) not null, FINISH_DATE_TIME datetime not null, START_PRICE numeric(19, 0) not null, primary key (AUCTION_ITEM_ID) ); |
インデックスの作成も一緒にしていますが、DB2 ではインデックスを create index
文で作成します。
これが外部キーのためだけのインデックスなのであればわざわざ作成する必要はないかもしれませんが
...... DB2/400 について言えば、MySQL のように必須ではありません。
外部キーとなっている、ということから結合や選択に頻繁に使用されると予想されますので、当該カラムに対するインデックスを作成しておいた方が実際時には有用でしょう。
alter table BID_ENTRY add index FK8C0F9A70FC27FBAB (AUCTION_ITEM_ID), add constraint FK8C0F9A70FC27FBAB foreign key (AUCTION_ITEM_ID) references AUCTION_ITEM (AUCTION_ITEM_ID); |
修正後の DB2 用の SQL です。
最初にスキーマの作成とセットを入れています。
わかりやすくするため、一番最初にあった同名の既存データベースオブジェクトを削除する部分を取り除いてあります。
create schema auction; set schema auction; create table BID_ENTRY ( BID_NUMBER integer not null GENERATED ALWAYS AS IDENTITY, USER_NAME varchar(40) not null, PRICE numeric(19, 0) not null, AUCTION_ITEM_ID varchar(255), primary key (BID_NUMBER) ); create table AUCTION_ITEM ( AUCTION_ITEM_ID varchar(255) not null, TITLE varchar(40) not null, OWNER_USER_NAME varchar(40) not null, FINISH_DATE_TIME timestamp not null, START_PRICE numeric(19, 0) not null, primary key (AUCTION_ITEM_ID) ); alter table BID_ENTRY add constraint FK8C0F9A70FC27FBAB foreign key (AUCTION_ITEM_ID) references AUCTION/AUCTION_ITEM (AUCTION_ITEM_ID) on delete no action on update no action; create index BID_AUCTION_ITEM_ID on BID_ENTRY (AUCTION_ITEM_ID); |
|
|