初心者向け解説シリーズ

【初心者向け】テーブル設計の基本(リレーショナルデータベース入門)

nanikatoaccess

以下では、初心者向けに「テーブル設計の基本(リレーショナルデータベース入門)」をテーマに、Accessでシステムを作る際に押さえておきたいポイントを解説します。リレーショナルデータベース(RDB)としての考え方や正規化、主キーや外部キーなどの概念を理解すると、データの重複や整合性の問題を防ぎ、スムーズなシステム開発へと繋がります。Access以外のDBでも共通する考え方なので、ぜひ学んでみてください。


1. リレーショナルデータベース(RDB)とは?

リレーショナルデータベースは、データを表(テーブル)の形式で管理し、行(レコード)列(フィールド)で構造化して扱うデータベース方式です。各テーブル同士は、共通する項目(キー)を通じて関連づけ(リレーション)を行います。

ポイント

  • Excelのように1枚のシートで完結するのではなく、関連するデータを複数のテーブルに分割して持つ。
  • テーブル間の関連づけを基礎として、検索や集計を効率的に行う。

Accessでは、テーブルをリレーショナルに設計することで、データの重複を減らしつつ、フォームやレポート、クエリを通じて柔軟な操作が可能になります。


2. テーブル設計の基本プロセス

  1. 業務要件の把握
    • まず、どのようなデータを管理したいのかを整理します。例えば、「顧客」「商品」「注文」「在庫」など。
    • それぞれに必要な項目(氏名、電話番号、住所、商品名、単価、在庫数量など)を洗い出す。
  2. テーブルの候補を作成
    • 集めた項目を、論理的にまとまりのある単位でテーブルに分けていきます。
    • 顧客関連情報は「顧客テーブル」、商品関連情報は「商品テーブル」、といった具合にテーマごとに分割。
  3. 主キーの設定
    • 各テーブルには「主キー(Primary Key)」を設定し、行を一意に識別できるようにします。
    • 自動採番(オートナンバー)や業務上でユニークとなる項目(メールアドレスなど)を主キーにすることが一般的。
  4. リレーション(外部キー)を設定
    • テーブル同士を関連付ける場合、「外部キー(Foreign Key)」を使って紐付けを行います。
    • 例)注文テーブルに「顧客ID」という列を作り、顧客テーブルの主キーを参照する。
  5. 正規化とデータ重複の排除
    • 同じ情報を複数のテーブルやフィールドで管理すると、更新漏れや整合性崩れが発生しやすいです。
    • 正規化のルールを参考に、1つの項目は1つの場所(テーブル・フィールド)だけに置くよう意識します。

3. 主キーと外部キーの具体例

ないものはない!お買い物なら楽天市場

3.1 主キー(Primary Key)

  • 定義: テーブル内で行を一意に識別するためのキー。
  • : 「顧客ID」「商品ID」などの「ID」をオートナンバーで付与。
  • 目的:
    • 同じデータが重複して保存されないようにする。
    • テーブル間の関連づけ(リレーション)を簡単にし、クエリでJOINを行いやすくする。

Accessでの設定方法

  • 「デザインビュー」でテーブルを開き、該当のフィールドを右クリック→「主キー」で設定可能。

3.2 外部キー(Foreign Key)

  • 定義: 他のテーブル(親テーブル)の主キーを参照するフィールド。
  • : 「注文テーブル」にある「顧客ID」は、「顧客テーブル」の主キー(顧客ID)を参照。
  • 目的:
    • 2つのテーブルのデータを正しく紐付ける。
    • クエリでJOINするとき、共通のIDを使うことで「顧客ごとの注文一覧」といったリレーションを活用できる。

参照整合性

  • リレーションシップで「参照整合性を設定」すると、親テーブルの主キーが削除された場合に子テーブルも整合性を保つように自動制御が働きます。不要な孤立レコードを残さないためにも活用しましょう。

4. 正規化の基本概念

リレーショナルDB設計では、「正規化」という手法を使ってデータの重複や更新の不整合を減らします。詳細なステップは1~5正規形など色々ありますが、初心者は**第3正規形(3NF)**くらいまで意識するとよいでしょう。

  1. 第1正規形(1NF): 各フィールドが「単一の値」を持つようにする(複数の値をカンマ区切りで1セルに入れない)。
  2. 第2正規形(2NF): 複合主キー(複数の列を主キーにしている)を使う場合、主キーの一部にのみ依存するフィールドを分離する。
  3. 第3正規形(3NF): 主キー以外の列同士で依存関係がある場合、それらを分割する。たとえば「郵便番号」から「都道府県」を導くような冗長データはテーブルを分割する、など。

