アプリケーション開発において、データベースとの連携はなくてはならないものです。大きなプロジェクトではデータベース設計は専門のエンジニア任せですが、企業によってはアプリ開発のすべてを一人で担当することもあるでしょう。
私の部署でもアプリ開発は基本1アプリ/1担当となっており、最低限のデータベースの知識は必要です。これまでなんとなく設計していた「要件定義」や「テーブル設計」の部分を今一度学び直しています。とにかくデータベース関連の記事・書籍はわかりにくい&自分のケースに合ったものに出会えないのが一番の課題です。
DBモデリングを行う上で非常に参考になった記事
私は、プログラミング系の技術に関しては基本的に書籍で学ぶことが多いのですが、書籍は「買って(読んで)みないとわからない」部分が多いのが悩み。著者の言い回しや内容が、自分に合っているかどうか、ある程度中身を読んでみないとわからないんですね。
本とはそういうものですが、それだと困ります(笑)
今回、データベース設計手法を学び直すにあたって、好評だった下記の書籍を購入しました。
達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ
しかしこの本、中級者向けなのですね。。。データベース設計の基礎から学び直したいと考えていた私にはまだ早い内容でした。しばらくお蔵入りです。
そこで、データベース設計の初心者向けの有力な情報が無いか、ネットで検索していると、「決して陳腐化しないデータベース設計の超基礎」という記事を見つけました。
[st-cmemo fontawesome=”fa-external-link” iconcolor=”#BDBDBD” bgcolor=”#fafafa” color=”#757575″ iconsize=”100″]決して陳腐化しないデータベース設計の超基礎[/st-cmemo]
随分古い記事ですが、この記事で書かれている内容は、目からウロコが落ちるようなことばかりです。今まで、手法やツールを使うことばかりにとらわれていたことが、いかに問題を複雑にしていたことかわかりました。難しく考えすぎていたんだと気付かせてくれる記事になっています。
決して陳腐化しないデータベース設計の超基礎の要約
勘所の要約
- 1.要件の調査・・・システムの動作や処理内容
- 2.非機能要件・・・性能・信頼性・拡張性・セキュリティ
- 3.システム化対象データの範囲決定
- 3-1.業務フローの作成
- 3-2.モデリング
データモデリング「4大要素」
- エンティティ・・・管理する必要がある情報
- 関連(リレーション)・・・結びつきのあるエンティティ同士をリンクする
- 属性・・・エンティティ内でまとめて管理される情報
- 関連の多重度・・・エンティティの関係を一方通行で見ず、相関関係を十分考慮する
モデリングに必要なスキル
- ER図の表記方法の習得
- モデルを考える
- モデルを表現する
ER図をどんなにキレイに書けたとしても、DB設計に問題があれば運用できません。どのような情報をDBに書き込むか、どのようにデータを格納しておくのかといった内容、そして1つのエンティティにどんな要素が必要なのかを抽出する能力が必要です。
データベースは運用が始まってしまうと、途中から構造を変えることが難しいケースもあるため、初期段階での設計が非常に重要になります。
正規化
データベース設計初心者において、非常に難しい「正規化」。正規化はただしく実施できればパフォーマンスも可読性も上がり、堅牢なデータベースが構築できる。しかしながら、第1正規形、第2正規形などと難しい言葉が出てくると頭が痛くなり「やっぱりデータベースは難しい・・・」となってしまう。
そこで 決して陳腐化しないデータベース設計の超基礎 では、「少し乱暴な定義」としながらも下記のように解説されています。
正規化とは「エンティティを、可能な限り細かい、最小単位にしておく」という考え方
そのための第〇正規形なのですね。難しいことばよりも、考え方・まとめ方の話になり、ちょっと気持ちが楽になりました。実際に正規化するにはテクニックも経験も必要ですが、なぜ正規化が必要なのかも、自分で設計し、失敗しながら学んでいくしかないようです。
手順が分かったところで、すんなり設計できるわけでは無い
上記で紹介した 決して陳腐化しないデータベース設計の超基礎 を読んだところで、さっそくデータベース設計ができるわけではありません。「モデリング」と言われる、データベースを構築する要件を抽出する作業では、テーブル設計の勘どころがわかっていなければなりません。
これには、「経験が必要」と上記の記事にも書かれていますが、そもそも経験が無い者にはどうしたらよいかわからないんですよね。実際にテーブル設計を始めてみて「カラム名の付け方は??」「主キーってなに?」「文字コードや型は何を使うの?」といった技術的なところでつまづきます。
そんなときに参考になったのが下記のスライドです。
[st-cmemo fontawesome=”fa-external-link” iconcolor=”#BDBDBD” bgcolor=”#fafafa” color=”#757575″ iconsize=”100″]MySQLテーブル設計入門[/st-cmemo]
このスライドではMySQLについてのテーブル設計手法が開設されています。文字コードや型の選び方などが非常に参考になります。MySQLの参考書はたくさん出ていますが、文字型でCHAR型、VARCHAR型、TEXT型と複数選べる中で、何を選択するべきか書かれたものはあまりありません。型紹介にとどまっているものが多いのですね。当スライドでは、困ったら〇〇を選ぶ、〇〇は選ぶメリットが無い、など具体的に紹介されており参考になります。
また、スライド中で「正規化」についてもわかりやすく紹介されています。正規化は第1正規形、第2正規形などと手法ばかりがクローズアップされ、実際にやってみると難しいものです。これこそ経験がものをいう作業ですが、根本的な考え方がわかっていないと、そもそも間違った正規化をしがち。
どんな作業を抽象化(データベース化)するかによってデータベースの組み方も変わってきますが、スライドを見ていくと、正規化についても少し理解が深まります。ありがたい資料を無料で公開してくださっていることに感謝です。
実際には、これらの資料を見て設計しても、自分が設計したデータベースが正しいのかどうか、不安で不安で仕方ないのですが(笑)でもまぁ一通り動いて、ER図もフローチャートも残せる状態にはなりましたので、あとは手を動かして学んでいくしかありません。
さいごに
データベース設計は、どんなにノウハウがあっても実際に手を動かして自分で構築してみなければ力付きません。また、システムを組んだ後でテーブル設計のミスが発覚することも多々あります。
特に速度の問題は、データが溜まってきたあとで問題になるケースも多く、初期の段階ではわかりにくいんですよね。初心者には特にデータベースにチューニングが必要だなんてことすらわかりません。私もデータベースはそれほど多く設計して来ませんでしたので勉強中ですが、「誰が見てもわかるテーブル設計」と「必要なデータが取り出しやすいデータベース」を目指して努力したいと思います。
データベース関連でわかりやすい書籍等あれば、ぜひ教えてください!!
コメント