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.