データベースは論理的でなければならない

多忙&出張でなかなか書けなく、久しぶりに記事書きます。
データベースについてです。
データベース設計において重要なのは、論理性です。私が思うには、IT業界の中で最も論理的なモノがデータベースではないかと思います。

【論理的じゃないデータベースとは?】

こんなの見たことありませんか?
名前を苗字と名前で分けてるテーブル。住所を住所1、住所2などで分けてるテーブル。
分けること自体は否定しませんが、分けて管理する意味があるのかを問います。
苗字のみで検索する必要があるのか? 名前だけで検索する必要があるのか?
住所1のみで検索する必要があるのか? 住所2のみで検索する必要があるのか?
もし、無いのであれば、非論理的です(スポックみたいw)。
無駄にカラムを増やしていますし、プログラム側の処理も無駄が増えます。

【論理的にデータベースを設計するには?】

1.検索のされ方と必要性のあるカラムを想定する
ビジネスロジック上、どういう検索のされ方、必要性を想定するべきです。そこには、データベース・アーキテクトはビジネスロジックを理解し、最もDBに負荷が出そうな統計データを考慮するべきです。また、営業さんやユーザーがどういう組み合わせデータが欲しいのかを想定するべきです。

2.テーブル1つ1つにおいて、何を管理したいかを明確にする
なんとなくや、闇くもにテーブルを作るのはいろいろな意味で危険です。データベースとはただのデータの箱ではありません。データを論理的に管理するための仕組みです。テーブルを作る場合は、1つ1つ何を何のために管理するかを考えましょう。

3.SQLを考える
ビジネスロジックと論理的なテーブルが組みあがったら、最後にSQL文の事を考えてあげてください。UNION ALLや副問合せを連発しなければならないようなDBスキーマは間違いかもしれません。

ちなみに、私はDBが嫌いでしたw。絶対にSQLなど書かないと決めててDBエンジニアがやればいいと思ってましたが、Oracle派の会社にいた時に、MySQLを使わなければならなくなって、誰もMySQL知らなかった(15年以上前)ので、覚えたらいつの間にやら・・・・