mayu-tateno / give-me-three

0 stars 0 forks source link

DB設計・ER図作成 #6

Open mayu-tateno opened 4 months ago

mayu-tateno commented 4 months ago

概要

3 のこのアプリのコアになる機能と、そのほか考えている機能を考慮に入れてDB設計を行う。

必要最低限のテーブルをまず実装する。

mayu-tateno commented 4 months ago

暫定

今の所大体こんな感じにしようと思っている。 ※実装段階ではまずUsers, Stories, Words, StoryWordsのみ実装すればいい。 ランダムな3単語で小説を書ける機能が最小単位。 Usersはログイン機能を実装する時にSorceryを使おうと思っているので、Sorceryのコマンドで作成することになるか…?

単語のカテゴリは、あったら便利程度の機能といえばそうなので、実際に実装するか含めどんなカテゴリを追加すべきかなど検討・テーブル追加のためのIssueを別で立てる。全体的に考える必要があったのでDB設計だけここで先に考えた。

https://app.diagrams.net/?libs=general;er#G1b8SuMmfDDIvnN7jYaqfQ327BL70Tuy2l#%7B%22pageId%22%3A%22R2lEEEUBdFMjLlhIrx00%22%7D

image

リクエスト機能はまだ検討段階で他の機能に影響もなさそうなので、実装を決めてから設計でもOK。

単語のカテゴリは、一つの単語に対し、複数のカテゴリを紐づけ可能な実装にしたいので、単語テーブルにカテゴリ用のenum追加ではなく、中間テーブルを作成する。 enumだと検索が早くなりそうだが、複数のカテゴリを紐づけることができない。 複数紐付け可能なので中間テーブルWordCategoriesのレコード数がWordsのレコード数の何倍かの量になるかも…?

Wordsテーブルのカラム名 単語名のカラムの命名はnameで良いだろうか。 名詞は英語でnounなので紛らわしいこともないだろう。wordだとテーブル名と被るのが気持ち悪いし、Wordsのwordでは意味が通らない。

mayu-tateno commented 4 months ago

追加で機能を実装するときのDB変更案を練る

個人的なメモ

単語3つが紐づいていない場合も小説が書けるようにするには Storiesテーブルにフラグとなるカラム(例えばboolean型のrequire_three_wordsとかis_sandaiみたいなの)を追加して管理する

小説にもカテゴリを紐付けたい場合 小説の場合も、カテゴリは複数紐づけ可能な仕様にしたい。 問題は小説のカテゴリ専用のテーブルを作成するか、それともCategoriesテーブルに単語のカテゴリか小説のカテゴリかを区別するためのenumのカラム(命名はtypeなど)を追加して利用するか。 今の所Categoriesテーブルに一緒に入れる方法を考えている。 理由

別にする場合だと、それぞれのテーブル名の命名がわかりにくくなりそう。ていうか命名どうするんだろう。

設計的には別の方が良い気がしてきた…

単語リクエスト機能 Requestsテーブルを作成することになるが、単語に紐づくカテゴリをどう管理するか…。 単語名、品詞、既存のカテゴリに入れたいものがあればそれを複数選択できる。また、DBに存在しない新たなカテゴリもリクエストできるようにするには、、、? それか単純に単語のみリクエストしてもらって、運用するときに管理者がどのカテゴリに振り分けるか考える…?(個人開発規模ならこれでも全然アリだと思うけど、もし規模が大きければ運用担当の手間が増えそう…)

コメント機能 感想などを書けるようにする。 Usersと一対多のCommentsテーブルを作成する。StoriesとCommentsも一対多? そこまでの機能必要なさそうだけど、あるコメントへの返信コメントを可能にするにはどうするんだろう?

そのほか機能追加で必要になるかもしれないカラム

mayu-tateno commented 3 months ago

実装手順メモ

give-me-three % docker compose up
give-me-three % docker compose exec backend bash
tatenomayu@tatenomayunoMBP give-me-three % docker compose exec backend bash
root@d1645d08973c:/app# rails db:create
Database 'give_me_three_development' already exists
Created database 'give_me_three_test'

developmentはコンテナにあるからalready exists

/app# rails generate model Words name:string part_of_speech:integer 
/app# rails generate model Users name:string role:integer
/app# rails generate model Stories title:string body:text user:references
/app# rails generate model CreateStoryWords story:references word:references

※Usersテーブルは、ログイン機能を作るときに rails g sorcery:installして、そのときできるmigrationファイルにそのほか必要なカラムを追加する