sql >> Databasteknik >  >> RDS >> Mysql

Anpassa erbjudanden-appens hemsida och e-postmeddelanden tack vare användarhistorik:hur gör man det på rätt sätt på Rails/postgreSQL?

Schemat du har beskrivit kommer att vara mycket effektivt för den typ av fråga du är intresserad av, förutsatt att du lägger rätt index på dina tabeller. Databaser beter sig inte som listor:att ställa frågan "Vilka affärer deltog XXX i" borde inte skanna hela tabellen, eftersom en korrekt indexerad tabell vet exakt var man kan hitta alla XXXs erbjudanden.

Så här kommer dina migreringar att se ut för att få den här inställningen korrekt:

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

Det finns fortfarande mycket mer som hör hemma i dessa migrationer (t.ex. bör du lägga till icke-null-begränsningar, unika begränsningar, etc). Men poängen är att de här indexen gör databasoperationerna du beskriver extremt snabba.




  1. Sqoop on Dataproc kan inte exportera data till Avro-format

  2. Automatisk ökning i tillfällig tabell

  3. Vad är skillnaden mellan django.db.backends.dummy och django.db.backends.mysql?

  4. Välj unika rader, enligt värde i en sekundär kolumn