Sono d'accordo con la risposta di @ Kilian e ho pensato di aggiungere qualcosa alla discussione:
Ciò che descrivi è come catturare quella che sarebbe naturalmente una situazione di sottoclasse in OOP e mapparla al modello relazionale.
In OOP, potresti avere un evento (non ricorrente) e un evento ricorrente sottoclasse. O un evento astratto con due sottoclassi di eventi unici e eventi ricorrenti.
Come altro esempio, prendi una nozione di record dei dipendenti. In OOP avremmo forse un dipendente astratto con due sottoclassi, una per il CEO che, per definizione, non ha un manager dei dipendenti identificato e tutti gli altri dipendenti che devono avere un altro dipendente come manager. (Oppure potremmo fare a meno della classe astratta).
Nei sistemi relazionali, questo tipo di semplice sottoclasse causa un sacco di mal di testa, e probabilmente la migliore mappatura consiste nell'utilizzare una singola tabella dei dipendenti con un campo manager (da fk a self), e consentire a NULL il campo del direttore del CEO.
Codd descrive due usi di NULL: "mancante e applicabile" e "mancante e non applicabile". Il primo significa che sarebbe valido se avessimo i dati (semplicemente non ce l'abbiamo), mentre il secondo indica che questa colonna non si applica a un record di questo tipo.
Purtroppo, i due usi di NULL non sono distinti nei database SQL.
(Inoltre, non esiste un'indicazione formale su quale sia il vero tipo di riga, devi solo dedurlo dai valori nulli nelle colonne facoltative. Se ci fosse, potremmo forse dire che la colonna deve essere NULL per le righe ) di tipo CEO e non deve essere NULL per le righe regolari dei dipendenti.)
Come dice @Kilian, qui non esiste una buona pratica concordata.
Tuttavia, se ponessi la tua domanda da una prospettiva OOP, penso che troverai risposte che consigliano di utilizzare la sottoclasse.
Quindi i problemi nella mia mente sono quelli della mappatura relazionale. Nei mapping relazionali di tali situazioni, NULL viene comunemente utilizzato per campi facoltativi che non si applicano a causa della (sotto) digitazione. In questo caso, NULL significherebbe Codd's Missing e Non applicabile perché per un evento una volta il campo di ricorrenza non è applicabile.