Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dúvida na aula "05 Atributo de especialização e generalização"

Estou com dúvida na aula 05 Atributo de especialização e generalização, do módulo Modelagem Lógica, do curso Modelagem de banco de dados relacional: modelagem lógica e física. No DER que o professor construiu no curso anterior, ele tinha um atributo multivalorado, mas com cardinalidade (1,2). Quando ele montou o modelo lógico, ele apenas colocou esses atributos como "telefone_1" e "telefone_2". Porém, no modelo lógico que estou fazendo do meu setor, eu tenho um atributo multivalorado, mas com cardinalidade (1,n). Como devo representar esse atributo no modelo lógico? Uma vez que são "n" possibilidades, não tenho como colocar infinitos campos na tabela.

Como devo proceder? Na imagem abaixo, no DER, o atributo multivalorado é "cod_local" da entidade fraca "Central". Insira aqui a descrição dessa imagem para ajudar na acessibilidade

No Modelo Lógico, não sei como representar esse campo na tabela CENTRAL, conforme imagem abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como devo representar esse atributo multivalorado na tabela?

4 respostas
solução!

Oi Talita!

Nesse caso, é interessante que você faça uma nova tabela que abrigue cod_local e uma chave estrangeira que o conecte com a entidade forte com a qual essa nova tabela está relacionada. Nesse caso, cod_local não precisa mais ser um campo da tabela Central. Caso seja coerente em seu projeto, a nova tabela pode ser, também, uma entidade forte que terá sua chave migrando como estrangeira para outras tabelas com as quais ela se relaciona.

Percebi que cod_local está presente também nas tabelas Lacre e Material, além de Central.

Se local for uma localização física como um endereço, por exemplo, essa tabela pode conter as informações como nome da rua, número, CEP, etc, e a chave identificadora. Caso seja uma localização lógica, as informações sobre esses locais podem também ser armazenadas na tabela em conjunto com uma chave identificadora. Isso evita redundância de dados no banco.

Espero ter esclarecido. Estou gostando muito de acompanhar seu projeto, continue se dedicando! Estaremos por aqui para te auxiliar.

Abraço.

Oi, Larissa. Obrigada por responder. No caso, o "cod_local" é uma localização fisica sim. Seria uma especie de "biblioteca", onde existem as salas, cada sala tem varios corredores, cada corredor tem varias estantes e as estantes tem varias prateleiras. Nessas prateleiras sao guardados tanto o Material quanto os Lacres (ambos físicos).

Material, Lacre e ate essa localização (cod_local) existem tambem de forma logica no sistema principal de onde trabalho. Mas o meu setor esta encarregado de fazer a guarda disso tudo. Entao aqui, essas coisas "logicas" existem fisicamente. E eu queria criar primeiramente esse banco de dados com os dados que a gente ja trabalha em tabelas do Excel, que servem justamente pra fazer um controle bem primitivo com o numero do lacre lógico, o numero do material, a localizacao de cada material nessa nossa "Central"/Estoque, cada material/lacre esta necessariamente atrelado a um caso e uma localização...

Então nesse caso voce sugeriria que eu criasse uma entidade forte? O problema é que esse "cod_local" varia... Por exemplo. O material n° XXXX esta guardado na localização (cod_local) 2A1H6 (uma especie de codigo que determina a sala, corredor, estante, prateleira).

So que outro material ou lacre pode estar guardado por exemplo na localização (cod_local) 1C2G4, por exemplo. Por isso esse "cod_local" varia, com "n" possibilidades...

Estou bem perdida de como proceder. Essa localização nao seria unica, ela admitiria "n" possibilidades. Como eu posso colocar isso no modelo? E futuramente no banco?

Pensei em deixar Central como uma espécie de estoque, apenas com o atributo "qtde_estoque" para fins de controle da quantidade de material armazenado no setor. Permanecerá como entidade fraca, mas sem chave estrangeira.

Já para resolver esse problema da localização, pensei em criar o atributo "localização", sendo multivalorado, tanto para Material, quanto para Lacre. E aí os multivalores se dividiriam em "sala, corredor, estante, prateleira, caixa", sendo que caixa poderá ter valor NULL, uma vez que nem sempre um material ou lacre estará armazenado em uma caixa. A localização não tem valor único, podendo materiais diferentes ou lacres diferentes estarem armazenado no mesmo local, como uma biblioteca que armazena livros e revistas numa mesma prateleira, num mesmo corredor, estante etc.

A questão é que aqui, essa localização se transforma num código. Por exemplo, o primeiro número da sequencia com a primeira letra correspondem à sala, logo "2A", já o próximo número corresponde ao corredor, ficando "2A1"... Depois, a próxima letra corresponderia à estante, ficando "2A1H"e por fim, o próximo número corresponde à prateleira. Ficando "2A1H3", por exemplo. Então a localização multivalorada em "sala, corredor, estante, prateleira" acaba criando um código. E é nisso que estou me batendo para colocar no modelo.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi Talita! Espero que você esteja bem :)

Suas dúvidas são mais avançadas e é natural que o processo de modelagem gere alguma confusão e muitos questionamentos: são muitos conceitos técnicos e também subjetivos que estão envolvidos nesse processo. Reforço que, conforme seus estudos avançarem, sua modelagem conceitual poderá sofrer alterações devido a novas compreensões. Inclusive, recomento fortemente que você faça uma formação sobre SQL antes de fazer a aplicação do banco de dados na sua empresa. Tenho certeza que será bastante benéfico!

Sinto que é importante comentar sobre alguns aspectos conceituais da modelagem de banco de dados antes de prosseguirmos com suas dúvidas mais específicas: quando o banco de dados físico for aplicado, as entidades se transformarão em tabelas em que cada atributo é uma coluna, e os dados serão preenchidos em linhas que chamamos de tuplas. Cada tupla de uma tabela armazena informações sobre uma ocorrência única - e cada uma dessa ocorrência pode se relacionar com outras ocorrências por um atributo específico, o identificador.

Com esse formato em mente, é provável que a compreensão da organização dos dados fique mais clara.

O atributo qtde_estoque, em Central, não é coerente se não houver uma chave estrangeira que o defina. A quantidade em estoque de determinado material precisa ser designada como sendo desse material, e isso se dá através da chave identificadora que estará na mesma tupla que essa quantidade. Ou qtde_estoque pode ser um atributo comum na entidade Material e também em Lacre (caso isso faça sentido no funcionamento do seu trabalho).

Em relação à localização, entendi melhor sua dúvida, agradeço por explicar. No curso de normalização, você verá que atributos multivalorados não são uma boa prática, pois geram inconsistências no banco - a solução é transformar em uma nova tabela com os valores e com um código identificador que defina cada um desses conjuntos de valores como uma ocorrência, que será referenciada na tabela.

Como a sua localização já é um código por si, é possível criar uma tabela com apenas uma coluna, que seja chave primária, e que contenha todos os códigos de localização e que se relacione com Material e Lacre (como chave estrangeira, a localização pode se repetir, caso mais de um material ou lacre estejam na mesma localização, pois nesse caso a chave composta [estrangeira + parcial] que será a identificadora da tupla), ou, por ora, manter a localização sendo um atributo comum em cada uma das tabelas em que ela se faz necessária - como é um código muito bem conhecido por você e sua equipe, a separação em sala, corredor, etc. talvez não seja essencial.

Assim você poderá prosseguir seus estudos e voltar a olhar para esse ponto quando estiver com mais bagagem e repertório conceitual.

Abraços!