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:
- 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)
- 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.
- 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.
- 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.