ジェイウォーク(信号無視)

ひとつの属性に複数の値を入れてしまうというもの。例えば、一人の社員が複数の部署に属するからといって、社員のテーブルの部署という項目にカンマ区切りで属する部署を入れてしまうといった設計である。問い合わせが難しくなったり、参照整合性制約が設定できない、長さに制約があるなどの理由から、アンチパターンであるとしている。はじめからこんな設計をする人はいないと思うが、変更するときにテーブルを作るのが面倒、または極端にテーブルの結合を忌避する人たちがこのような設計を選択するのかもしれない。COBOLのデータ定義にはこのような繰り返し項目が存在するらしいが、RDBでは第一正規形に違反しているともいえ、扱いに困る。
さすがに、こういう設計はあまりみない。ただし、私がよく見るのは固定長で異なる意味を持たせたコードを定義している設計である。例えば、10桁の社員コードの1−3桁が事業部で4−7桁が課、8−10桁が連番といったような体系を、そのまま社員コードとして属性(列)に定義する。事業部や課を取り出すのはSUBSTRING等の文字列の一部きりだして使用する。これもCOBOLでは構造化された項目として定義が可能なのだが、RDBでは存在しないため、大変扱いにくい。
設計する上では、内部的な格納構造と外部的な表示を分けるべきである。つまり、コードは確かに桁で意味を持たせた方が人間にとってはわかりやすいので、外部的な表示はこれでよい。しかし、DBに格納する場合は分割したそれぞれの列として保持すべきである。理由はこのアンチパターンとほぼ同じである。このパターンでは長さに制約があるという理由になっているが、このような固定長の構成になっている場合は、例えば連番がつきて桁が足りない場合はプログラム自体から作り直しが入るなど悲惨なことになってしまう。
なお、一桁目が分類でそれ以降の分割はその分類毎に異なるような設計も見られる。例えば、地方の事業部だけは、4桁目がどこの地方かを表し、5桁目から8桁目が課を示すなどである。いずれにせよ、このような設計はアンチパターンだと言えよう。