理事長のSQLパズル:階層つき分類の粒度・解答編

ちゃんと回答する前に解答が出てしまいました…。


さて、A案の擁護はこの程度で終えるとして、最後に、はてなブックマークで kamataro さんからコメントを戴いた、A案とB案の併用、つまり、3列 + 1列の合計4列持つ方法はどうか、という質問にお答えしましょう。

 私の考えでは、それは避けた方がよい、と思います。理由は更新の際に二度手間になるし、それによるデータ不整合を起こす要因を増やします。「一箇所に一つの事実」という正規化の原則を破るために、そうなってしまうのです。冗長性を減らすことが RDB の設計における第一目的です。

すいません。仰るとおりですorz。

言い訳をするなら、Identifierとしてのコードと属性は違うんじゃないかな?などと考えていたんですが、そもそも部品番号などと違って分類コードなので、そこまで考えずにどっちかだけ持たせれば十分ですね…。

後出しじゃんけんになりますが、そういう意味では個人的にはA案の回答が好みです。
カラムが別れていると、対照表で有効な組み合わせを作ったりもしやすいですし、キャストも不要なので。