PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Conception de base de données - champs nullables

Une option, hautement normalisée, consiste à rendre les tables plus semblables

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
);

où les entrées n'existent que dans la table de notifications pertinente (utilisateur/entreprise/groupe) pour une notification donnée.

(Je ne pense pas qu'il y ait quelque chose de mal avec les clés étrangères nullables dans la situation où cela indique que la clé étrangère est facultative, mais plusieurs clés étrangères de type similaire donnent l'impression d'une conception dénormalisée)