Estou desenvolvendo 3-4 programas interdependentes. Chame-os de foo bar baz e auth. Eu quero que eles sejam independentes um do outro. Imagine se eu fosse licenciar cada programa para outras empresas. Algumas empresas podem querer fazer barulho, outras podem querer baz, etc. Também parece uma boa prática manter a autenticação independente também.
Contexto: auth está cuidando da autenticação para todos os sistemas. A tabela de usuários principais em auth possui user_id, email, senha, primeiro, último
foo também possui uma tabela de usuários que possui campos específicos para o aplicativo: user_id, role_id, etc.
Cada sistema possui seu próprio banco de dados. No passado, eu criei uma chave estrangeira de cada aplicativo para o auth db. Eu removi as permissões de atualização dos outros dbs, mas concedeu acesso de seleção a determinados campos relevantes. Isso parece uma solução ruim porque cria uma dependência estreita, mas me permitiu normalizar o banco de dados para que eu não tivesse que armazenar o nome e o email dos usuários nos bancos de dados foo, bar ou baz.
Seria melhor armazenar as informações em todos os bancos de dados? Ou seria melhor armazenar o ID de autenticação em foo bar e baz e usar uma API para obter as informações do usuário usando o authId?
Da mesma forma, eu posso ter clientes em todos os três sistemas. Claro que parece ruim criar uma dependência em um db de autenticação, mas e os dbs do cliente em todos os três?
Ou é a melhor solução para ter um banco de dados central. Uma tabela de usuários.
Outras sugestões?
foo bar
exemplos são muitas vezes abstratos demais para serem boas ilustrações.