食品成分表(八訂)間のリレーションの設定、Microsoft Access備忘録(1)

Access
この記事は約7分で読めます。

はじめに

 前回までに、食品成分表(八訂)の本表、アミノ酸成分表、脂肪酸成分表、炭水化物成分表の4つの成分表をMicrosoft Accessに読み込ませるために、各表の栄養素の文字列で記入されている部分を数値化しました。

 さらに、各表のテーブル定義書を作成し、それを元にAccessに読み込み、各表のテーブル定義書にしたがった各表のデータを貼り付けることにより、Accessに食品成分表の4つのテーブルを作成しました。

 今回は、作成した4つの食品成分表(八訂)の間でリレーションを設定し、各表間で関連付けをします。

 また、簡単なテーブル(食品群テーブルマスター)を作成し、このテーブルと各食品成分表(八訂)の食品群コードとの間でリレーションを設定し、食品群コードを食品群名で表示できるようにします。

 その前に、リレーショナルデータベース管理システム(RDBMS、Relational DataBase Management System)、主キーなどについて簡単に説明した後に食品群マスターテーブルと4つの食品成分表テーブルとリレーションを設定し、さらに4つの食品成分表間でリレーションを設定していきます。

 なお、私のパソコン環境やソフトのバージョンは以下の通りです。

パソコンOS : Windows10 Pro
Windowsバージョン : 21H1
Microsoft 365 Accessのバージョン 64ビット版: 2201

リレーショナルデータベース管理システム(RDBMS)

 データベースと聞くと、何か途端に分かり難く感じますが、言ってみればで膨大なデータが集まったデータの集合体をデータベースと言います。

 この膨大な量のデータを扱い管理するためのシステムをデータベース管理システムと言い、その中の一つにリレーショナルデータベース管理システム(RDBMS)があります。

 データベースには、大きく3つのタイプの階層型データベース、ネットワーク型データベース、リレーショナルデータベースがあり、これらデータベースの中で最も普及しているのがリレーショナルデータベースです。

 リレーショナルデータベースを管理運用するためのリレーショナルデータベース管理システム(RDBMS)には、有名なものとしてMySQL 、Microsoft SQL Server 、Oracle Database 、PostgreSQL 、MariaDB(私のレンタルサーバーのデータベースがMariaDBを利用している)などがあります。

 上述で述べたリレーショナルデータベースは、扱えるデータ量が莫大な量(ビッグデータ)になりますが、例えば、MySQLのテーブルの最大サイズ65,536T バイト (2567 − 1 バイト) まで利用できるようですが、実際にはOSなどの制限により、それより少ない容量となります。

 Microsft AccessもRDBMSの一つですが、一つのファイルで扱える最大容量は2GBと少ないですが、個人で扱うには十分な容量と思われます。

 それよりもユーザーインタフェースがMySQLなどのビッグデータを扱えるRDBMSより格段に優れていることが初心者にとってデータベースの入門とし大事なことです。

リレーショナルデータベースの特徴

 リレーショナルデータベースの特徴を次に載せておきます。

  1. Excelと同様な表形式のテーブルを関連付けて扱えるので初心者に馴染み易い。
  2. SQL(Structured Query Language)を利用してデータを検索、削除、追加、更新などが簡単に行え初心者にとっても扱いやすい。
    (注)SQLについては、機会があれば記事にしたいと思います。
  3. 表形式のデータベースに主キーと言うユニークなフィールドを設定し、その主キーと他のテーブルの同類のフィールドを関連付けるこににより、データ同士の関連性の整合性が保たれるように設定できます。

主キーについて

 リレーショナルデータベースの場合、データベースは表形式になっており、カラム(フィールド)と行(レコード)からなり、フィールドにはそのデータベースを構成する名前が付けられ1つの行が1件のデータとして扱われます。

 この際に、フィールドの項目が一意に決定できるフィールドを主キーとして設定できます。

 また、参照整合性を保つために、主キーの設定したフィールド内のデータには、空文字、Nullなどを入れることができません。

 必ず、何らかのデータが入っており、そのデータは他のデータと重ならないものでなくてはなりません。

 例えば、ここで作成した食品群テーブルマスターで見てみましょう。

 このテーブルの定義およびデータシートビューを見ると次のようになっています。

