【DB論理設計】ジェイウォークとは? 【アンチパターンその1】

こんにちは、えびじゅん(@ebijun1007)です。

 

本シリーズでは、エンジニアなら必ず読むべきと言われている名著「SQLアンチパターン」から、システム開発に役立つアンチパターンを紹介します。

1回目の本記事では、データベース論理設計のアンチパターンその1「jaywalk(ジェイウォーク)」について解説します。

早速ですが、↓の画像を見て違和感や気持ち悪さを感じますか?

ブログ記事(article)と編集者(author_id)を紐づけるテーブルです

 

特になんとも思わなかったり、気持ち悪さはあるけどどう直して良いかはわからないという方はぜひ続きを読んでみてください。

余裕で直せるわい!という人は、この記事から得られる情報は多分無いです🙇‍♂️

 

では、いくぞ!

 

そもそものジェイウォークの意味は?

jaywalk: 交通規則や信号を無視して街路を横切る

jaywalk -weblio-

横断歩道を無視して道路を横切るとか、そういった意味もあるみたいですが

ほ〜ん、で?DB設計に交通規則やら信号でもあるんかいな?っ思いますよね

実はあったんですよ。

ジェイウォーク=交差テーブルを使っていないという意味

SQLアンチパターンにおけるジェイウォークは交差テーブルを使っていないという意味です。

交差点を避けるのと、交差テーブルを避けるのを掛けてジェイウォークと名付けたようです。

(あんまりしっくりこない、洋書あるある)

 

そもそも交差テーブルとはなんぞや🤔🤔🤔

 

ジェイウォークと交差テーブルの具体例

簡易的なテーブルを作りながら、ジェイウォークが発生している状況と、それを解決するために使う交差テーブルについて簡単に説明します。

ジェイウォークが発生している状況

まず適当なテーブルを作ります。イメージはブログ記事(article)と編集者(author)を管理するテーブル

ブログ記事と編集者が1対1の状態

記事1を編集できるのはidが100の編集者、記事2を編集できるのはidが101の編集者という、ブログ記事と編集者が1対1になる状態です。

ここまでは普通のテーブル構造です。

さて、ここで偉い人から依頼が来ました

 

🧖‍♂️「1つの記事に対して複数の編集者を割り当てたいんじゃが

🦐「うぃい」

 

🦐「とりあえずauthor_id増やしときゃいけんべ」

と安直に修正したテーブルがこちら↓

既存のテーブル構造をイジることなく、author_idを追加しただけの簡単な修正です。

だがしかし残念なことにジェイウォークが発生してしまっています。

何がイケてないの?

1つのセルに複数の情報(2人分の編集者id)が詰まってしまっています。そのせいで、

  • 検索しにくい
  • 更新しにくい
  • index効かない

という状態になります。もはやデータベース失格レベルです。

ではどんな風に修正するのがよかったか?

ジェイウォークの解決方法(=交差テーブルの使い方)

ここでようやく交差テーブルの登場です。

もともと1つのテーブルにまとめていた情報を、交差テーブルに切り出します。

こうすることで、綺麗なテーブル構造を維持することができます。

編集者を増やしたい場合は、交差テーブル(画像の場合だとarticle_author_table)のレコードを増やすだけで済みます。

まとめ:ジェイウォーク(交差無視)

  • 1つのセルに複数の情報を詰め込まない
  • それを避けるためには交差テーブル(中間テーブル)を活用する
  • ハワイではジェイウォーク(横断歩道無視)をすると$130の罰金

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください