こんにちは!新チームの立ち上げ準備がほとんど進んでおらず茫然自失の hikaru-kimi です!
Rails エンジニアの皆さんはDB操作をする際どのように操作されてますか? 恐らく Rails 標準ORMツールの ActiveRecord かと思います
ActiveRecord は便利ですが、SQLを知らないと不便なこととかやっぱりありますよね
ということで、今回は DB の View について解説していきたいと思います
DB の View とは、一言で言い表すと SELECT 文で作成された仮想的なテーブルです
決まった複雑なSQLを毎度組み立てるのって案外骨折れますよね?そんなとき、view を利用すれば簡単に出力可能となります
また、専用のテーブルを作成する必要がありませんので、DBの容量の節約にも繋がります
View の作成方法と使用方法
では試しに view を作成してみましょう
authors has many books の関係を持つ authors テーブルと books テーブルがあるとします
=> \d authors; Table "public.authors" Column | Type | Collation | Nullable | Default --------+-----------------------+-----------+----------+--------- name | character varying(20) | | not null | id | integer | | not null | Indexes: "authors_pkey" PRIMARY KEY, btree (id) Referenced by: TABLE "books" CONSTRAINT "books_author_id_fkey" FOREIGN KEY (author_id) REFERENCES authors(id) => \d books; Table "public.books" Column | Type | Collation | Nullable | Default -----------+-----------------------+-----------+----------+--------- title | character varying(20) | | not null | id | integer | | not null | author_id | integer | | not null | Indexes: "books_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "books_author_id_fkey" FOREIGN KEY (author_id) REFERENCES authors(id)
この2テーブルを元に、books の title と authors の name を表示する view を作成したいと思います
普通に SQL で select するのであれば、以下のようなとても複雑な SQL を記述する必要があります
=> SELECT -> books.title, -> authors.name -> FROM -> books -> INNER JOIN authors ON authors.id = books.author_id; title | name --------------------+------ The Great Gatsby | John War and Peace | John Gone With the Wind | Mary (3 rows)
しかし、以下のように view を作成すれば上記の出力が簡単なSQLだけで済みます
=> CREATE VIEW book_authoer_views AS -> SELECT -> books.title, -> authors.name -> FROM -> books -> INNER JOIN authors ON authors.id = books.author_id; CREATE VIEW
=> SELECT -> * -> FROM -> book_authoer_views; title | name --------------------+------ The Great Gatsby | John War and Peace | John Gone With the Wind | Mary (3 rows)
弊社インゲージでは、様々な技術に関心を持てるエンジニアを募集しています
少しでも興味の湧いた方は、以下のリンクよりどうぞご応募をよろしくお願いいたします