初心者の私がデータベース設計(主に正規化)を学んで感じたこと
データベースの入門書を読むなどすると第〇正規形や〇〇関数従属などの見慣れない言葉を目にする。最初は当然よくわからないが、しばらく勉強していると「言っていることはわかる」状態にはなれる。しかし、実際に上手くできるかは別であり、わかりやすい正解があるわけでもないので最初の段階で苦労することは避けられない。自分も「最初のテーブル設計ミスったら後が大変だよな・・・」と思ってなかなか手が動かなかった。
こういった困難はいずれ乗り越えなければならないのは当然としたうえで、本当の初学者の段階では過度に意識するのも良くないようにも思える。ミック著「達人に学ぶDB設計 徹底指南書」(p116)では下記のような指摘がなされている。
正規化を行なうためには、テーブル内部の従属性の関係を見抜く必要があります。
こうした従属性はテーブルを形式だけ見ていてもわかりません。どの列がどのキーに従属しているか、ということは業務ロジック(ビジネスルール)で決まることなので、各列が業務上どのような意味と関係を持っているか、ということを調べなければなりません(業務分析の必要性)。
また、初心者の私がデータベース設計を学ぶにあたって参照したSQL攻略においても、
データベースの正規化は、顧客業務に通じたエンジニアの仕事であり、この理論を生かすためには長年の経験、継続的な業務の学習が大切だと思います。
との指摘がある。これらを踏まえると、テーブル設計の技術は一朝一夕で会得できるものではないことが分かるので、最初から気負い過ぎないのも大事な気がした。
余談
データベースの設計ではなくSQLの話であるが、勉強になったのでメモ。直近の勉強でサブクエリをSELECT句に使うかFROM句に使うか悩む場面があったが、いまいち使い分けの方針が掴めずにいた。そこで、学習教材として利用させていただいたサイトであるTECH PROjinのSQL練習問題-問67において、以下の記述があった。
SELECT句に副問合せを記述する場合には、その副問合せでは1件しかデータを返さないようにしないといけません。複数件のデータが返るようなデータ構造ならば、前問のようにFROM句での副問合せを使用しましょう。
初歩的な知識かもしれないが、自分にとっては有益だったので誰かの助けになれば幸いである。