質問: UNIQUEインデックスとは UNIQUE制約とは 複合インデックスとは
回答: 走り書きになりますが少しだけ回答しておきます。 **unique制約があることで、どのような仕組みで速くデータが取り出せる(SQLの呼び出しが少なくて済む?)のかがいまいちわかりません。** unique制約 unique index(unique索引) というのは、データベースの索引の話です。 まず整理すると unique index(unique索引) これは 「検索」機能に対して働くデータベースの速度向上の仕組みです。 そしてこれを使うことで、データベースはB-tree(2分木)や ビットマップインデックスという「速くデータが取り出せる」仕組みが使えます。 これが1つ目の疑問の回答です。 次ですがunique制約と、もう1つ別の制約があります。 unique制約と、uniqueでない制約があります。 uniqueでない制約は、「一意ではない」つまり重複を許すカラムに対して 検索のためにつける制約です。 そして一意なカラムに索引をつけて、検索向上をする場合 unique制約をつけます(定義します)。 ですので **この場合にunique制約が必要なのか** の問いには テレビ局station_id(またはstation?)カラムは 一意な(uniqueな)カラムなので unique制約をつけます。 また **テレビ局station_idとstart_timeの関係はuniqueですので、unique制約を付けた方が良いのか ** ですが、上の回答を読んでいただければ このご自身の認識が間違いであるとわかるでしょう。 (station_idとstart_timeの関係はunique ではなく・・・) **unique indexの順序"とありますが、これは逆にすると何かがかわるのか、どのように"使えそうな順序"を判断すればよいのか** 複合キーをきちんと利用するの内容は 正直、不親切だと思いました。 順序は 理論的には・。。 や 自然キーや複合キーがあるのであれば、それを意識し、正しく扱うことが重要であることは変わらない。 といっても基本的にはunique indexはるだけではある のくだりなど。 もっと詳しい正しい説明があるので、サイトを探して読んでみてください。 ここでは簡単に。 ``` def change remove_index :programs, column: :station_id add_index :programs, [:start_time, :station_id], unique: true end ``` せっかくなので、こちらの実行メソッドを 見直してみてください。 他の方が回答だけ示すかもしれませんが、 いい感じで学習、学ばれている感じがしますので、 ここで回答をとめておきます。 結構大事だと思います、こういう思考の過程。 それでは。