Esquema do Banco de Dados
Este documento especifica o relacionamento entre entidades do banco de dados da aplicação, inicialmente modelou-se um esquema relacional para tais entidades, esse esquema antigo está incluído ao final do documento. Após atualizações na arquitetura, o serviço de back-end utilizado no desenvolvimento foi o Firebase, e o banco de dados o Firestore, por isso, o esquema da aplicação foi atualizado para uma modelagem JSON.
Relacionamento entre entidades
Os principais relacionamentos e restrições das entidades são:
- Itens possuem uma única coleção e um único doador
- Itens possuem um nome único
- Leis e editais podem ser públicos ou privados
- Exposições e Coleções podem ser públicas ou privadas
- Coleções contém múltiplos itens públicos ou privados
- Todos os itens em uma coleção privada também são privados
- Exposições contém múltiplos itens públicos ou privados de diferentes coleções
- Coleções e exposições públicas devem mostrar apenas os itens públicos aos usuários não logados
- Horário de funcionamento e Informações do footer não são relacionadas com outras informações do museu
Especificidades do Firestore
Pelo fato do Firestore ser um banco não relacional estruturado como uma única árvore JSON, a organização e representação das entidades é realizada de forma diferente de um banco SQL, as principais diferenças são:
- Devido à implementação das regras de segurança, nenhuma coleção pode conter caracteres especiais para que um request possa ser interpretado.
- Também por causa das regras de segurança, todas as requisições são recusadas por padrão, a menos que uma regra em um caminho mais específico aprove.
- Requisições do tipo ‘list’ retornam todos os dados de uma coleção, não existe forma de filtrar por um atributo em algum documento antes de retorná-lo ao usuário. Por isso, documentos que exigem acesso autorizado ficam em uma subcoleção de um documento ‘privado’, documentos públicos ficam em um documento ‘publico’, cada subcoleção tem regras de leitura e escrita distintas
- Documentos que precisam armazenar referências a documentos de uma coleção em um caminho diferente (e.g. itens de uma exposição) armazenam o caminho inteiro desse documento, em vez de apenas o id.
- Documentos que possuem subcoleções não retornam esses dados ao serem requisitados com GET.