DB設計 テーブル定義書・SQL
はじめに
チーム開発でDB設計中の初心者です🔰
今日はテーブル定義書を作成しました。
それぞれの制約やデータ型について調べてみました。
INDEXについては結局どこにつけたらいいのかは曖昧な感じですが、基準はなんとなくわかったかな🤔
情報が多すぎてほんの一部分ですが、
後で時間があれば本など読んで勉強しようと思います🥲
テーブル定義書
テーブル定義書は、テーブルやカラムの定義や制約を定める設計書のこと。
Railsではmigrationファイルの材料となる、非常に重要なドキュメント!
テーブル名は全て複数形にすること📝
各制約
- PK(主キー)
- FK(外部キー)
- データ型
- NOT NULL
- AUTO INCREMENT
- INDEX
- DEFAULT
(enum = 名前を整数の定数に割り当てるのに使われる / 型はintegerで記述)
PRIMARY KEY(主キー)
- テーブル内の1つの行を一意に特定できるカラムのこと。
- 重複したデータを入力しようとするとエラーとなる。
- 必ずデータが格納されている必要があるため、NULLを挿入することはできない。
- 表に一つのみ定義できる。
FOREIGN KEY
- 外部キー制約は、テーブル間のカラム同士を関連付け、データの整合性を保つために設定。
- NULL値を含めることは可能。
- 「UNIQUE制約」、「PRIMARY KEY制約」が定義されている列しか定義できない。
- FOREIGN KEY制約を定義すると、親表は削除できない。
NOT NULL(空欄を禁止)
必ず何かを入力してほしいカラムに設定。
NOT NULL制約がかかっているカラムに、NULL(何も入っていない状態)のまま登録や更新しようとすると、エラーになります!
AUTOINCREMENT(自動的に連番を割り振る)
設定したカラムに自動的に番号を割り当てる機能。
Railsでモデルを作成すると、自動的に「id」カラムが作成され、レコードを追加するたびに1ずつ追加されていくが、これは、idカラムにAUTOINCREMENTが設定されているため。
INDEX
検索機能に優れていて、簡単にデータを抽出することができる。
名前の通り、本などの索引をイメージするとわかりやすい💡
🌱わかりやすい記事
DB内にINDEX設定したものだけでサブテーブルを作成。
INDEXに入っているデータは元の各カラムの住所を持っているから、すぐにデータを見つけることができるようになる!
インデックスがないと、いくらDBが検索機能に優れているとはいえ、
システムによっては、1万件〜などの膨大なデータを順番に探さないといけないので速度的な問題が発生する。
システム導入初期の時は問題がなくても(データが少ないため)
数年後データが膨大になった時に問題が発生することがある!
システム開発では、設計段階でどのくらいのデータがデータベースの各テーブルに登録されるのかを想定
必要に応じて、テーブルのカラムにインデックスの設定をすることが大切
最初の段階ではそこまで入れなくも、実装しつつDBの速度を見ながら足していけばOKらしいです。
入れすぎるのもDBにとって負担になってしまうそう。
DEFAULT(初期値を指定)
- この制約でカラムの初期値を設定することが可能。
- DEFAULT制約を設定しない場合の初期値はNULLになる。
UNIQUE(重複を禁止)
- 他の行のカラムに同じデータが存在する場合、データ登録を行えないようにする制約。
- 例)emailや電話番号など
- PRIMARY KEY(主キー)と違い、NULL入れることが可能。(NULL値は重複可能)
代表的なデータ型
データ型を使い分け、指定することで、データベースに制限をかけられる。
そのカラムには、指定した条件以外のデータを入れることができなくなる!
データ型 | 種類 |
---|---|
integer | 数値(整数) |
decimal | 数値(精度の高い小数) |
float | 数値(浮動小数) |
string | 文字(短い文字列) |
text | 文字(長い文字列) |
date | 日付 |
datetime | 日時 |
time | 時刻 |
timestamp | タイムスタンプ |
binary | バイナリ |
boolean | 真偽(trueかfalseかしか入らない) |
読んでおいた方がいい命名規則
リーダブルコードについても勉強しないとですね🧐
SQLについて
この流れでSQLについて少し学んでみました。
Structured Query Languageの略(構造化問い合わせ言語)
SQLとはデータベースを操作する【データベース言語】。
SQLで何ができる?
- データの保管、取得、更新、削除🌟
- テーブルの作成、更新、削除
- アプリ開発時にデータベースを操作できる
- データ分析してビジネス活動を改善
💡_φ(・_・
Railsでは、Rails標準のライブラリであるActive Recordを利用して、Modelを実装します。
つまり、Railsでは、Active Recordを使って、データベース(テーブル)にデータを格納したり更新したり、データベース(テーブル)に格納したデータを検索したりできるということです。
Active Recordを使うことで、SQLを直に実行する必要はほぼなくなります。
Active Recordは、ユーザーに代わってデータベースにクエリを発行していて、発行されるクエリは多くのデータベースシステム(MySQL、MariaDB、PostgreSQL、SQLiteなど)と互換性があります。
Active Recordを使えば、利用しているデータベースシステムの種類にかかわらず同じ記法を使えます。
💡
今まではSQLについてそこまで意識してきませんでしたが、
メソッドを使った時にどんなSQL文が発行されているのか?は随時目視して確認していきたい!🤔
🌱わかりやすい記事
🌱参考にさせていただいた記事
🎥動画
Discussion