1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flask × SQLite】個人開発でゼロからDB設計した実録メモ【ガチ初心者向け】

Posted at

前提

個人開発のアプリで元々Googleスプレッドシートからデータを取得していたが、データの数が増えたのに合わせてデータベースの実装を決意しました。
初めてのDB設計でしばらく手が止まってしまっていたので、今回はDB設計から作成完了までの流れをまとめたいと思います。
各ステップに関しての深掘りはしないので、DB設計の大まかな流れを描いた地図のようなものだと考えていただければ幸いです。

初学者の方はぜひ参考にしてください。

参考リンク

今回、以下の2つの記事を参考にして進めました。
実際に手を進める中で必要ない部分がでてきたりして、より簡易的な方法になりました。より深く知りたい場合や、用語の知識などが知りたい方は必要に合わせて参照してください。

データベース設計の基本の進め方!ポイントとあわせて解説

分かりやすく正規化について理解しよう (データベース)
※二本目の正規化の記事に関しては少し難しい説明も入っているので、AIなどに投げながら進めていくことをおすすめします。内容自体はとてもよく、理解が深まりました。

今回作ったデータベースについて

今回は「駅 × キーワード」の組み合わせに応じた検索データを扱うDBを作成しました。
たとえば「渋谷 × パーソナルジム」のように、特定の駅とサービス名を指定して必要な情報(新規店舗立ち上げの参考にする為の情報です)を引き出せるような構成になっています。

設計順序

この記事では、5つのステップで設計の流れを解説します。
本格的なDBを作成しようとすればもっと多いと思いますが、初学者の一歩目となるDB設計なのでご理解ください。

1.目的や要件を書き出す

DBを実装する目的、要件を書き出します。
僕の場合、今回は要件というのも少なくてあまり堅苦しいものを書く気にもなれなかったので、方向性を見失わない程度に箇条書きで書きました。

2.エンティティを抽出する

エンティティとはテーブルの候補になるものです。細かい用語に関しては参考リンクを見てもらうとして、要はDBに必要な情報をとにかく書き出します。

細かいことはこの後のステップで考え、洗練させていくことになるので、今はとにかく思いついたものから書いていってください。プロジェクトの拡張などを見越してかけると直良です。

僕の場合、駅やキーワード、分析結果、おすすめ度などが出てきました。

3.ER図を作成する

ER図作成します。先ほど抽出したエンティティを元に、

  • どんなテーブルを作るのか
  • そのテーブルにどんな属性を持たせるのか
  • テーブル同士はどんな関係にするのか

これらが視覚的にわかるよう表現します。ブラウザでER図と検索すると一気にイメージできると思うのでやってみてください。テーブル同士の関係(=relationship)を表現する方法に関しても、やってみるとすぐに理解できると思います。

4.正規化する

ER図まで書き終えてある程度イメージができてきたら、次は正規化です。
正規化とは、DBを整理して無駄なデータの重複をなくすことを言います。
DBの正規化には推奨される手順のようなものがあり、通常は第1正規化〜第3正規化までを行うことによって正しく整理されるとされています。

簡単に各段階について説明すると、
第1正規化:1つのマスに1つの値を入れること。
第2正規化:複合主キーを使うとき、一部のキーだけで決まってしまう情報は他のテーブルに切り出すこと。
第3正規化:1つのテーブル内で、主キーによって決まる値があるとき、さらにその値によって決まってしまう値があればそれを切り出すこと。

正規化に関しても、参考リンクに細かい解説記事があるのでそちらを見てみてください。
分かりやすく正規化について理解しよう (データベース)

実際に設計を進めていると、エンティティの抽出やER図の関係性など、あとから変更の必要に気づくこともあると思います。2〜4までのステップは行き来するものだと考えておくといいでしょう。

僕の場合は、分析結果用のテーブルにあった情報を切り出したりしました。
たとえば、平均世帯年収や人口などの項目があったのですが、これらは駅が決まれば確定する値です。分析結果テーブルは駅とテーブルの複数項目を主キーとしているので、駅のみで値が確定する項目は第二正規化に違反しますね。よって、それらを駅テーブルに項目を移すことで解決しました。

他にも、おすすめ度などをカットしました。
おすすめ度は単なる1~5までの数字型のデータにしかならず重複していても何も問題ないものだったからです。(正直どの正規化に当てはまるかは理解できてませんが...。)

5.データ型を決定する

最後に、データ型を決定します。
完成したER図をみながら、各データはどのような形で保存するのかを考えます。どんな型があるかは調べればすぐに出てくるので、必要なのは実際にデータを保存する場面を想像することです。将来どのようにDBに保存されたデータを使うのか、そしてどうすれば管理などがしやすくなるかを考えながら決めるようにしましょう。

設計を元にDBを作成する

ここまでで設計は一旦完了です。
あとはご自身のプロジェクトでER図を参考にモデルとして書き出して、DBを作成してください。

今回はFlaskのSQLAlchemyを使ってモデルを作りました。
Pythonには sqlite3 モジュールが標準で入っており、Flaskからも Flask-SQLAlchemy を使うことで簡単にSQLiteと連携できます。
そのまま、SQLite用のDBファイルを作って作成完了となります。GUIからも無事に作られていることが確認できました。

モデルを作成したあとは、簡単なサンプルデータも手動で挿入して、DBとアプリの連携が正常に動くかどうかを確認しました。

今回はSQLiteやSQLAlchemyでの細かい書き方は省略しますが、とても簡単なのでぜひ使ってみてください。気が向いたらそちらも記事にしようと思います。

おわりに

今回は初学者に向けて簡単なDB設計の流れを解説しました。

問題点はまだまだあると思いますが、初めてのDB設計はとてもいい経験になりましたし、何より自分で実際に使えるDBがつくれたことはとても嬉しかったです。

僕と同じように、知識が足りない人は最初何からしていいか悩んで手が止まってしまうこともあると思いますが、そんな人はぜひ本記事を参考にDB設計の一歩目を踏み出していただければと思います。

それではまた。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?