sql >> Base de Datos >  >> RDS >> Mysql

Personalice la página de inicio y los correos electrónicos de la aplicación de ofertas gracias al historial del usuario:¿cómo hacerlo correctamente en Rails/postgreSQL?

El esquema que ha descrito será muy eficiente para el tipo de consulta que le interesa, siempre que coloque los índices correctos en sus tablas. Las bases de datos no se comportan como listas:hacer la pregunta "¿En qué tratos participó XXX?" no debería escanear toda la tabla, porque una tabla correctamente indexada sabrá exactamente dónde encontrar todos los tratos de XXX.

Para configurar esto correctamente, así es como se verán sus migraciones:

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

Todavía hay mucho más que pertenece a estas migraciones (por ejemplo, debe agregar restricciones no nulas, restricciones de unicidad, etc.). Pero el punto es que tener estos índices hace que las operaciones de la base de datos que estás describiendo sean extremadamente rápidas.