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

以下では、初心者向けに「テーブル設計の基本(リレーショナルデータベース入門)」をテーマに、Accessでシステムを作る際に押さえておきたいポイントを解説します。リレーショナルデータベース(RDB)としての考え方や正規化、主キーや外部キーなどの概念を理解すると、データの重複や整合性の問題を防ぎ、スムーズなシステム開発へと繋がります。Access以外のDBでも共通する考え方なので、ぜひ学んでみてください。
1. リレーショナルデータベース(RDB)とは?
リレーショナルデータベースは、データを表(テーブル)の形式で管理し、行(レコード)と列(フィールド)で構造化して扱うデータベース方式です。各テーブル同士は、共通する項目(キー)を通じて関連づけ(リレーション)を行います。
ポイント
- Excelのように1枚のシートで完結するのではなく、関連するデータを複数のテーブルに分割して持つ。
- テーブル間の関連づけを基礎として、検索や集計を効率的に行う。
Accessでは、テーブルをリレーショナルに設計することで、データの重複を減らしつつ、フォームやレポート、クエリを通じて柔軟な操作が可能になります。
2. テーブル設計の基本プロセス
- 業務要件の把握
- まず、どのようなデータを管理したいのかを整理します。例えば、「顧客」「商品」「注文」「在庫」など。
- それぞれに必要な項目(氏名、電話番号、住所、商品名、単価、在庫数量など)を洗い出す。
- テーブルの候補を作成
- 集めた項目を、論理的にまとまりのある単位でテーブルに分けていきます。
- 顧客関連情報は「顧客テーブル」、商品関連情報は「商品テーブル」、といった具合にテーマごとに分割。
- 主キーの設定
- 各テーブルには「主キー(Primary Key)」を設定し、行を一意に識別できるようにします。
- 自動採番(オートナンバー)や業務上でユニークとなる項目(メールアドレスなど)を主キーにすることが一般的。
- リレーション(外部キー)を設定
- テーブル同士を関連付ける場合、「外部キー(Foreign Key)」を使って紐付けを行います。
- 例)注文テーブルに「顧客ID」という列を作り、顧客テーブルの主キーを参照する。
- 正規化とデータ重複の排除
- 同じ情報を複数のテーブルやフィールドで管理すると、更新漏れや整合性崩れが発生しやすいです。
- 正規化のルールを参考に、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正規形(1NF): 各フィールドが「単一の値」を持つようにする(複数の値をカンマ区切りで1セルに入れない)。
- 第2正規形(2NF): 複合主キー(複数の列を主キーにしている)を使う場合、主キーの一部にのみ依存するフィールドを分離する。
- 第3正規形(3NF): 主キー以外の列同士で依存関係がある場合、それらを分割する。たとえば「郵便番号」から「都道府県」を導くような冗長データはテーブルを分割する、など。
例:
- 1つのテーブルに「顧客名」「住所」「商品」「注文日」「商品単価」「注文数」とあらゆる情報を詰め込み、さらに同じ顧客名が何度も出てくるような設計はNG。
- 「顧客テーブル」「商品テーブル」「注文テーブル」に分割し、IDを用いてリレーションを張ることで、重複を防ぎ更新ミスも減らす。
5. テーブル設計サンプル:顧客・商品・受注
具体的に見てみましょう。
- 顧客テーブル (tbl_顧客)
- 顧客ID (主キー, オートナンバー)
- 顧客名 (テキスト)
- 住所 (テキスト)
- 電話番号 (テキスト)
- …ほか顧客情報
- 商品テーブル (tbl_商品)
- 商品ID (主キー, オートナンバー)
- 商品名 (テキスト)
- 単価 (通貨型など)
- 在庫数 (数値)
- …商品属性
- 受注テーブル (tbl_受注)
- 受注ID (主キー, オートナンバー)
- 顧客ID (外部キー: tbl_顧客.顧客ID)
- 商品ID (外部キー: tbl_商品.商品ID)
- 注文日 (日付)
- 数量 (数値)
- …注文明細
リレーション例
- tbl_顧客.顧客ID = tbl_受注.顧客ID
- tbl_商品.商品ID = tbl_受注.商品ID
これにより、クエリで結合(JOIN)を使って「誰が」「どの商品を」「いつ」「何個」注文したか一目瞭然になり、データ更新時も整合性を保ちやすくなります。
6. Accessでリレーションを設定する手順
- リレーションシップ画面を開く
- リボンから「データベースツール」→「リレーションシップ」を選択し、設定したいテーブルを追加。
- テーブル同士をドラッグで結ぶ
- 親テーブル(主キー)から子テーブル(外部キー)へフィールドをドラッグ。
- 「参照整合性を設定」にチェックを入れると、主キーと外部キーの関連を厳密に管理できる。
- リレーションができればJOINが簡単に
- クエリのデザインビューで、結合線が自動的に引かれ、フォームやレポートで関連情報を扱いやすくなる。
7. 大規模化・SQL Server連携を見据えた設計のポイント
- 主キーをGUIDではなくオートナンバーやID列に統一する。大規模DBでも取り扱いやすい。
- SQL Serverでの拡張を考慮し、フィールド名に半角英数を用いたり(スペースを入れない)、将来的にINDEXが貼りやすい形にしておく。
- できるだけ冗長なデータは分割し、IDを使ったリレーションで繋いでいくのが基本。
8. まとめ:正しいテーブル設計がAccess開発の要
- リレーショナルの考え方
- データは関連し合うが、1つのテーブルに全部詰め込まず、テーブルごとに役割を分割。
- 主キー・外部キーで関連づけることで、検索や集計を容易かつ整合性を保って扱える。
- 正規化
- 重複データを極力排除し、更新ミスを防ぐ。
- 第3正規形を意識して設計すると、基本的なデータ冗長の問題が解決しやすい。
- 実際の操作
- Accessではリレーションシップ画面でテーブルを関連づけ可能。
- クエリやフォーム設計時にも、スムーズにJOINを行えるようになる。
- 将来的な拡張
- Accessファイル単体で運用可能な範囲を超えたら、SQL ServerやクラウドDBへ移行を検討。
- そのためにも、テーブル設計段階でIDの使い方やリレーションの設定をしっかり固めておくと、移行も容易。
正しいテーブル設計は、Access開発だけでなく、どんなリレーショナルDBを扱う際も必須の基本スキルです。これを押さえると、後のフォーム・レポート作成やVBAによる機能追加がスムーズになりますので、ぜひ最初の段階でしっかりと意識してみてください。
関連記事
テーブル設計をバッチリ固めれば、Accessでの開発はぐっとラクになります。次は、デザインビューでクエリやフォームをどう組み立てるか学び、実際のシステムに活かしてみましょう。