Ett alternativ, mycket normaliserat, är att göra tabellerna mer lika
create table notifications(
notification_id serial primary key,
date_created timestamp not null default now(),
title_id text not null,
message_id text not null,
icon text not null default 'logo'
);
create table usernotifications
(
notification_id integer references notifications,
user_id integer references users
);
create table groupnotifications
(
notification_id integer references notifications,
group_id integer references groups
);
create table companynotifications
(
notification_id integer references notifications,
company_id integer references companies
);
där poster endast finns i den relevanta (användare/företag/grupp) aviseringstabell för en given notifikation.
(Jag tycker inte att det är något fel med nullbara främmande nycklar i situationen där det indikerar att den främmande nyckeln är valfri, men flera främmande nycklar av liknande typ ger intrycket av en denormaliserad design)