Estou integrando com serviços que usam OAuth, e os dados que preciso salvar no banco de dados são muito semelhantes. No entanto, existem pequenas diferenças com as duas primeiras implementações.
Ambos têm um token, expiração, refreshToken e refreshTokenExpiration. No entanto, um tem um "realmId" e o outro tem um "redirectUri" que precisa ser salvo com ele.
Do jeito que eu vejo, eu tenho 3 opções:
a) Adicione realmId e redirectUri à mesma tabela e um será preenchido e o outro nulo, dependendo de qual serviço está sendo usado. Claro, quem sabe se eu terei que continuar adicionando colunas adicionais à medida que mais serviços são adicionados com requisitos diferentes?
b) Normalize os dados de forma que haja uma tabela para os dados semelhantes, mas tabelas separadas que contenham os dados exclusivos para cada serviço e tenham chaves estrangeiras para a tabela com os dados de token semelhantes.
c) Nem se preocupe em tentar armazenar os dados semelhantes em uma única tabela. Mas sim crie uma tabela completamente separada para cada serviço.
Sendo mais pragmático do que ideólogo, estou inclinado para c). Uma razão adicional para isso é que um serviço concede tokens com base em contas, enquanto o outro serviço concede tokens com base em usuários que podem estar em várias contas.
Eu sei que este é certamente um problema comum, mas eu simplesmente não sei como descrever o problema de forma que eu possa encontrar informações úteis sobre ele em minhas pesquisas.
Sugiro duas mesas. Estou assumindo que se você der ao seu aplicativo um realmID quando ele espera um redirecionamento, ele quebrará seu aplicativo, então você definitivamente precisa deles em colunas separadas.
Se você tiver os dois aplicativos usando duas tabelas separadas, poderá evitar alguns problemas no caminho com o deadlock. Você também pode querer tratar os dados de maneira diferente para cada aplicativo. Por exemplo, você pode precisar manter os URLs de redirecionamento por 5 dias e os RealmIDs por 2 meses. Você poupará muitas dores de cabeça ao seu futuro eu se mantiver as coisas separadas desde o início.
Você sempre pode criar uma visão para si mesmo que une as duas tabelas, oferecendo as vantagens de ter os dados em uma tabela, sem nenhuma desvantagem.