:

  • 1つのテーブルに「顧客名」「住所」「商品」「注文日」「商品単価」「注文数」とあらゆる情報を詰め込み、さらに同じ顧客名が何度も出てくるような設計はNG。
  • 「顧客テーブル」「商品テーブル」「注文テーブル」に分割し、IDを用いてリレーションを張ることで、重複を防ぎ更新ミスも減らす。

5. テーブル設計サンプル:顧客・商品・受注

具体的に見てみましょう。

  1. 顧客テーブル (tbl_顧客)
    • 顧客ID (主キー, オートナンバー)
    • 顧客名 (テキスト)
    • 住所 (テキスト)
    • 電話番号 (テキスト)
    • …ほか顧客情報
  2. 商品テーブル (tbl_商品)
    • 商品ID (主キー, オートナンバー)
    • 商品名 (テキスト)
    • 単価 (通貨型など)
    • 在庫数 (数値)
    • …商品属性
  3. 受注テーブル (tbl_受注)
    • 受注ID (主キー, オートナンバー)
    • 顧客ID (外部キー: tbl_顧客.顧客ID)
    • 商品ID (外部キー: tbl_商品.商品ID)
    • 注文日 (日付)
    • 数量 (数値)
    • …注文明細

リレーション例

  • tbl_顧客.顧客ID = tbl_受注.顧客ID
  • tbl_商品.商品ID = tbl_受注.商品ID

これにより、クエリで結合(JOIN)を使って「誰が」「どの商品を」「いつ」「何個」注文したか一目瞭然になり、データ更新時も整合性を保ちやすくなります。


6. Accessでリレーションを設定する手順

  1. リレーションシップ画面を開く
    • リボンから「データベースツール」→「リレーションシップ」を選択し、設定したいテーブルを追加。
  2. テーブル同士をドラッグで結ぶ
    • 親テーブル(主キー)から子テーブル(外部キー)へフィールドをドラッグ。
    • 「参照整合性を設定」にチェックを入れると、主キーと外部キーの関連を厳密に管理できる。
  3. リレーションができればJOINが簡単に
    • クエリのデザインビューで、結合線が自動的に引かれ、フォームやレポートで関連情報を扱いやすくなる。

7. 大規模化・SQL Server連携を見据えた設計のポイント

  • 主キーをGUIDではなくオートナンバーやID列に統一する。大規模DBでも取り扱いやすい。
  • SQL Serverでの拡張を考慮し、フィールド名に半角英数を用いたり(スペースを入れない)、将来的にINDEXが貼りやすい形にしておく。
  • できるだけ冗長なデータは分割し、IDを使ったリレーションで繋いでいくのが基本。

8. まとめ:正しいテーブル設計がAccess開発の要

  1. リレーショナルの考え方
    • データは関連し合うが、1つのテーブルに全部詰め込まず、テーブルごとに役割を分割。
    • 主キー・外部キーで関連づけることで、検索や集計を容易かつ整合性を保って扱える。
  2. 正規化
    • 重複データを極力排除し、更新ミスを防ぐ。
    • 第3正規形を意識して設計すると、基本的なデータ冗長の問題が解決しやすい。
  3. 実際の操作
    • Accessではリレーションシップ画面でテーブルを関連づけ可能。
    • クエリやフォーム設計時にも、スムーズにJOINを行えるようになる。
  4. 将来的な拡張
    • Accessファイル単体で運用可能な範囲を超えたら、SQL ServerやクラウドDBへ移行を検討。
    • そのためにも、テーブル設計段階でIDの使い方やリレーションの設定をしっかり固めておくと、移行も容易。

正しいテーブル設計は、Access開発だけでなく、どんなリレーショナルDBを扱う際も必須の基本スキルです。これを押さえると、後のフォーム・レポート作成やVBAによる機能追加がスムーズになりますので、ぜひ最初の段階でしっかりと意識してみてください。


関連記事

テーブル設計をバッチリ固めれば、Accessでの開発はぐっとラクになります。次は、デザインビューでクエリやフォームをどう組み立てるか学び、実際のシステムに活かしてみましょう。

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました