はじめに
前回までに、食品成分表(八訂)の本表、アミノ酸成分表、脂肪酸成分表、炭水化物成分表の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つの行が1件のデータとして扱われます。
この際に、フィールドの項目が一意に決定できるフィールドを主キーとして設定できます。
また、参照整合性を保つために、主キーの設定したフィールド内のデータには、空文字、Nullなどを入れることができません。
必ず、何らかのデータが入っており、そのデータは他のデータと重ならないものでなくてはなりません。
例えば、ここで作成した食品群テーブルマスターで見てみましょう。
このテーブルの定義およびデータシートビューを見ると次のようになっています。
リレーションの設定
それでは、実際にリレーションの設定をしてみましょう。
アクセスの上部メニューの「データベースツール」⇒「リレーションシップ」とクリックすると、リレーションシップ画面となり、右側にテーブルの追加画面がでますので、リレーションシップをするテーブルを選択して追加し、配置しやすい位置にテーブルを配置します。
食品群テーブルマスターテーブルの主キー(FoodGrCD)から4つの食品テーブルのFoodGrCDにドラグして離すと、リレーションシップの画面がでますので、参照整合性にチェックを入れ「作成」をクリックすると、食品群テーブルマスターテーブルの主キー(FoodGrCD)と食品群テーブルマスターテーブルの主キー(FoodGrCD)に線が引かれ、食品群テーブルマスターテーブルの主キー(FoodGrCD)側が1、食品群テーブルマスターテーブルの(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)、リレーショナルデータベースの特徴、主キーについて、リレーションの設定、リレーションの確認などついて紹介してきました。
次は、食品成分表(本表)の食品群コード、食品番号、食品名、エネルギー、タンパク質、脂質、炭水化物、食塩相当量などから検索して、検索結果を表示するフォームなどを作成して見たいと思います。
お楽しみに・・・。
以上です。
コメント