簡體   English   中英

Rails數據建模:戰役建模

[英]Rails Data Modeling: Campaign Modeling

我正在嘗試在Rails中構建一個廣告網絡類型的應用程序,該應用程序將允許創建屬性類似於以下內容的廣告系列: 在此處輸入圖片說明

我希望用戶能夠在一天中選擇多個日期,位置和時間段來投放廣告系列(如圖中所示)。 然后,根據客戶的位置,星期幾和一天中的時間段,客戶將拉出具有相應屬性的此類廣告。

我知道這是一個復雜的模型,有效地構建它至關重要。 也許有關於如何布局模型的教程或見解?

將日程表存儲為iCalendar 規則 (如果您願意,可以將其存儲為更規范的版本)。

創建一個函數以返回該規則的未來日期。

如果需要,可以創建即將到來日期的實例化視圖,以提高性能。

PostgreSQL處理RRULE的函數

使用表繼承為地理位置建模。 您應該將城市視為州的子級,而不是縣的子級,因為某些城市包含縣。

您希望能夠將單個外鍵指向抽象的地理位置,例如“俄亥俄州”或“俄亥俄州庫霍荷加縣”

使用聯結表將多個位置映射到活動。

--postgresql syntax

create table campaigns (
  campaign_id int primary key,
  name text unique,
  rrule text not null check ( is_valid_rrule(rrule) ) --you would need to write this
);

create table locations (
  location_id int primary key,
  type text not null check ( type in ('COUNTRY', 'PRIMARY_DIVISION','SECONDARY_DIVISION') ), --use a lookup table in real life
  name text not null,
  parent_id int null references locations (location_id) check ( type = 'COUNTRY' or parent_id is not null),

  unique (name, parent_id)
);

create table campaign_locations (
  campaign_id int references campaigns(campaign_id),
  location_id int references locations(location_id),

  primary key (campaign_id, location_id)
);

--insert some locations:

insert into locations values
(1, 'COUNTRY', 'United States of America', null),
(2, 'PRIMARY_DIVISION', 'Ohio', 1),
(3, 'SECONDARY_DIVISION', 'Cuyahoga County', 2),
(4, 'SECONDARY_DIVISION', 'Adams County', 2);

--create a campaign with a recurrence rule:

insert into campaigns values
(1, 'My Campaign', 'FREQ=WEEKLY;BYDAY=MO,WE');

--associate a campaign with Cuyahoga and Adams counties:

insert into campaign_locations values
(1, 3),
(1, 4);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM