TransWikia.com

É recomendável utilizar o tipo JSON nas colunas na tabela abaixo

Stack Overflow em Português Asked by Ismael Silva Limq on December 18, 2020

Estou aprendendo banco de dados relacionais, então resolvi criar um sistema de administração de escolas, fiz uma tabela unicamente para guardar todo o histórico escolar do aluno (todos os boletins com outras informações). Na tabela, cada coluna de um boletim é do tipo JSON, esses arquivos terão um formato pré-definido, achei que seria uma boa usar JSON mas agora fiquei com um pé atrás.
Em fim, é recomendável NO MEU CASO usar o tipo JSON nas colunas?

[Abaixo encontra-se uma parte da tabela como imagino em MySQL]

'''

CREATE TABLE historico_esc_aluno (

        boletim1SerieF1 JSON NOT NULL,
        boletim2SerieF1 JSON NOT NULL,
        boletim3SerieF1 JSON NOT NULL,
        boletim4SerieF1 JSON NOT NULL,
        boletim5SerieF2 JSON NOT NULL,
        boletim6SerieF2 JSON NOT NULL,
        boletim7SerieF2 JSON NOT NULL,
        boletim8SerieF2 JSON NOT NULL,
        boletim1SerieM1 JSON NOT NULL,
        boletim2SerieM2 JSON NOT NULL,
        boletim3SerieM3 JSON NOT NULL,

) DEFAULT charset = utf8;

'''

Pensei em usar MongoDB (para fazer o histórico somente), porém vi um vídeo que falava que não é a melhor prática quando se quer guardar informações a longo prazo (dados que não podem ser perdidos).

One Answer

Estou aprendendo banco de dados relacionais, então resolvi criar um sistema de administração de escolas

Se você está aprendendo banco de dados relacional, deveria deixar de lado o tipo de dado JSON e procurar entender modelagem conceitual e normalização de dados com os tipos mais comuns, para poder então tomar a decisão de utilizar JSON ou não neste cenário específico.

Não há problemas no tipo JSON, há casos em que ele pode ser útil em um banco relacional, mas quando se utiliza este tipo de banco você normalmente está procurando pelo ACID, uma sigla para indicar Atomicidade, Consistência, Isolamento e Durabilidade.

Por JSON ser um documento, é difícil garantir sua consistência, constraints semelhantes ao comportamento de chaves estrangeiras são mais complexas de serem criadas. A consulta de valores específicos nesta coluna pode tornar-se mais difícil, e você terá de usar funções específicas do SGBD para manipular a informação. Além isso, você precisará entender a diferença de desempenho das operações que você mais vai utilizar para saber se é viável para seu projeto.

Enfim, é recomendável NO MEU CASO usar o tipo JSON nas colunas?

Não há nenhum benefício em utilizar um banco de dados relacional para ter uma tabela apenas com colunas do tipo JSON, principalmente quando seus dados tem potencial de consulta, manipulação e construção de relatórios. Você deve entender sua estrutura e normalizar ela para atender suas necessidades.

Pensei em usar MongoDB (para fazer o histórico somente), porém vi um vídeo que falava que não é a melhor prática quando se quer guardar informações a longo prazo (dados que não podem ser perdidos).

Você precisa entender os motivos quando alguém fala que não é a melhor prática (ou que é a melhor prática).

Enquanto os bancos de dados relacionais garantem o ACID, um banco de dados não relacional pode abrir mão de um desses pilares para garantir algum outro benefício, sendo este normalmente maior velocidade, escalabilidade, suporte a agregações, etc. O MongoDB por exemplo, até algum tempo atrás não possuía recurso para transações, algo que em banco de dados relacionais é utilizado para garantir atomicidade (todas ou nenhuma das operações serão realizadas).

Seus dados não serão perdidos utilizando MongoDB, mas se um banco de dados não relacional é o ideal para o seu cenário é uma decisão que você precisa tomar considerando as características das duas tecnologias.

Documentação do tipo de dado JSON no MYSQL, falando sobre normalização e suas manipulações.

Correct answer by Vinícius on December 18, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP