[英]Rails Data Modeling: Campaign Modeling
我正在嘗試在Rails中構建一個廣告網絡類型的應用程序,該應用程序將允許創建屬性類似於以下內容的廣告系列:
我希望用戶能夠在一天中選擇多個日期,位置和時間段來投放廣告系列(如圖中所示)。 然后,根據客戶的位置,星期幾和一天中的時間段,客戶將拉出具有相應屬性的此類廣告。
我知道這是一個復雜的模型,有效地構建它至關重要。 也許有關於如何布局模型的教程或見解?
將日程表存儲為iCalendar 規則 (如果您願意,可以將其存儲為更規范的版本)。
創建一個函數以返回該規則的未來日期。
如果需要,可以創建即將到來日期的實例化視圖,以提高性能。
使用表繼承為地理位置建模。 您應該將城市視為州的子級,而不是縣的子級,因為某些城市包含縣。
您希望能夠將單個外鍵指向抽象的地理位置,例如“俄亥俄州”或“俄亥俄州庫霍荷加縣”
使用聯結表將多個位置映射到活動。
--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.