sql >> Database >  >> RDS >> Mysql

Pas de startpagina en e-mails van de deals-app aan dankzij de gebruikersgeschiedenis:hoe doe je dit op de juiste manier op Rails/postgreSQL?

Het schema dat je hebt beschreven zal zeer efficiënt zijn voor het soort zoekopdracht waarin je geïnteresseerd bent, op voorwaarde dat je de juiste indices op je tabellen plaatst. Databases gedragen zich niet als lijsten:het stellen van de vraag "Aan welke deals heeft XXX deelgenomen" zou niet de hele tabel moeten scannen, omdat een correct geïndexeerde tabel precies weet waar alle deals van XXX te vinden zijn.

Om dit correct in te stellen, zien uw migraties er als volgt uit:

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

Er is nog veel meer dat bij deze migraties hoort (u moet bijvoorbeeld niet-null-beperkingen, uniciteit-beperkingen, enz. toevoegen). Maar het punt is dat het hebben van deze indices de databasebewerkingen die je beschrijft extreem snel maakt.




  1. Hoe de dag, maand en jaar uit een datum in SQLite te halen

  2. hoe de datum in het maandnummer om te zetten?

  3. Vermenigvuldigen van twee kolommen die zijn berekend op een CASE-instructie

  4. Standaard tijdzone instellen op MySql Server via PhPMyAdmin