O banco ta assim, aqui da pra ter uma ideia melhor: https://prnt.sc/PP9iuleWl-XD

Ali na tabela endereço estou declarando a rua, mas poderia criar uma tabela para rua e deixar a de endereco para armazenar as fks.

Uma outra duvida, seria possivel não ter de cadastrar todas as cidades do Brasil em uma tabela? Eu queria fazer algo que conforme seja cadastrado pelo user, a cidade ou rua, o proximo cadastro ja buscasse desse antigo, sem duplicar.

Boaa entendi. Acho que vc fez mais ou menos como eu falei então. Tem sim. O que você pode fazer é o seguinte: quando o usuário procurar por um endereço, vc pode ir até o seu banco e buscar por ele. Caso o seu banco não tenha o endereço procurado, você pode consumir alguma API de endereços (acho que a Brasil API deve conter o que vc precisa ), pegar as informações que essa API te retornar e por fim vc salva no seu banco de dados. Conseguiu entender o que eu quis dizer?

Eu estou usando uma [api](https://viacep.com.br/exemplo/javascript/) que ao botar o CEP, ja busca todas as informações de cidade, estado, rua etc. Acho que vou tentar utilizar o comando select para pesquisar no banco se ja tem o cadastro, e se houver eu só atribuo a fk. Obrigado pleas dicas ai, tmj!