Mysql
 sql >> Database >  >> RDS >> Mysql

Personalizza la home page e le email dell'app offerte grazie alla cronologia degli utenti:come farlo nel modo giusto su Rails/postgreSQL?

Lo schema che hai descritto sarà molto efficiente per il tipo di query che ti interessa, a condizione che tu metta gli indici corretti sulle tue tabelle. I database non si comportano come liste:porre la domanda "A quali offerte ha partecipato XXX" non dovrebbe scansionare l'intera tabella, perché una tabella indicizzata correttamente saprà esattamente dove trovare tutte le offerte di XXX.

Per impostare correttamente questa configurazione, ecco come saranno le tue migrazioni:

class CreateStandardUsers < ActiveRecord::Migration
  def change
    create_table :standard_users do |t|
      t.string :name
      t.timestamps
      # More fields go here
    end

    add_index :standard_users, :name
  end
end

class CreateDeals < ActiveRecord::Migration
  def change
    create_table :deals do |t|
      t.references :admin_user
      # other fields go here
    end

    add_index :deals, :admin_user_id
    # other indices go here... anything you want to search on efficiently.
  end
end

class CreateDealParticipations < ActiveRecord::Migration
  def change
    create_table :deal_participations do |t|
      t.references :standard_user
      t.references :deal

      t.timestamps
    end

    add_index :deal_participations, :standard_user_id
    add_index :deal_participations, :deal_id
    add_index :deal_participations, :created_at
  end
end

C'è ancora molto di più che appartiene a queste migrazioni (ad esempio dovresti aggiungere vincoli non nulli, vincoli di unicità, ecc.). Ma il punto è che avere questi indici rende le operazioni del database che stai descrivendo estremamente veloci.