DominoをASP.NETに移植する(4)

DominoのASP.NET移植計画の4回目は、データ移行の考え方について書いてみたい。
■Webアプリケーションの「作成」
社内で即興的に開発したDominoデータベースは、1個のNSFファイルを1個のアプリケーションと見なしてよいだろう。これをASP.NETに移植する場合、IIS 6.0の「既定のWebサイト」配下に、一つ、専用のフォルダを作成するという感じになる。
今回は「営業日報」という架空のDominoアプリを移植するので、IIS 6.0のルートフォルダの下に「Nippo」というフォルダを作成する。(エクスプローラから普通に新規フォルダ作成すればよい)
作成した「Nippo」フォルダは、IIS 6.0側でアプリケーションとして認識させる必要がある。IISマネージャを開いて、「既定のWebサイト」配下にある「Nippo」フォルダのプロパティを開き、「ディレクトリ」タブで、「アプリケーションの設定」という部分の「作成」ボタンをクリックする。
すると、「Nippo」フォルダが、フォルダのアイコンから歯車のアイコンに変わる。これで「Nippo」フォルダが1個のWebアプリケーションとして認識される。
このように、Dominoのアプリケーションごとに、「既定のWebサイト」配下にフォルダを新規作成し、IISマネージャで「アプリケーションの設定」の「作成」ボタンをクリックして、1個のWebアプリケーションとしてIIS 6.0に認識させていけばよい。
■データの移行
Dominoは独自形式の正規化されていないデータベース構造で、SQL Serverへデータを移植するには、ある程度正規化されたテーブル構造に変更する必要がある。どのくらい厳密に正規化するかは、適当に判断すればいいだろう。
そもそもDominoのデータベースは、担当者が即興で開発を始めてしまうことが多く、データ構造を厳密に考えられているわけではないので、SQL Serverへの移行にあたってもアバウトな感覚で十分だ。
今回はDominoの「営業日報」という架空のアプリを移行するために、SQL Server側にも「営業日報」専用のデータベースを1個作成することにしよう。SQL Server Management Studio Express でSQLサーバに接続し、「データベース」を右クリックして「新しいデータベース」をクリック。
データベース名は「Nippo」とでもしておこう。データベースファイルの各種設定は初期値のままでよいだろうが、「パス」だけは必要に応じて変更することを忘れないように。データファイルを配置する場所だ。サーバ側でバックアップの対象になるフォルダが決まっている場合など、様々な事情でパスを変える必要があるだろう。
さて、データベース「Nippo」を作成したら、次はテーブル定義となる。
データ型については、Domino側ではそもそも文字列型と日付・時刻型くらいしか明確な区別がない。数値型と文字列型は内部的に区別されていないためだ。したがって、Domino側で日付・時刻型なら、SQL Serverでは datetime 型、それ以外はSQL Serverでは varchar(XXX) と、これもアバウトな感じでよい。
問題はDominoが内部的にデータ(文書)の一意性を管理している文書IDだが、これはSQL Server側では32ビット整数型の自動インクリメントの主キーを1個定義しておけばよい。
したがって、「営業日報」に「件名」「訪問先企業名」「訪問日時」「本文」「作成者」「作成日時」「更新者」「更新日時」というフィールドがある場合、SQL Server側のテーブル定義はだいたい下記のようになる。
CREATE TABLE SalesReport (
ReportID INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
Subject VARCHAR(200),
CompanyName VARCHAR(200),
VisitDate datetime,
ReportBody VARCHAR(2000),
CreatorName VARCHAR(100),
CreatedDate datetime,
UpdaterName VARCHAR(100),
UpdatedDate datetime)
訪問先企業や、作成者などのマスタテーブルは別に作成すればよいが、その場合も主キーは自動的に1ずつ増加する32ビット整数型の列を1個作成しておけば、十分Dominoの文書IDがわりになる。
Domino側で、データベース内の営業日報を1個ずつ読み取って、SQL Server側へ1件ずつINSERTしていくエージェントを書けば、データ移行もそれほど大変ではない。Dominoプログラマなら半日仕事だろう。
非常にアバウトと思われるかもしれないが、Dominoのお手軽さをそのままASP.NET 2.0に移植しようという試みなので、こんなもんだろう。
次回は、順番としては前後したかもしれないが、ユーザ認証について考えてみる。