4D v16.3

データベースの基本

ホーム

 
4D v16.3
データベースの基本

データベースの基本  


 

 

データベースは系統的な情報の集合体です。そのため効率よく使用することができます。電話帳はデータベースの良い例です。他にも辞書、カレンダー、レシピ集などがあります。

データベース上の情報は、レコード形式で構成されます。データベースの各レコードには、人物や物に関する情報のすべてが格納されています。例えば、電話帳の各レコードには、ある人物の名前、住所、電話番号が格納されています。

各レコードにはフィールドがあります。フィールドは特定の情報を格納するために使用します。例えば、電話帳のデータベースでは、1つのフィールドにある人物の名前を格納し、2つ目のフィールドにその人物の住所を格納し、3つ目のフィールドにその人物の電話番号を格納します。すべてのレコードはそれぞれこれらのフィールドを含み、またすべてのレコードはこれらのフィールドに情報を持つことができます。

通常フィールド名は、フィールドに格納される情報を識別します。通常フィールド名はName、Address、あるいはPhoneNumberのようになります。各フィールドはフィールドタイプを持っており、数値、日付、文字など、フィールドに入力できる情報の種類を特定します。各フィールドには特定のタイプのデータが含まれるため、フィールド上の情報を使用して計算や操作を行うことができます。例えば、2つのフィールドの数値を加算することができます。あるフィールドの日付を別のフィールドの日付と比較できます。住所ラベルの最初の行を作成するために、姓 (あるフィールドに保存されている) を名 (別のフィールドに保存されている) を結合できます。

すべてのレコードが集まり、1つのテーブルを構成します。データベースには多くのテーブルを含むことができます。以下の挿絵は、どのようにこれらのコンセプトが関連しているかを表していいます。

情報を役立つものにするため、4Dはレコードを再編成し、情報を基に計算を行なうことができます。例えば4Dはフィールドの総計を計算し、レポートに表示することができます。各営業マンの売上合計を計算し、売上高を比較するグラフを表示することができます。

4Dは1つのデータベースにつき1から32,767までのテーブルを作成できます。これはあなたのニーズに適合したストラクチャーを作成できることを意味します。

いくつかのデータベースは、1つのテーブルのみを使用します。従業員、企業、在庫など1つのカテゴリー情報に対して1つのテーブルを使用します。テーブルには必要な数のフィールドを持つことができます (32,767まで) 。

 

上の図では、同じタイプのデータがすべての従業員のレコードに対して必要です。データベースは、保存されている従業員の人数に応じて拡大します。

データベースは時に2つ以上のテーブルを使用すると、より効率よくデータを格納し、データへアクセスできるようになります。異なるタイプの情報は別のテーブルに格納するというルールを覚えておくとよいでしょう。

従業員と企業の2つの情報を追跡するデータベースがよい例です。従業員と企業のレコードは別のテーブルに格納されます。企業の所在地が変更された場合、企業のレコードのみを変更する必要があります。その企業の全従業員に対して新しい所在地を入力する必要はありません。

シングルテーブルでは、各個別のレコードに所在地を入力する必要があります。2つのテーブルでは、一度だけ情報を入力する必要があります。企業名が従業員のレコードに入力されると、4Dは企業のレコードを検索し、自動で正しい所在地を表示します。

以下の図は、2つのテーブルがリレートしている複数テーブルのデータベースストラクチャーを表しています。[Employees]Companyフィールドと[Company]Nameフィールドの間に描かれた矢印は、リレーションを示しています:

各従業員のデータは、[Employees] テーブルに保存されています。各企業のデータは、別途[Company] テーブル1に保存されています。

4Dはリレーショナルデータベースアプリケーションと呼ばれています。それは、複数のテーブルを用い、さまざまな方法でそれらのテーブルを関連付けるからです。例えば[Company] テーブルを検索する[Employees] テーブルのレポートを作成し、各従業員の会社に関する情報を自動的に表示し印刷できます。テーブル間のリレーションにより、各テーブルの情報がレポートで使用できるようになります。

また、リレートされたテーブルにデータを直接入力できます。例えば請求書データベースで、請求書画面内から[LineItems] テーブルに情報を書き込むことができます。更に4Dランゲージを使用してリレートされたテーブルにデータを書き込むこともできます。

時には、テーブルが直接リレートされていない複数テーブルのストラクチャーを必要とすることがあります。例えば連絡先リストや経費テーブルなどのさまざまな情報を1つのデータベースに格納させると便利な場合があります。

4Dでは各データベース上に32,767個までのテーブルを作成することができます。1つのテーブルには32,767個までのフィールドを作成することができます。複数テーブルを使用すると、事実上ほぼあらゆるタイプのデータベースストラクチャーを作成できます。

通常複数のテーブルが情報を共有するストラクチャーを作成する必要があります。例えば従業員と彼らが働く会社について追跡するデータベースを作成するケースについて考えてみましょう。

データベースストラクチャーには以下の図のように、従業員の情報を格納する[Employees]テーブルと会社の情報を格納する[Companies]テーブルが含まれます。

各々分割されたテーブルに格納された情報だけでは、情報追跡のニーズを満たすことはできません。 [Employees]テーブルのレコードを表示する際、その従業員が働く会社の情報も表示する必要があります。また[Companies]テーブルを表示する際には、その会社で働く全従業員の情報を表示する必要があります。
このような形で2つのテーブル間で情報を共有するために、テーブルをお互いにリレートさせることができます。言い換えると、リレーションは各テーブルのデータ間に設定することができます。 4Dではテーブルリレーションを使用して、あるテーブルに格納されたデータに他のテーブルのデータからアクセスできます。リレーションに基づき情報を共有するテーブルをリレートしたテーブルと呼びます。

