悩み多き年頃で

とあるシステム開発でデータベース設計の真似事をするはめになっているのだが、悩ましいことがある。とあるユーザのコード登録が必要な類のマスタがある。このマスタがどう考えても正規化されていない。いや、正確に言うと現状は正規化されているように見えるのだが、正規化されているように見える理由は例外ケースをマスタに無理に押し込めていたり、そもそも扱っていなかったりするからだ。今回のリプレースは、その例外ケースをきちんと扱えるようにしてほしいという要望もある。

ただ、正規化してテーブルを分割すると、二つのマスタにほぼ同じ情報を登録しなければならない場合が多くあり、コードの二重管理という問題という問題が出てくる。当然、お客は嫌がる。嫌がるが正規化されていないそのテーブル構造では将来に禍根を残すことになりかねない(例外ケースでは、NULLにならざるを得ない項目が多くなるし、分析するという観点からも複数の概念が一つのマスタに入っているので不安だ)。

お客の意向に沿って今は便利だけど将来破綻する可能性があるシステムを作るか、多少めんどくさいところもあるけれど将来にわたって柔軟に対応できるシステムを作るか。

いったいどちらが正しい選択なのだろうか。