DB設計の基礎基本


どうもチャンクノです。
先日チーム内でそれぞれ担当した箇所で気になるところを教え合う会第一弾を行ってきました。
今回はチーム開発でDB設計を担当してくれたファンキーな人からDB設計について色々教わったので備忘録として書きます!!!
ちなみに開発環境は
rails 5.2.2.1
mysql

初めにDBについてちょろっと書いてあとは書き方や型の種類、制約について書きます!!!

DBとはなんぞや

言わずもがなデータベースのことですね。
これがめちゃくちゃだとアプリもめちゃくちゃになってしまう(語彙力、、、)ので根底を支えるとても大事なものです!!!

型や書き方

DBにデータを保存する際にマイグレーションファイルというものに作りたいカラム名やカラムの型を記入していきます!!!
まずはそれの書き方から!!!

カラムの型 カラム名 制約

この順番で書きます。
これだけだとわかりにくいので

t.text :text, null: false
   ↑   ↑     ↑
  型  カラム名   制約

こう書きます!!!
null: falseについては後述します。

お次は型の種類!!!

型の種類

string型 短い文字を保存する時に使う型。名前とか。

text型 長い文字を保存する時に使う型。コメントとか商品説明の記述とか。

integer型 数字を入れる型。4bitまでしか保存できない。←これについてはよく分からないらしいです笑 また、0から始まると保存できないみたいです!!!

date型 年月日を保存するカラム。ユーザーが登録する時に「2019/1/1」や「2019.1.1」と入力しても必ず2019-1-1と自動で変更してくれる便利な機能がついています!!!嬉しい!!!

references型 references :user と書くと自動的にuser_idというカラムを自動で生成してくれます!!!そしてindexを自動で張ってくれるらしいです。嬉しい!!!
ちなみにこれを書くときは

t.references :user, foreign_key: true

このようにforeign_key: trueを必ずつけます。
referencesとforeign_key: trueはセットだと覚えましょう。

boolean型 読み方は「ブーリアン」です。例えば商品を買うかという問いに対してyesかno、つまりtrueかfalseの値を保存する二択専門のカラムです!!!使い方に関しては私もよくわかっていませんorz 要お勉強

最後は制約!!!

null: false カラムの値が空なのを許さないぞ😠というものです。とりあえず予期せぬエラーを防ぐためにつけておくといいんだとか。逆につけててエラーになることもありますが笑
まあつけてて損はないと思います!!!

uniquness: true 同じ値のものは保存できないよということです。例えばアソパソマソというユーザーがすでに登録されていた場合、他のユーザーがアソパソマソという名前で登録しようとするとできない、これがuniquness: trueです。登録する時に一文字変えれば回避できます。実際にはメールアドレスなどにこの制約をつけます。

foreign_key: true さっきも出てきましたね。これは外部キーの値が空になることを許さない制約です。

また、これらの制約は併用できるので適宜組み合わせて使いましょう!!!

ざっと基本的なことは学べたと思うので後はこれらをどう応用するか、それが難しそうですね。
大変な部分の一つではありますがこれができないと自分でサービスを作ることは不可能なため頑張りましょう。
私はこういうの苦手なので人より時間がかかってしまうかもしれません、、、。恐ろしや、、、。
ちなみに私はsns認証について解説してきます。頑張るぞ!!!
では皆様の良きプログラミングライフを祈って🙏