sql >> Databáze >  >> RDS >> Mysql

Přizpůsobte si domovskou stránku a e-maily aplikace nabídek díky uživatelské historii:jak to udělat správným způsobem na Rails/postgreSQL?

Schéma, které jste popsali, bude velmi efektivní pro druh dotazu, který vás zajímá, za předpokladu, že do svých tabulek vložíte správné indexy. Databáze se nechovají jako seznamy:položení otázky „Kterých obchodů se XXX účastnil“ by nemělo prohledat celou tabulku, protože správně indexovaná tabulka bude přesně vědět, kde všechny nabídky XXX najít.

Abyste toto nastavení správně nastavili, vaše migrace budou vypadat takto:

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

Do těchto migrací patří ještě mnohem více (např. byste měli přidat nenulová omezení, omezení jedinečnosti atd.). Jde ale o to, že díky těmto indexům jsou databázové operace, které popisujete, extrémně rychlé.




  1. SQL – uložená procedura s příkazem Select pomocí IN (@Variable_CommaDelimitedListOfIDS)

  2. Jak získám datum příštího měsíce z dnešního data a vložím je do své databáze?

  3. Křížová tabulka s velkým nebo nedefinovaným počtem kategorií

  4. Zobrazila se mi chyba Nepodporované vyhledávání 'icontains' pro CharField nebo připojení v poli není povoleno.