Index: [Article Count Order] [Thread]

Date:  Tue, 17 Jun 2003 19:01:21 +0900
From:  Takuto Wada <t-wada@....jp>
Subject:  [XP-jp:04480] Re: XP 開発で DB ( was: 初めまして。そして質問です。)
To:  extremeprogramming-jp@....jp
Message-Id:  <20030617190055.9B2B.T-WADA@....jp>
In-Reply-To:  <20030617110046t-ushio@....com>
References:  <Sea1-DAV53YQrucJihR0003e774@....com> <20030617110046t-ushio@....com>
X-Mail-Count: 04480

こんにちは。和田です。

「データベースの進化的設計」の和訳の掲載許可を
Fowler氏から頂くことができました。
今日平鍋さんにホスティングをお願いして、
http://objectclub.esm.co.jp/eXtremeProgramming/evodb-jp.html
に置いて頂きました。

DBとXPの話題はちょうどホットなところだと思います。
素人翻訳で申し訳ないのですが、読んでみてください。
間違い等あるかと思いますが、そのときは私までメールを下さい。

以下は私の意見です。

On Tue, 17 Jun 2003 11:00:46 +0900
t-ushio@....com wrote:
> 牛尾でございます。
> 
> >XP での DB は、やっぱり難しいものだと聞いてます。XP の本を読むと、「最
> >初に DB 設計したのは失敗だった。コロコロと構造が変わるので、最初はモッ
> >クオブジェクトを使って、DB の構築はあとにすべきだった。」なんて書いて
> >あったりしますね。
> >
> >開発初期ならこれはいい手なんですが、1 回でもリリースしてしまうと、その
> >あとの DB の変更はやっぱり大変な手間がかかるでしょう。XP でもDB は、ER
> >図も書いて、前払いで設計すべきかもしれません(これは結論が出ていないよ
> >うな)。
> 
一般には、永続化レイヤーを構築してDBの変更が直接ダメージになることを避け
るか、またはDBの変更に自動的に追随できるような仕組みを作る(つまりコード
ジェネレーション)かの戦略を立てて、DBの変更に備えるというのが王道だと思
います。

Fowler氏の文章ではデータベースの定義をCVSのようなソフトウェアの管理の下
に入れることが書いてあります。データベースはイテレーション中に何回も自動
的に作り直すものという位置づけです。そのためにデータベースの定義やテスト
データの準備などをSQLのスクリプトで行い、それらをすべてCVSに入れているよ
うです。また、DBの変更を各開発者のDBに自動的に適用するといったかなり過激
なことも書いてあります。


> 私ののプロジェクトでは、最初からDB設計していません。うちのプロジェクトはCMPつかいました。
> #基本はモデルからマッピングしています。
> さすがに項目変更はめんどくさいのでRelaxerを使ってCMPやDTOのジェネレータを作りました。
>  CMPはテーブルを張ってくれるので、最初の変化が多いときは、テーブル消して
> CMPデプロイ、、、という感じでスキーマ変更していました。
>  後半になってきて安定してくると、DBAを設置して、その人がデータベースを
> 管理しましたが、先のジェネレータが吐くソースをジェネレーションギャップパターン
> にしておいて、項目変更を柔軟に行えるような仕組みを作っておきました。
> #といってもさすがRelaxer様で1日程度でできました。
> 
O-Rマッピングツールを選択すると、モデルの管理の対象がひとつに絞られるの
で楽になりそうですね。昔O-Rマッピングを自分で行ったのですが、オブジェク
トモデルとリレーショナルモデルとマッピングコードの三重管理の状態になり、
大変でした。

私はプロジェクトで使用するかもしれないのでTorqueの評価をしているところで
す。TorqueはどちらかというとR-Oマッピング(造語です)といった感じなのです
が、最初からGeneration Gapパターンの適用ができるようになっていたりしてい
るので好感度大です。

どちらにしろデータベースの規模がある程度大きくなるとコードジェネレータ等
何らかの自動化が必要になってくると思います。例えばJavaであれば
DatabaseMetaData経由で実DBから定義関係を丸ごと引っこ抜いてきて自動化の具
に使うのが面白いと思います。ただこれらのことは各種のツール(Torqueや
Relaxer等)が既に土台を作っていると思いますので、それに便乗して色々なこと
ができると思います。


-- 
Takuto Wada <t-wada@....jp>