質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

3911閲覧

Railsのモデルのカラム制約をDBにもつけるべきか?

mitsuru793

総合スコア157

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2015/09/30 11:09

Railsのマイグレーションファイルでテーブルを作成する際に、null: falseなどのオプションをつけるとDBでNOT NULL制約がつくと思います。他に外部キーなどです。

これはつけることによってDBにアクセスして直接操作する際にも、バリデートがかかることになります。ところがrails tutorialのソースコードを見てみると、DBにカラム制約はつけておらずにモデルにhas_manybelongs_to, precense: trueをつけているだけです。モデルにこれらをつけるとモデルを通して保存する時にrubyコードの段階でエラーが発生させることができます。

ですが、DBを直接操作する際にこのバリデートは効かないと思います。Railsでアプリを作る際はカラム制約はあまり使われない傾向があるのでしょうか?使わない場合はセキュリティなどに問題が起きる場合はありますでしょうか?

カラム制約を作るメリット・デメリットが知りたいです。rails以外でもDBを使うときにマイグレーションにカラム制約をつけるたりするのかなと思いました。

ご回答、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

●付けるべきです

直接操作、アプリのバグなどによって期待した制約が足されている保証がなくなると、アプリは読み取ったデータひとつひとつについてまず整合性をチェックする必要が出てきます。アプリのプログラミングを簡単にするためには、整合性を保証してあげることです。

●なぜチュートリアルやOSSアプリで制約が使われていない?

RDB製品によって使える制約には大きな差があります。CHECK制約さえないMySQLから条件付きUNIQUEの制約までかけられるPostgreSQLまで。特定のRDBに依存しないようにしたいときは、制約は使いづらいのです。

投稿2015/09/30 13:41

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitsuru793

2015/09/30 13:55

ご回答、ありがとうざいます。 なるほど。アプリのバグの際の保険になるのですね。RDBの違いはよくわからないのでsqlite3にしていましたが、どんな制約が使えるかで変わってくるのですね。今はNOT NULLとユニークしか思いつかないのでsqlite3でいいですが、もう少し凝ったものを作る場合はpostgresにしようと思います。 > アプリのプログラミングを簡単にするためには、整合性を保証してあげることです。 RDBにカラム制約をつけることが、なぜプログラミングを簡単にすることに繋がるのでしょうか?保証がなくなった際の確認の手間が省けるということでしょうか。それともロジックの記述量が減ることがあるのでしょうか。
yuba

2015/09/30 13:58

保証がなくなった際の確認の手間が省ける、ということです。 特に個人情報扱う場合や法人契約で提供するようなサイトなど、アプリが予想外の動作をしてくれては困りますので予想外のデータに気をつかわなくていいのはかなり大事です。
mitsuru793

2015/10/01 12:52

> 特に個人情報扱う場合や法人契約で提供するようなサイトなど お陰さまでイメージが掴めました。モデルのバリデートだけでなくDBのカラム制約も使っていこうと思います。 ご回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問