Avresti bisogno di trigger per inserire "automaticamente" il record in una tabella separata.
L'inserimento del record in UserPrivacy con una query separata sarebbe il modo più comune per implementarlo.
Se si tratta di una relazione uno-a-uno, inserirla nella stessa tabella consente query più semplici (nessun join richiesto).
Decisioni, Decisioni...
Con una relazione uno a (da zero a uno), ci sono più fattori da considerare.
Se la tabella UserPrivacy è grande, potrebbe avere senso inserirla in una tabella separata per risparmiare spazio. Questo sarebbe anche più normalizzato.
Se stavi interrogando spesso qualcosa come "Dammi tutti gli utenti che non hanno PrivacyData", potrebbe avere senso inserirlo in una tabella separata. Poiché gli indici non includono valori NULL (per impostazione predefinita), sarebbe più veloce eseguire un JOIN in una tabella separata. Naturalmente, la soluzione consiste nell'utilizzare un valore diverso da NULL per rappresentare "nessuna impostazione della privacy", ma anche una cardinalità bassa influisce negativamente sulle prestazioni. In questo caso sarebbe meglio tabelle separate.
Inoltre, se i dati sulla privacy sono stati aggiornati frequentemente, ma non i dati utente, tabelle separate impedirebbero i blocchi di riga nella tabella utente e gli aggiornamenti sono più rapidi su tabelle più piccole, il che potrebbe migliorare le prestazioni.
Se hai spesso bisogno dei dati UserPrivacy senza UserData, o viceversa, potresti volerli separare.
Tuttavia, questa potrebbe essere un'ottimizzazione prematura. Potresti semplicemente separarli se si adattano meglio ai tuoi modelli. Considera la semplicità di tenerlo nella stessa tabella rispetto ai problemi di prestazioni, dimensioni e leggibilità.
Se la relazione fosse uno a (da zero a molti), ovviamente vorresti una tabella separata, ma per uno a (da zero a uno), è facoltativo.
Finalmente...
Non aver paura di separarli, purché ci sia un motivo.