2007/03/10

Access2007 新機能 複数値フィールド -- 00

Access2007の機能に関して少しずつですが評価をしていますが、今回はMulti-valued field 複数値フィールドに関して、サンプルを作りながら考察してみました。

以前に、attachment型に関しても同様にサンプルを作り考察し、Microsoft Access 2007でDAOのバージョンが上がっているという事までがわかりました。

今回はAttachment型のようにMailを対象データとしたような感じで、ちょっとだけ実際の使用例・モデルを考えてみました。

商品のマスタテーブルと、その仕入先の関係です。ここではある商品の仕入先が複数存在するモデルを想定し、各商品毎にその仕入先を列挙する必要性がある形を考えました。図にすると以下のような形です。


現実世界ではPCなりCDコンポなりの特定商品は、そのメーカ独自の商品ですから、複数の納入先があるような事はあまりないのですが、あくまでもAccess評価のモデルケースですので気にしない事に。

このようなモデルで必要となるテーブルを通常のリレーショナルなデーターベースで考えた場合は、以下のようになるかと思います。(フィルードは最少にしてあります。)


商品マスタと製造元(仕入先)マスタの他に、それをつなぐテーブルが別途必要になってきます。これはある商品に対しての製造元が複数存在する場合があり、その件数も不定である事を想定しているからです。

この形の場合に商品マスター管理画面の作成を考えた場合、仕入先(製造元)を複数入力ができるUI(ユーザーインターフェイス)を考慮する必要があります。Rapid的な開発ケースではこの手間が結構惜しかったりもします。

これとは別に単純に製造元を3つなり5つと取り決めて、商品マスタ上に「仕入先1」「仕入先2」「仕入先3」のような形のフィールドを作成するケースもあるかと思います。



このような場合は「仕入先」に件数に対して制限が出来てしまい、データ構造としては柔軟とはいえない形ですが、そのような制限下であれば逆に、アプリケーションの開発効率、特に画面まわりの開発は楽になります。このような形はテーブルが正規化されていないとなる訳ですが、開発効率を優先し採用する場合もあるかと思います。

これらの方法に対してAccess2007で加わったのが、複数値フィールドです。テーブルりデザインは以下ようなイメージになります。


結果的には最初の2例の良い所取りのような形です。ポイントはフィールド名でVendorsと複数形にしている所で複数のVendorIDがこのフィールドに入るイメージです。複数の値が入るフィールドのイメージはRDBMS等を扱っているとデータベースのフィールドとしては捉えずらいですが、メールの宛先欄をイメージして貰えればわかりやすいかと思います。( ※ 多分このMulti-valued field(複数値型)もAttachmentと同様にメールの格納を意識して作られた形ではないかと思いますが、今回は敢えてメールとは別のモデルを想定しています。)


具体的に上記の形でテーブルを作成してみます。まずはVendorテーブルから。



別に特色のないシンプルなテーブルで、各フィールドの型にも特に深い意味はありません。

次にMulti-valued field(複数値型)を採用するItemテーブルです。



最終列のVendorsをMulti-valued field(複数値型)にするには、Fieldのデータ型でLookup Wizardを選びます。

ウィザードの最初の画面では「既存のテーブルかクエリーから選ぶ」を選択します。


デーブルは予め作成してあるVendorテーブルを選択。


ここで選択するのは結合Keyとなるフィールドではなく、画面上に表示したいフィールドだと考えてください。この例(画面)ではIDとVendorNameを選択していますが、Vendorテーブルの主キーであるIDはここで選択しなくても自動的に追加されます。


次に表示時のOrderを指定します。フィールドとAsc/Descが選べます。


ここで各列の表示したい幅を設定します。結合キーとなるフィールドは隠した方(Hide key column)が、画面上の見栄えもユーザーの理解も良いケースが多いかと思います。


ここで作成してたLookup列にラベル名を付けます。またこの画面でMulti-valued fieldにする為の指定(AllowMultiple Values)を行います。Multi-valued field(複数値型)を設定出来る機能/画面がここしかないような気がしてるのですが、非常に分かり図らい場所ではないかと・・。


フィールドをMulti-valued field(複数値型)にした変更はUndoできなくなるとの確認メッセージ。


リレーションシップを作れるようにする為にはテーブルの設定を保存する必要がある。



これで出来たテーブルをデータシートビュー開くとこんな感じの画面で入力が出来るようになります。ちなみにこの画面からはVendorの追加は行えず、Vendorの追加はVendorテーブルを開いて別途行います。




値はキーボードからの文字列の入力ではなく、ドロップダウンからの選択になり、値を選択すると以下のようにカンマ区切りで表示されます。



以上のような手順で複数値フィールドを扱うテーブルの作成まで出来ました。Microsoft Access上なので、このままでもデータシートビューからの入力もできますので、個人的な用途であればこれでも十分かもしれません。

ですが評価としてそうも行かないので、次回・それ以降でForm(画面)作成とAccess2007のデータ・内部構造に触れたいと思います。

関連のありそうな記事

0 コメント: