imoreirasalles / guia

Collection discovery prototype
GNU Affero General Public License v3.0
2 stars 0 forks source link

Relação entre eventos #3

Closed intrepidocabral closed 6 years ago

intrepidocabral commented 6 years ago

Qual é de fato a relação entre estes pares? Todas as alternativas são verdadeiras? @buccalon

Exposição <-> Evento Publicação <-> Evento Exposição <-> Publicações


buccalon commented 6 years ago

Para as classes principais, tudo está relacionado a tudo de 0 até N vezes. Vocês podem dizer a melhor maneira de construir isso no nosso stack. Me digam se faz sentido esse palpite:

Se toda classe tem um UUID, podemos criar uma única tabela de relacionamentos, que funciona como uma classe associativa. Nessa tabela podemos ter atributos dizendo o papel de cada relacionamento, e a partir desses tipos criar visualizações específicas. Pode exemplo:

id UUID 1 UUID 2 tipo_relacionamento other_data
0123 01d02.. 09d33k... exhibition_publication informação não estruturada
0124 01d02.. 12f32b... collection_publication ...

Na página de detalhe da Publicação 01d02.. conseguiríamos criar um box para ver os relacionamentos com aquela instância, que pode apresentar uma listagem simples com Exposição 09d33k.., Coleção 12f32b.., Evento ABC.., etc.

O que vocês acham?

intrepidocabral commented 6 years ago
  1. Sobre a validade das opções

Acho que a primeira coisa é analisar a relevância lógica dessas associações para a instituição. Se tudo for verdadeiro, ótimo. Se alguma coisa soar, ainda que de longe, non-sense ou pouco provável, devemos ser criteriosos em adotar ou não essa modelagem. Relendo aqui as opções, acho que todas podem ser válidas, ainda que algumas tenham ocorrências mais raras.

Eu acho essas afirmações bastante realistas:

  1. Sobre o modo de construir isso
    • Toda relação de muitos para muitos DEVE ser feita com uma tabela auxiliar;
    • As relações são feitas com FK (Foreign Keys), usando as PKs (Primary Keys) das tabelas principais. Mas é recomendado que a PK seja o ID autoincremental gerado pelo sistema e não um eventual UUID, em especial se houver a possibilidade do UUID vir de outro lugar.

Um exemplo fácil usando as classes Exposição e Eventos:

Exposição

ID (PK) UUID name
ex01 ex01-abcdefghijklmnopqrsquvxywz Rio Primeiras Imagens
ex02 ex02-abcdefghijklmnopqrsquvxywz ROBERT FRANK: OS AMERICANOS

Eventos

ID (PK) UUID name
ev01 ev01-abcdefghijklmnopqrsquvxywz Inauguração da exibição Rio Primeiras Imagens
ev02 ev02-abcdefghijklmnopqrsquvxywz Seminário de abertura da exposição Robert Frank
ev03 ev03-abcdefghijklmnopqrsquvxywz Debate de encerramento da exposição Robert Frank

ExposiçãoEventos

ID (pk) IDExposição (FK) IDEventos (FK)
ee01 ex01 ev01
ee02 ex02 ev02
ee03 ex02 ev03
buccalon commented 6 years ago

Realmente, o exemplo mais improvável é um evento gerar uma publicação (considerando o critério que folder não é publicação, mas documento anexo). Mas um evento pode estar relacionado a mais de uma publicação.

Exemplos

Evento: Palestra de Maria Inez Turazzi tem como tema a Pessoa: Marc Ferrez, integra a programação da Exposição: Rio Primeiras Poses, tem como referência bibliográfica a Publicação: Rio by Marc Ferreze a Publicação: O Brasil De Marc Ferrez, e discute itens da Coleção: Gilberto Ferrez.

Evento: Retrospectiva Sergio Oksman (Cinema) tem como tema a Pessoa: Sergio Oksman, e tem relação a Publicação: O Futebol (DVD) e a Publicação: A teoria do impostor (Blog do Cinema).

Tem alguma relação que você considera pouco provável? Reunir exemplos como esses é algo que ajuda? Posso organizar outros para dar um panorama dos nossos dados

intrepidocabral commented 6 years ago

Eu estava em dúvida sobre a validade de todas essas opções, mas o exercício de escrever a dúvida e de pensar exemplos sobre isso me trouxe mais clareza da modelagem. Eu acho que essa questão esta fechada para mim, todos os modelos são logicamente válidos e devem ser implementados. Obrigado pela tabelinha @buccalon , falei aqui com o @vitor-kato e concordamos que essa é a melhor escolha.