リレーションの設定

 それでは、実際にリレーションの設定をしてみましょう。

 アクセスの上部メニューの「データベースツール」⇒「リレーションシップ」とクリックすると、リレーションシップ画面となり、右側にテーブルの追加画面がでますので、リレーションシップをするテーブルを選択して追加し、配置しやすい位置にテーブルを配置します。

 食品群テーブルマスターテーブルの主キー(FoodGrCD)から4つの食品テーブルのFoodGrCDにドラグして離すと、リレーションシップの画面がでますので、参照整合性にチェックを入れ「作成」をクリックすると、食品群テーブルマスターテーブルの主キー(FoodGrCD)と食品群テーブルマスターテーブルの主キー(FoodGrCD)に線が引かれ、食品群テーブルマスターテーブルの主キー(FoodGrCD)側が、食品群テーブルマスターテーブルの(FoodGrCD)がが表示されます。

 これを、1対多のリレーションと言います。

 すなわち、食品群テーブルマスターテーブルの主キー(FoodGrCD)は一意であるためにテーブル内には同じ値が存在せず、一意に決まりますが、食品成分表側のFoodGrCD)は何度も出てくるので無限と表示されます。

 次に、食品成分表テーブル(本表、MS_Foodcomptable)の主キー(FoodcompNO)からその他の食品成分表テーブルの主キー(FoodcompNO)にリレーションを設定します。

 このリレーションは、1対1のリレーションとなります。

 これは、食品成分表のテーブルは元々本表以外にも3つのテーブルが合わさって一つのテーブルで表される必要がありますが、余りにもフィールド数が多いためにそれぞれ関連するテーブルでまとめられて、アミノ酸成分表テーブル、脂肪酸成分表テーブル、炭水化物成分表テーブルとなっていますので、それぞれの主キーである食品成分番号FoodcompNO)は主キーに設定しており、それぞれの表の主キー同士のリレーションを設定しているので1対1となったわけです。

 最終的なリーレーションを設定した画面を下記に示します。

 なお、リレーションを設定する際に本表とアミノ酸成分表の間でのリレーションにおいて、参照整合性をチェックできずにリレーションが設定できないことがありました。

 これは、本表にない食品番号(3個)がアミノ酸成分表にあったためで、これらのレコードを除いたアミノ酸成分表を作成することにより、参照整合性をチェックして本表とアミノ酸成分表の間でリレーションの設定ができました。

リレーションの確認

 上述で設定したリレーションがちゃんと設定されているかどうかを確かめるために、クエリーで各表のフィールドから表示させるものを自由に選択して表示させて見ました。

 各表から表示させるフィールドは次の通り。

テーブル名 表示させたフィールド名
Ms_FoodGrtable FoodGrName(食品群名)
MS_Foodcomptable(本表) FoodGriCD(食品群コード)、FoodcompNO(食品番号)、Foodname(食品名)、
REFUSE(廃棄率)、ENERUC_KCAL(エネルギー(kcal))
MS_AminoAcidtable(アミノ酸成分表) イソロイシン_mg、グルタミン酸_mg
MS_FattyAcidtable
(脂肪酸成分表)
FAMA_g(一価不飽和脂肪酸_g)、F15D0AI_mg(15:0antペンタデカン酸_mg)
MS_Carbohydratestable(炭水化物成分表) FRUS_g(果糖_g)、MALS_g(麦芽糖_g)

上表にしたがって作成したクエリーのデータシートビューを以下に示します。

おわりに

  如何だったでしょうか?

 リレーショナルデータベース管理システム(RDMS)、リレーショナルデータベースの特徴、主キーについて、リレーションの設定、リレーションの確認などついて紹介してきました。

 次は、食品成分表(本表)の食品群コード、食品番号、食品名、エネルギー、タンパク質、脂質、炭水化物、食塩相当量などから検索して、検索結果を表示するフォームなどを作成して見たいと思います。

 お楽しみに・・・。

以上です。

コメント

タイトルとURLをコピーしました