テーブルをリレートすると以下のことが可能となります:

  • データを効率的に格納する。
  • 一か所のデータを更新して、そのデータを使用するすべての場所に変更を反映させる。
  • リレートする情報を表示する。
  • 他のテーブルのデータに基づき他のテーブルに対し検索や並び替えを実行する。
  • リレートしたテーブルのレコードを作成、更新、削除する。

下の図ではストラクチャーエディターで[Employees]テーブルと[Companies]テーブル間にひかれたリレーションを示しています:

[Employees]テーブルには従業員ごとに1つのレコードがあります。[Companies]テーブルには会社ごとに1つのレコードがあります。 2つのテーブル間のリレーションを使用すれば両サイドのテーブルから情報にアクセス、入力、変更、および削除を行えます。例えば:

  • 従業員レコードが表示されているとき、対応する会社の情報 (所在地、郵便番号、電話番号など) を表示して、更新することができます。
  • 新しい従業員を追加するとき、従業員レコードを適切な会社レコードにリンクできます (会社が既に存在している場合)。会社レコードがまだデータベースに登録されていないときには、従業員レコードを作成中に会社レコードも作成することができます。詳細はリレーションプロパティを参照してください。
  • 会社レコードごとに、その会社に所属する従業員を表示し、情報 (名前、役職、電話番号等) を更新できます。会社レコードから従業員レコードを追加することもできます。

リレートしたフィールドとは、2つのテーブルをリレーションによって結び付けるフィールドです。リレートしたフィールドを使用することで、リレートしたテーブルの情報を表示できます。
テー ブルをリレートする基本的な目的は、あるテーブルのカレントレコードに対応して、他のテーブルのどのレコードをカレントにすればよいか、その判定方法を 4Dに指示することにあります。リレートしたテーブルは、2つのリレートしたフィールドのデータを使用して、対応するレコードを識別します。
先の 例題では、会社名が[Employees]テーブルと[Companies]テーブル両方に格納されていました。[Employees]テーブルの Companyフィールドと[Companies]テーブルのNameフィールドが2つのテーブルをリレートしています。[Companies]テーブル のNameフィールドは[Companies]テーブルの主キーです。このフィールドの値を使用して、それぞれの会社のレコードをユニークに識別します。 主キーにはインデックスおよび重複不可属性を割り当てるべきです。[Employees]テーブルのCompanyフィールドは外部キーフィールドです。 外部キーフィールドの各値は、リレートしたテーブルの主キーフィールドの1つの値と正確に対応します。リレーションを作成する際、主キーにインデックス属 性が割り当てられていないと、4Dが自動で割り当てます。

外部キーフィールドのそれぞれの値は、リレートした他のテーブルの主キーフィール ドの1つの値と等しくなります。この例題では、[Employees]の外部キーフィールドの値は、[Companies]の主キーフィールドの1つの値 と完全に一致します。外部キーの値は重複不可ではありません (同じ会社の中で複数の従業員が働くことができるからです)。

4D v14以降、データベースのそれぞれのテーブルにおいて、プライマリーキーが明示的に定義されなければなりません。プライマリーキーフィールドの値は通常(4Dが生成する一連番号または開発者が記述したコードが生成するキーを割り当てることで)データベースによって自動的に割り当てられます。このような方法はキーフィールドがユニークであることを保証します。例えば [Companies]テーブルの主キーが会社名ではなく一連番号であれば、ユーザーは同じ会社名であっても所在地が異なる複数の会社を入力することが可 能となります。また会社名が変更になった場合も、2つのテーブル間のリレーションを壊すことなく、データベースに変更を行うことができます。

ユーザーが主キーフィールドに値を入力することができる設計の場合、 フィールドプロパティ にて重複不可更新不可属性の両方をチェックし、最初の入力で重複する値がないことを検証し、後でこの値が変更されないように設定すべきです。更新不可属性を使用しない場合、主キーフィール ドの値が変更されたときに、リレートしたテーブル中でレコードが迷子にならないよう、別途手当てをする必要があります。

リレーションが設 定されると、あるテーブルで作業をしている間に、リレートしたテーブルの値を読み書きすることができるようになります。例えば従業員レコードに会社名を入 力すると、4Dは[Companies]テーブル中でそのレコードを検索し、その従業員レコードに会社の所在地と電話番号を表示します。会社レコードを表 示しているとき、4Dはその会社で働いている従業員を[Employees]テーブルから検索し、会社レコードに表示します。

これらのリ レーションは自動で実行できます (プログラムは必要ありません)。あるいはマニュアルリレーションを選択することもできます。後者の場合、リレートしたレコードのロードやアンロードはメ ソッドを使用して行い、リレートしたレコードの作成や変更、削除を制御できます。マニュアルリレーションは、2つ以上のテーブルが1つのテーブルにリレー トされているなど複雑なストラクチャーで利用されます。またリレートしたレコードのロードやアンロードを制御したい場合にも使用されます。自動またはマ ニュアルリレーションどちらを使用するかは、リレーションのプロパティで設定できます (リレーションプロパティ参照)。

 
プロパティ 

プロダクト: 4D
テーマ: データベースストラクチャーの作成

 
履歴 

 
ARTICLE USAGE

デザインリファレンス ( 4D v16)
デザインリファレンス ( 4D v16.1)
デザインリファレンス ( 4D v16.3)