Por exemplo, eu tenho um campo no MongoDB assim:
"SignedDocs" : [
{
"_id" : "blablabla"
"title": " bla bla bla"
},
{
"_id" : "blablabla2"
"title": " bla bla bla2"
},
{
"_id" : "blablabla3"
"title": " bla bla bla3"
}
]
Para você entender, dentro deste campo existem 3 valores. Qual seria a melhor maneira de conseguir isso com o SQL Server? Qual é a melhor prática para salvar 3 valores dentro de uma coluna?
Eu não quero fazer algo assim:
NAME | DOCSSIGNED
abduh | 1
abduh | 2
abduh | 3
Ter muitas linhas com os mesmos valores apenas alterando este DOCSSIGNED
campo como um FK apontando para a tabela DOCS.
EDIT: Ohh talvez uma 3ª tabela entre essas 2 ligando-as?
Em versões mais recentes do SQL Server, você pode considerar trazer os dados JSON como estão, armazená-los em uma
nvarchar(max)
coluna e usar as funções internas relacionadas a JSON para analisar e consultar dados JSON. Isso está disponível no SQL Server 2016+ (nível de compatibilidade 130). Você pode ler mais sobre isso aqui: Dados JSON no SQL ServerSe você planeja "converter" os documentos do MongoDB em um padrão mais relacional, a tabela de mapeamento que você mencionou seria uma boa maneira de evitar que o "Nome" do assinante seja repetido em cada linha.
Parece que o que você está modelando no documento do MongoDB é uma coleção de documentos que foram assinados por uma determinada pessoa. Então a estrutura relacional seria algo assim:
Uma tabela para documentos:
Uma tabela para as pessoas que assinam estes documentos:
E então a tabela que reúne todos os documentos que uma pessoa assinou:
Você pode adicionar mais restrições à tabela se houver outras regras que precisem ser aplicadas (um documento só pode ser assinado por uma pessoa, por exemplo).
Observe que executar esse tipo de processo "ETL" para converter dados NoSQL em dados relacionais pode ter muita sobrecarga de manutenção. Uma das vantagens de um banco de dados de documentos como o MongoDB é que a estrutura dos documentos pode ser facilmente alterada. Isso tem um grande potencial para quebrar o ETL. Claro, cada ambiente é diferente, então pode não ser um problema para você. Só achei que valia a pena mencionar.