Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Personalize a página inicial e os e-mails do aplicativo de ofertas graças ao histórico do usuário:como fazer isso da maneira certa no Rails/postgreSQL?


O esquema que você descreveu será muito eficiente para o tipo de consulta que você está interessado, desde que você coloque os índices corretos em suas tabelas. Bancos de dados não se comportam como listas:fazer a pergunta "Em quais negócios o XXX participou" não deve examinar a tabela inteira, porque uma tabela indexada corretamente saberá exatamente onde encontrar todos os negócios do XXX.

Para configurar isso corretamente, veja como serão suas migrações:
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

Ainda há muito mais que pertence a essas migrações (por exemplo, você deve adicionar restrições não nulas, restrições de exclusividade etc.). Mas o ponto é que ter esses índices torna as operações de banco de dados que você está descrevendo extremamente rápidas.