1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails/DB入門】string型とtext型の違いって何?データベースの「箱」を賢く選ぼう!

1
Posted at

はじめに

こんにちは!Railsでマイグレーションファイルを作成していると、t.stringt.text という記述が出てきますよね。 「どっちも文字を入れるものでしょ?」「全部textでいいんじゃないの?」と思ったことはありませんか?

この記事では、この2つの型の違いと、なぜちゃんと使い分けるべきなのかを、分かりやすい「箱」のイメージで解説します!

「箱のサイズ」で考える

データベースの型は、情報をしまうための「箱」のようなものです。stringtextは、この箱のサイズや性質が異なります。

string text
イメージ 身分証明書の名前欄 🖋️ ノートや巻物 📜
用途 短い決まった長さの文字列 長い、可変長の文章
文字数制限 ある (通常255文字まで) ほぼない (64KB以上)
パフォーマンス 高速 (サイズが予測できるため) やや遅い (サイズが大きいため)
具体例 ユーザー名、メールアドレス、投稿のタイトル 投稿の本文、自己紹介文、商品説明

なぜ使い分けるの?

「大は小を兼ねる」で、全部text型でも良さそうに思えますよね。しかし、パフォーマンスに違いが出ます。

データベースは、stringのようにサイズの上限が決まっている小さな箱の方が、中身を探したり、並べ替えたりする作業がずっと得意で、処理も高速です。

そのため、

  • ユーザー名やタイトルなど、明らかに短いとわかっているデータには string

  • 投稿本文や自己紹介など、どれくらいの長さになるか分からない文章には text

というように、データの内容に合わせて適切なサイズの「箱」を選ぶことが、良いデータベース設計の第一歩なのです。

Railsマイグレーションでの例

実際にRailsでpostsテーブルを作る際のマイグレーションファイルを見てみましょう。

db/migrate/YYYYMMDDHHMMSS_create_posts.rb
class CreatePosts < ActiveRecord::Migration[7.0]
  def change
    create_table :posts do |t|
      # 投稿のタイトルは短いのでstring
      t.string :title

      # 投稿の本文は長くなる可能性があるのでtext
      t.text :content

      t.timestamps
    end
  end
end

まとめ

  • string短い文字用の、高速な小さい箱

  • text長い文章用の、大容量な大きい箱

データに合った型を選ぶ癖をつけることで、あなたのアプリケーションはより効率的で、堅牢なものになります!

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?