If the ad server gets confused, it tries to always serve up something to
fill the space. It looks for [ad_parameters DefaultAd
adserver] and [ad_parameters DefaultTargetUrl adserver].
If it can't find those, it notifies the site administrator to define
them.

The major feature of the adserver not covered by the book is that there
is a notion of ad groups. For example, if there are four ads that you'd
like a user to see in sequence, you can make them part of a group and
then make all the pages in a section of a site reference that group.
The page need only call adv_ad_from_group with the
group_key as an argument and it will get back a reference
to the next appropriate ad from that group.

-- this is for publishers who want to rotate ads within a group
create table adv_groups (
group_key varchar(30) not null primary key,
pretty_name varchar(50)
);
-- these will rotate in the order spec'd (ascending, e.g., 0, 1, 2...)
-- unless rotation_order is always NULL or is the same integer
-- in which case the order will be determined by however Oracle feels like
-- giving us the rows
create table adv_group_map (
group_key not null references adv_groups,
adv_key not null references advs,
rotation_order integer,
primary key (group_key,adv_key)
);