Duvidas sobre diagrama e modelagem BD

Boa noite, tenho pouca experiencia com diagrama ER e modelagem banco de dados (iniciante) e estou com uma duvida a respeito do diagrama que fiz sobre essa questão.

  • O diagrama ER que fiz ta certo? Eu coloco o atributo “nome” para antena (ou não precisa)?
  • A modelagem que fiz ta certo? Eu tenho que criar uma tabela “localizado”?
  • Quando eu tenho e quando não precisa criar tabela para relacionamento das entidades?

Capturar

Meu Diagrama E-R:

A Modelagem Fisica desse diagrama:

create table antena(
      id int not null auto_increment,
      latitude tinyint not null,
     longitude smallint not null,
     primary key (id)
);
create table local(
        id int not null auto_increment,
       estado varchar(30) not null,
);

Se não pede, não precisa.

Não.

Não.

Depende de como você vai criar o banco.

Basicamente, você pode ter 4 tipos de relacionamento entre tabelas:

  1. Auto relacionamento: quando um elemento da tabela X se relaciona com algum elemento da mesma tabela X. Exemplo: Um funcionário possui um gestor (que também é um funcionário)
  2. Relacionamento 1:1: quando um elemento da tabela X se relaciona com no máximo um e apenas um elemento da tabela Y. Exemplo: Cada carro possui uma placa e cada placa está associada a apenas um carro.
  3. Relacionamento 1:N: é o mais comum, quando um elemento da tabela X se relaciona com nenhum ou vários elementos da tabela Y. Exemplo: Uma mãe tem vários filhos, mas cada filho só tem uma mãe.
  4. Relacionamento N:M: quando nenhum ou mais elementos da tabela X se relacionam com nenhum ou vários elementos da tabela Y. Exemplo: Cada nota fiscal possui vários produtos. Cada produto pode estar em várias notas fiscais. Cria-se, então, uma tabela chamada ITEM_NF onde se relacionam NF (número NF) e PRODUTO (código produto, quantidade, valor unitário, etc)

Em tese, apenas o último tipo demanda a criação de tabela associativa (de relacionamento). Porém, por questões de modelagem e facilidade, há quem defenda que o terceiro e o quarto tipo utilizem desse recurso.

Ah, sim, mesmo o auto relacionamento pode cair nos demais, exemplo: um ou mais elementos da tabela X se relacionam com vários elementos da mesma tabela. Então, aplicam-se as regras dos demais tipos, da mesma maneira.

Agora, por que o modelo está errado? E por que a modelagem está errada?
Entende-se que tudo o que relativo à uma informação (tabela) seja colocado nela mesma, como coluna.
Assim sendo, se latitude e longitude, que são informações sobre posição (entenda-se localização), ficarão na tabela antena, logo, você não tem por que separar o estado.
Como o script segue o diagrama, o mesmo está errado.
Ah, o tipo de dado decimal não é um tinyint…
Eu faria, simplesmente:

CREATE TABLE ANTENA(
    ID INT NOT NULL AUTO_INCREMENT,
    LATITUDE DECIMAL NOT NULL,
    LONGITUDE DECIMAL NOT NULL,
    ESTADO VARCHAR(2) NOT NULL,
  PRIMARY KEY(ID)
);

Algo assim.

1 curtida

Obrigado @darlan_machado. Tá ajudando muito.

  • Mas nesse caso o “estado” não seria em outra tabela para não ficar repetindo , já que em um estado pode ter muitas antenas?

  • Considerando a modelagem física que você fez o diagrama ER seria,1 entidade (antena) associada a 4 atributos (id,latitude, longitude e estado) sem relacionamentos ?

Eu coloquei o tamanho do estado com 30 para escrever o nome todo tipo “Rio de Janeiro” em vez de só “RJ”

De novo, depende de como você quer implementar o banco.
Veja, por exemplo, se você cria uma tabela de clientes. Certamente, terá muitos “João da Silva”. Vai criar uma tabela só para o nome João? Ou maria?
Mas, sim, você pode fazer isso, criar uma tabela apenas para o estado, porém, só com a PK e o nome do estado (também pode ser com o nome completo e a sigla)

1 curtida

Então o meu diagrama e a modelagem do BD não está errado de acordo com o enunciado?

No meu ponto de vista, sim, está errado.
Se você for criar uma tabela associativa para estado, chame-a de estado e não de local. Se for chamar de local, então coloque latitude e longitude junto (e daí voltamos ao ponto de repetir os estados).

CREATE TABLE ESTADO(
    ID INT NOT NULL AUTO_INCREMENT,
    NOME VARCHAR(30) NOT NULL,
    SIGLA VARCHAR(2) NOT NULL,
    PRIMARY KEY(ID)
);

CREATE TABLE ANTENA(
    ID INT NOT NULL AUTO_INCREMENT,
    LATITUDE DECIMAL NOT NULL,
    LONGITUDE DECIMAL NOT NULL,
    ID_ESTADO INT,
    PRIMARY KEY(ID)
);

Só não esqueça de criar a constraint referente a FK de estado para antena.
Este é um modo de resolver, porém, eu ficaria com o primeiro modelo. São opções.

1 curtida

obg