Qual é o melhor design para uma tabela de banco de dados que pode ser de propriedade de dois recursos diferentes e, portanto, precisa de duas chaves estrangeiras diferentes?

Meu aplicativo tem configurações de notificação para usuários que podem pertencer a grupos. Um administrador de grupo pode definir configurações para todo o grupo, de modo que, quando qualquer usuário executar uma ação, o administrador seja notificado. O administrador também pode definir configurações para um usuário individual, o que substituirá a configuração do grupo.

Agora eu tenho um banco de dados com colunas:group_id, action1, action2, action3, .... As ações são booleanas que determinam se o administrador é notificado quando essa ação é executada por um usuário em seu grupo.

Eu poderia criar uma tabela separada pertencente ao modelo User em vez do modelo Group, mas parece ineficiente armazenar os mesmos dados em uma tabela totalmente separadagroup_id parauser_id.

Outra opção é adicionaruser_id para a tabela que eu já tenho, e permitir valores nulos paragroup_id. Ao determinar as configurações de notificação para um usuário, o aplicativo primeiro escolheria a configuração com base no usuário e retornaria à configuração ondegroup_id não é nulo. Isso parece ineficiente porque haverá muitos valores nulos no banco de dados, mas definitivamente requer menos trabalho da minha parte.

Existe um design para essa situação que seja mais eficiente do que os dois que descrevi?

questionAnswers(2)

yourAnswerToTheQuestion