リレーショナルデータベースの計画
リレーションシップグラフを使用してリレーショナルデータベースを作成する前に、紙または画面の上でデータベースを設計します。開発する設計図のことをデータベース用語で ER 図 (ERD) と呼びます。
FileMaker Pro カスタム App の一般的な設計手順は、カスタム App の作成を参照してください。
リレーショナルデータベースを計画するには:
- リレーショナルデータベースで必要となる情報のカテゴリを決定します。これらのカテゴリは FileMaker Pro のテーブルになります。
たとえば、「販売」データベースには、顧客情報を含む「顧客」テーブル、注文情報を含む「請求書」テーブル、製品情報を含む「製品」テーブルなどが含まれます。
- テーブル相互の関係を決定します。これは、「顧客が製品を注文する」、「請求書で顧客の注文を管理する」のように、カテゴリの相互関係を簡単な文章で表現することで実行できます。
- 1 つのテーブルと別のテーブルを連結して、2 つのテーブル間のリレーションシップを示します。たとえば、顧客は請求書を所持でき、請求書は製品を所持できます。
別のテーブルとのリレーションシップがないテーブルは、不要なテーブルである可能性があります。この例では、「従業員」テーブルはこのリレーショナルデータベースに合いません。
- 記号でテーブル間を連結してテーブル間のリレーションシップのタイプを示します。
- 1 対 1 のリレーションシップでは、テーブル A の 1 つのレコードとテーブル B の 1 つのレコードが一致します。
- 1 対多のリレーションシップでは、テーブル A の 1 つのレコードとテーブル B の多数のレコードが一致します。
- 多対多のリレーションシップでは、テーブル A の多数のレコードとテーブル B の多数のレコードが一致します。
リレーションシップについてを参照してください。
- 1 人の顧客は多数の請求書を所持できる
- 1 つの製品を多数の請求書に記載できる
- 1 つの請求書には多数の製品を記載できる
- なお、「請求書」テーブルと「製品」テーブルとの間には多対多のリレーションシップがあります。2 つのテーブル間に多対多のリレーションシップを直接設定することはできません。
リレーショナルデータベースは 1 対 1 および 1 多のリレーションシップを直接処理します。多対多のリレーションシップは、多対多のリレーションシップを 2 つの 1 対多のリレーションシップに分割する中間テーブルを使用して解決する必要があります。この例の問題を解決するには、販売した製品に関する情報を保存する中間テーブル「品目」を追加します。
- 1 人の顧客は多数の請求書を所持できる
- 1 つの請求書には多数の品目を記載できる
- 1 つの製品を多数の品目に記載できる
- 各テーブルで必要となるフィールドを決定します。
テーブルにはそれぞれ 1 つのトピックがあり、テーブル内のフィールドはすべてそのトピックを説明するものです。たとえば、「顧客」テーブルの 1 つのレコードのフィールドには、一人の顧客に関する情報がすべて保存されます。
同様の理由で、各顧客に固有の識別番号を割り当てる必要があります。データベースでは、これが主キーになります。新しい顧客を追加しない限り、顧客 ID 番号をファイルに入力することはありません。したがって、顧客 ID が存在していれば、その顧客のレコードが存在することになります。「顧客」テーブルには、顧客の名前、住所および電話番号のフィールドも含まれます。
「製品」テーブルには、製品識別番号、各製品の単価および在庫数のフィールドが含まれます。「品目」テーブルには、製品および請求書の識別番号、名前、単価、数量および各製品の販売総額のフィールドがあります。「請求書」テーブルには、請求書識別番号、注文日および販売担当者のフィールドがあります。
- 各テーブルの主キーフィールド (または複数条件リレーションシップのフィールド) を決定し、それぞれを設計図に示します。続いて、各テーブルの外部キーフィールドを示します。
この例では次のようになります:
- 主キーは「顧客::顧客 ID」、「請求書::請求書 ID」、「製品::製品 ID」、「品目::品目 ID」
- 外部キーは「請求書::顧客 ID」と「品目::製品 ID」
- それぞれのテーブルで、データを保存するフィールド、および他の関連テーブルからのデータを参照して使用するフィールドを決定します。
テーブルに保存されている情報の内容から、データをどこに保存するのが適当か、そしてどこで関連テーブルのデータを使用するかを確認することができます。キーフィールド以外のすべてのフィールドは、データベース内で一度だけ使用します。テーブルの内容に関連していない重複フィールドは取り除きます。
- 各主キーと、対応する関連テーブルの外部キーを線で結びます。
テーブル間のリレーションシップは、リレーションシップの条件に一致するデータを含むキーフィールドによって確立されます。
- 顧客は多数の異なる請求書を所持できるが、個々の請求書には 1 人の顧客しか記載できない。
- 請求書には多数の品目を入力できるが、個々の品目は 1 つの請求書に記載される。
- 製品は多数の異なる品目に使用できるが、個々の品目には 1 つの製品しか記載されない。
この例が示す内容は次のとおりです:
多対多のリレーションシップを解決した後、この例では次のことが示されます:
「請求書」テーブルの顧客データを表示するには、リレーションシップを作成するための共通フィールドが 2 つのテーブルになければいけません。「顧客 ID」がその共通フィールドです。これは「顧客」テーブルでは主キーで、「請求書」テーブルでは外部キーです。
「品目」テーブルの「製品 ID」は「品目」テーブルと「製品」テーブル間の共通フィールドです。このフィールドは「製品 ID」テーブルでは主キーで、「品目」テーブルでは外部キーです。
これらのキーフィールドは照合フィールドの一種です。リレーションシップについてを参照してください。
この時点でこの設計図の示す内容は次のとおりです: