Mysql
 sql >> Base de données >  >> RDS >> Mysql

Personnalisez la page d'accueil et les e-mails de l'application de transactions grâce à l'historique des utilisateurs :comment le faire correctement sur Rails/postgreSQL ?

Le schéma que vous avez décrit sera très efficace pour le type de requête qui vous intéresse, à condition que vous mettiez les index corrects sur vos tables. Les bases de données ne se comportent pas comme des listes :poser la question "A quelles offres XXX a-t-il participé" ne devrait-il pas parcourir l'ensemble du tableau, car une table correctement indexée saura exactement où trouver toutes les offres de XXX.

Pour que cela soit correctement configuré, voici à quoi ressembleront vos migrations :

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

Il y a encore beaucoup plus qui appartient à ces migrations (par exemple, vous devez ajouter des contraintes non nulles, des contraintes d'unicité, etc.). Mais le fait est que le fait d'avoir ces index rend les opérations de base de données que vous décrivez extrêmement rapides.