NotesとAccessを比較してみた


HCL NotesユーザーがMicroSoft Accessを3日ほど触ってみたので、その感想を書いてみます。

設計の違い

設計の差異は、ざっくりと以下の表になります。
文書管理を目的としたデータベースのNotesとデータ管理を目的としたデータベースのAccessは、共通している箇所も多いのですが、根本的な部分で異なっていました。

レコードと文書

AccessのレコードはNotesでは文書に該当します。
レコードはテーブル/レポート/フォームなど用途に合わせて表示されますが、Notesでは文書=フォームになります。
Accessではレコードに必要最小限のデータを登録して、用途に応じてクエリでレコードのフィールドを組み合わせて利用しますが、Notesではフォームに詰め込めるだけのデータを詰め込みます。これは、文書(レコード)をリスト形式で表示するNotesのビューとAccessのクエリの違いによるためです。

クエリとビュー

NotesもAccessもリスト形式で文書(レコード)を表示するとき、条件による抽出をすることができます。しかし、Accessがクエリに計算用の列を追加して、その中でデータの計算処理をした結果を表示させることに対して、Notesでは計算用の列を追加することは推奨されていません。
理由は大量のデータがある場合に、Notesではリスト形式で一覧を表示する時間がかかるためで、計算が必要な場合はフォームで行っておくのが作法となっています。
また、Notesは文書管理データベースであるため、ビューはスレッド形式のビュー表示やアイコン表示などが可能であり、Accessのクエリ―とよりはOutlookの画面に近いです。

エージェント

Notesはクライアントサーバーモデルというシステム設計になるため、サーバー側でマクロをJCLのように実行することができます。Accessはローカルで利用することが前提のデータベースだと思われるので、このような機能が標準では実装されていないようです。

コーディング

Notesは文書管理データベースになるため、文書をどのように取得するかという方法について多彩な方法があります。AccessのRecordsetは、NotesではDocumentCollectionであったりNotesViewであったり、サーバーサイドで処理するかユーザー操作で処理するかでSessionになったり、UIWorkSpaceになったりで、用途に応じた書き分けが必要になります。(クラスの上下関係が明確なので、きれいなコードは書きやすいと思います。)
また、Notesであれば親の顔よりも見ることになる以下の構文とAccessは無縁です(多分)。

  Set doc = dc.GetFirstDocument()
  While Not(doc Is Nothing)
    "処理の内容"
    Set doc = dc.GetNextDocument(doc)
  Wend

最後に

NotesからExcel、ExcelからNotesという事例は多いが、Accessとのデータ連携に関しては事例を聞いたことがなかったが、親和性はNotesとExcelのほうがあるのではないかと、Accessを短い時間しか使っていないが実感しています。