Iniciante em MySql e Delphi

Boa noite pessoal,

Estou começando uns estudos em MySQL e em Delphi 10.3 e surgiram algumas dúvidas relacionadas a normalização de tabelas e inserção e alteração de registros classe Delphi.

Segue uma imagem do banco que eu estou tentando desenvolver para estudar por conta:

A ideia do modelo era, inicialmente, criar um cadastro de cidades, estados e países oriundos da API do IBGE com tabelas PAIS, ESTADOS e CIDADES, respectivamente relacionadas. Do lado do cliente, criar uma tabela de endereços separadas para que eu pudesse garantir em tempo futuro que o cliente pudesse ter, por exemplo, um endereço de entrega diferente do endereço residencial dele e por aí vai. Resumindo, o cliente poderia ter múltiplos endereços.

Comecei a brincadeira e cheguei nesse modelo aí e, minha primeira dúvida é: eu preciso ter chaves primárias nas tabelas celular, endereco, cidade e estado? Está correto o modelo que eu criei em comparação com o texto que eu escrevi? Essas são as dúvidas com relação ao banco de dados.

Já a dúvida em Delphi é a seguinte. Eu não consegui ainda fazer um insert ou um update na tabela cliente, pois, o insert e o update vão sensibilizar tanto a tabela cliente como a tabela endereço para par ao mesmo clienteId. Ainda tem o fato de campos dessa tabela serem preenchidos pela tabela cidade e estado. Porém, meu principal problema aqui vem sendo adicionar o id do cliente na tabela endereços, isso em tempo de execução.

Espero ter sido claro.

No mais, fico no aguardo de notícias.

Abraço,

Jayme.

Se o id for auto incremento, após dar insert no cliente faz um select na funcao LAST_INSERT_ID() pra obter o id do cliente inserido. Depois é só usar esse id no insert da tabela endereco.

SELECT LAST_INSERT_ID() as ultimoId