sql >> Database teknologi >  >> RDS >> Mysql

Tilpas tilbudsappens hjemmeside og e-mails takket være brugerhistorik:hvordan gør man det på den rigtige måde på Rails/postgreSQL?

Det skema, du har beskrevet, vil være meget effektivt til den type forespørgsel, du er interesseret i, forudsat at du sætter de korrekte indekser på dine tabeller. Databaser opfører sig ikke som lister:At stille spørgsmålet "Hvilke aftaler deltog XXX i" burde ikke scanne hele tabellen, fordi en korrekt indekseret tabel ved præcis, hvor man kan finde alle XXXs tilbud.

For at få denne opsætning korrekt, ser du sådan her dine migreringer vil se ud:

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

Der er stadig meget mere, der hører hjemme i disse migreringer (du bør f.eks. tilføje ikke-nul-begrænsninger, unikke begrænsninger osv.). Men pointen er, at det at have disse indekser gør de databaseoperationer, du beskriver, ekstremt hurtige.




  1. Det er ikke dig, det er mig (I/O-fejlfinding)

  2. Flytning af Wordpress-websted til Docker:Fejl ved etablering af DB-forbindelse

  3. Atomic UPSERT i SQL Server 2005

  4. Tilføj dynamisk en kolonne med flere værdier til enhver tabel ved hjælp af en PL/pgSQL-funktion