Brak pomysłów co do struktury db

Cześć
Mam takie pytanie otóż tworzę panel informacyjny odnośnie statystyk kampanii dla witryny.

ID witryny i Nazwa witryny jest importowana przez csv.
Np:
325,Eska.pl
Ok to jest jasne , dodatkowo mam atrybut campaign_id

Kampanie importuje również przez csv i tutaj jest problem, gdyż w pliku który importuje mam wszystkie kampanie,wszystkich witryny.Czyli jest tak , że ID kampanii jest duplikowane przez ilość stron internetowych na których wyświetlana jest reklama

id,site_id,name,impressions,click
321,325,Nazwa kampanii,1000.10
321,322,Nazwa kampanii,1000.10

Gdy zaciągam bez id kampanii i id jest generowane automatycznie jest ok.Tylko jest tak , że jedna kampania ma wiele ID i aby zmienić np stawkę kampanii to muszę to robić dla każdej witryny.

Czy wie ktoś jak to powinno wyglądać?

Jak dobrze zrozumiałem jest to relacja wiele do wielu
The has_and_belongs_to_many Association

OK prawdopodobnie chodzi o to.

Ustawiłem następująco:

class CampaignSite < ActiveRecord::Base
end

class Campaign < ActiveRecord::Base
	has_and_belongs_to_many :sites
end

class Site < ActiveRecord::Base
	has_and_belongs_to_many :campaigns
end

I rozumiem, że rekordy dodaje do CampaignSite z atrybutami site_id campaign_id ?

Jeżeli nie chcesz nic dodatkowo trzymać w relacji to tak, jeżeli potrzebujesz trzymać dodatkowe dane to wybierz:
The has_many :through Association

Czy w Realization dodatkowe dane mogą być nazwa witryny i nazwa kampanii ?

Co z dodatkowymi atrybutami?

Relacja wygląda tak

  create_table "campaings", force: true do |t|
    t.string   "name"
    t.date     "from"
    t.date     "to"
    t.integer  "site_id"
    t.integer  "impressions"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "click"
    t.integer  "clicks"
  end

  create_table "realizations", force: true do |t|
    t.integer  "site_id"
    t.integer  "campaign_id"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "realizations", ["campaign_id"], name: "index_realizations_on_campaign_id", using: :btree
  add_index "realizations", ["site_id"], name: "index_realizations_on_site_id", using: :btree



  create_table "sites", force: true do |t|
    t.string   "name"
    t.integer  "use"
    t.integer  "booked"
    t.integer  "alldeclaration"
    t.boolean  "declaration"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

Importuje dane site_id i campaign_id do modelu realization. Gdzie powinienem importować np nazwe kampanii nazwe strony , ilości odsłon i klików w danej kampanii dla danej strony ?

Bo tak przeglądam i chyba nie o taką relację chodziło albo coś źle zrozumiałem ;(

nazwa kampanii i nazwa strony należą odpowiednio do modeli campaing i site, natomiast ilość odsłon i klików do modelu realization.

W modelu campaing dodałeś liczbę klików, co może być interpretowane jako liczbę klików dla danej kampanii bez względu jakiej strony dotyczyły, a pewnie chcesz żeby było rozbicie per strona więc kliki powinny się znaleźć się w realizations.

W modelu campaing masz też atrybuty from i to co oznacza kiedy dana kampania jest aktywna, natomiast możesz takie pola dodać do modelu realization co będzie oznaczało kiedy dana kampania jest aktywna dla tej konkretnej strony. Wartości w polach from i to mogą być takie same w obu modelach (campaing i realization) albo różne w zależności od konkretnej sytuacji.

Dobra, powiedzmy , że zmienię atrybuty zgodnie z tym jak napisałeś.
Jak np wtedy odwołać się do ilości klików w danej stronie dla danej kampanii ?

Czy są jakieś myki railsowe czy trzeba to wyciągnąć Sql’em ?

Dla pierwszej kampanii i pierwszej strony

c = Campaing.first
s = Site.first 
r = c.realizations.where(site_id: s).first
if r.nil?
  puts "No realization for #{c.name} and #{s.name}"
else
  puts "#{c.name} with #{s.name} has #{r.cliks}"
end

Dalej mam problem.
Nie mogę sobie poradzić z wyświetleniem kampanii które należą do danej strony;/

Chciałbym w sites/show/1 wyświetlić wszystkie kampanie które należą do danej strony.
W konsoli stworzyłem sobie już Realization Site Campaign

  Realization Load (0.4ms)  SELECT  `realizations`.* FROM `realizations`  WHERE `realizations`.`id` = 2 LIMIT 1
 => #<Realization id: 2, site_id: 1, campaign_id: 2, impressions: nil, clicks: nil, created_at: "2015-03-20 11:29:59", updated_at: "2015-03-20 11:29:59">

 Campaign Load (0.3ms)  SELECT  `campaigns`.* FROM `campaigns`  WHERE `campaigns`.`id` = 2 LIMIT 1
 => #<Campaign id: 2, name: "Adidas", from: nil, to: nil, impression: nil, click: nil, ff: nil, created_at: "2015-03-20 11:29:19", updated_at: "2015-03-20 11:29:19">

  Site Load (0.4ms)  SELECT  `sites`.* FROM `sites`  WHERE `sites`.`id` = 1 LIMIT 1
 => #<Site id: 1, name: "eskago.pl", use: nil, booked: nil, alldeclaration: nil, declaration: nil, created_at: "2015-03-20 11:28:59", updated_at: "2015-03-20 11:28:59">

Model wygląda następująco:

class Realization < ActiveRecord::Base
  belongs_to :site
  belongs_to :campaign
end
class Site < ActiveRecord::Base
  has_many :realizations
  has_many :campaigns, through: :realizations
end
class Campaign < ActiveRecord::Base
  has_many :realizations
  has_many :sites, through: :realizations
end

W modelu realization podaje również ilość Klików i Odsłon , zgodnie z tym co mi @musashimm podpowiedziałeś.
W Site/show/1
Chciałbym wyświetlać nazwę kampaniii , ilość odsłon i ilość klików.

Proszę o pomoc jak powinien wyglądać controller site/show oraz widok dla show

Pomógłby mi ktoś?