📘

DB設計初心者が交差テーブルに助けられました

2023/07/31に公開

概要

先日、社内にある10年分のExcelのデータをDBで管理することが決まり、管理するDBの設計を任されることになりました。
私にとってはこれが初めてのDB設計であり、基本情報技術者試験に出てくる内容ぐらいしか分からない状態でした。
流石にこのまま作業を進めることはまずいと思い、下記の「SQLアンチパターン」を購入。
https://amzn.asia/d/1dD947a
本書の内容はかなり勉強になり、私の中のDB設計の考え方の幅が広がりました。
特に本書で度々出てくる交差テーブルは今回のDB設計でお世話になりましたので、交差テーブルの考え方について備忘録代わりに残したいと思います。

交差テーブル

本書から抜粋ですが、ある製品を複数のアカウントが利用するときのDB設計を考えたときに、下記のようにアカウントと製品の関係性は1対多になります。
このときに製品のテーブルの1項目でアカウントを1つのリストにまとめて管理したとします。

しかし、上記の設計だと
*「製品を利用するアカウントのエントリ数は何件だろうか」
*「リストで区切り文字を区別するために使ってはいけない文字列をどうすべきか」
などを考えることになります。

そこで、1つの解決策として製品とアカウントの間にContactsというテーブルを用意することで、製品とアカウントの関係性を多対多で表現します。
このとき、Contactsには2つのテーブルを参照する外部キーを持つために交差テーブル(インターセクション:intersection)テーブルと呼ばれます。
これをER図で表現すると下記の通りになります。

これにより、

  • 特定の製品を利用するアカウントの上限は物理マシンに保存可能な件数のみ
  • 区切り文字を指定する必要がないために使ってはいけない文字を考える必要がない

などの上記の問題に対して解決することができます。

実際にどのように利用したか

  • 弊社で管理しているExcelファイルには企業情報も管理しているのですが、一般的な企業情報(支社名・住所など)以外にも企業別にメタ情報(サーバ名・カテゴリなど)を入れています。このようなときにメタ情報を扱うときに交差テーブルを用いて設計しました。
  • 弊社と取引のある業者から製品を送付してもらうときに問い合わせ番号というものをいただきます。AmazonのトラッキングIDのような情報であり、製品情報を業者へ問い合わせするときに「問い合わせ番号が〇〇の××という製品についてですが……」と使われます。そのために製品ごとに問い合わせ番号を交差テーブルを利用しました。

まとめ

「SQLアンチパターン」に出てくる交差テーブルの考え方を書きました。
また、実際のDB設計で交差テーブルを利用する機会が度々ありました。
DB設計として良い設計かは判断できませんが、他に方法が思い付かないときには助けられました。

Discussion