RailsをAPIサーバーとして使えるように開発しています。
状況
テレビ番組を例にとり、modelには番組情報が入るProgram
とテレビ局の情報が入るStation
があるとします。
Program title:string, null: false detail:text station:references, foreign_key: true, null: false start_time:datetime end_time:datetime Station name:string, null: false channel:integer, null: false
以上のような感じの構成で、すでにrails db:migrate
されています。
番組の開始時間順に並び替えてjsonを吐くように作っておりますので、開始時間start_time
にindexを貼ろうと考えました。その際、テレビ局station_id
とstart_time
の関係はuniqueですので、unique制約を付けた方が良いのか迷っています。以下が実行予定のmigrationです。
def change remove_index :programs, column: :station_id add_index :programs, [:start_time, :station_id], unique: true end
質問
いまいちunique制約についてイメージが掴めていないのですが、例えば全データの中から.find_by()
を使いstation_id
で絞り込んで、そこからPrograms
の情報を開始時間順に取り出す場合について考えます。
この時、unique制約があることで、どのような仕組みで速くデータが取り出せる(SQLの呼び出しが少なくて済む?)のかがいまいちわかりません。というかそもそも、この場合にunique制約が必要なのかもイマイチわかりません。。
また、こちらには"unique indexの順序"とありますが、これは逆にすると何かがかわるのか、どのように"使えそうな順序"を判断すればよいのかもわかりません。
どなたか、ご教授お願いします。
解決に際し、参考になったサイト
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/02 06:53
2018/05/02 12:35