LoginSignup
2
2

More than 3 years have passed since last update.

【開発ログ③】初心者がデータベースの設計をしたらこうなったよ。

Last updated at Posted at 2020-05-08

前提について

はじめまして、いりふねと申します。
現在プログラミングスクールにてアプリケーション開発の勉強をしております。32歳独身A型、さそり座です。

この記事は、スクールの課題である個人開発アプリの記録であり、私自身のアウトプットの場として設定しております。未熟な点も多いと思いますが、見かけてくださった方にどんどん指摘をしてほしいと思っております。

作成するのは、有給休暇管理ツールです。
概要説明はこちら

また、開発するアプリケーションについては、実際にデプロイまでは行う予定ですが、サービスとしてリリースするわけではありません。アプリケーションの性質上、高いセキュリティを求められるものであり、短期で仕上げるようなものではないと思っているからです。完成品には「注意書き」も入れようと思いますが、くれぐれも完成品を見かけても個人情報を書き込まないで下さい。

では、本題へどうぞ。

仕様書の続き

前回に引き続き、仕様書を書いてみようと思います。
今回は、データベース設計とその他について記述していきます。

データベース設計

ER図

ER図を作成してみました。手書き楽しい!!
IMG_0606.png

今回は、4つのテーブルを使ってみようと思います。
スクールのカリキュラムで学んだ中間テーブルで多対多の組み合わせのリレーションも作りたかったんですが、今回作りたいものを私なりに考えると、結局1対多のテーブルばかりになりました。次回は挑戦してみたいです!!

①users table

Column Type Options
name string null: false, add_index
email string null: false, unique: true
password integer null: false

Association

  • has_many :branches
  • has_many :holidays

アプリケーションを利用するユーザーのテーブルです。
カリキュラムで学んだ「devise」を使ってみようと思います。

②branches table

Column Type Options
name string null: false
user_id integer null: false, foreign_key: true

Association

  • belongs_to :user
  • has_many :employees

支社を登録するためのテーブルです。
色んな会社の人事担当者が使用すると考えると、どのユーザーがどの支社を所有しているかというイメージになったので、外部キーとしてuser_idを設定しました。

③employees table

Column Type Options
name string null: false
employment_status integer null: false
hire_date date null: false
branch_id integer null: false, foreign_key: true

Association

  • belongs_to :branch
  • has_many :holidays

所属する社員を登録するテーブルです。社員は、必ず1箇所の支社に所属しています。一方、有給休暇を付与されたり、消化するたびにholidayレコードは増えていくイメージです。

④holidays table

Column Type Options
add_day integer add_index
delete_day integer add_index
reason text default: ‘法定付与日のため’
user_id integer null: false, foreign_key: true
employee_id integer null: false, foreign_key: true

Association

  • belongs_to :user
  • belongs_to :employee

ここが一番悩みました。有給休暇の増減を表すテーブルです。add_dayが付与、delete_dayが消化や喪失など表しています。社員の有給休暇の残日数は、add_dayの合計からdelete_dayの合計を引いて表現しようと思います。各レコードは社員に所属しているので、employee_idを外部キーに設定しました。
また、社員の有給消化時に消化したというレコードを投稿をするのは、管理者であるuserなので、ユーザーの外部キーuser_idも設定しています。
この他、法定付与日は、付与と喪失が同時に行われますが、ここはその日付になったら自動でレコードが作れないかと考えています。自動で作った場合は、reasonが記述できないので、デフォルト値で「法定付与日のため」と入れば良いなと思っています。

その他

Herokuでデプロイを行います。
postgreSQLをデータベースとして使用します。

いずれもカリキュラムの指示ではありますが、私自身も初めて調べながら使っていきます。はじめて答えの載っていないものを使用するので、うまくいくかはわかりませんが、チャレンジということでできる限りでがんばります!!

今日の積み上げ

postgreSQLが、導入できました。ブログ記事等を参考に進めましたが、書いている方によって設定方法や手順がまちまちだったので、半日くらいかかりました。結果、無事オプションにpostgreSQLを選択してRailsの新規アプリケーションを立ち上げて、開発用とテスト用のデータベースを立ち上げることができました。
localhost3000の「Yay! You're on Rails!」を見て泣きそうになった。。カリキュラムと実践はこうも違うのか。

2
2
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
2
2