MySQL relações

Estou um pouco perdido em relações em mysql eu tenho como relacionar dados atráves de id mas não acho que seja necessario por que a pesquisa pode ser feita pelo nome digo,um paciente necessita de um médico a relação é feita na consulta entre os dois atráves do nome ele pode ser pesquisado pelo nome ou até pelo id da consulta por exemplo mas no caso em que estou não tem nome tem id e outras coisas as quais não são boas de se relacionar devo criar um nome mesmo não sendo pedido e relacionar ou criar um id e relacionar eles ? minha principal questão é qual a melhor forma de relacionar as tabelas é por id mesmo ? tambem queria saber se devo colocar um id em todas as tabelas

Primeiramente, vc precisa comprar uma caixinha de vírgulas e começar a usar.

Pelo visto você não tem nenhum tipo de formação técnica e está tateando o assunto. Os ids são chaves primárias artificiais. Eles são usados para facilitar indexação, diminuir a quantidade de dados armazenados nas chaves estrangeiras, tornar as junções mais rápidas etc.

Dado que uma chave primária é o menor conjunto de colunas que garantem a unicidade de tupla, caso você siga cegamente o modelo relacional desde a concepção até a implementação, vc teria que sim, para uma pessoa, por exemplo, usar talvez o CPF como chave primária, pois cada pessoa tem seu CPF único.

Qual o problema disso? São vários. Primeiro, a cada vez que vc precisar relacionar um registro da tabela pessoa com um registro de uma outra tabela, por exemplo venda, a cada venda feita vc teria que ter uma cópia do CPF da pessoa no registro que representa aquela venda. Veja, se vc armazenar o CPF usando 11 caracteres, cada venda teria uma cópia de 11 caracteres do CPF da pessoa que comprou. A cada vez que você precisar fazer uma consulta fazendo a junção dessas duas tabelas, e assumindo que o SGBD é um programa ingênuo, o que absolutamente não é, a operação de junção teria que comparar o CPF da tupla de origem com o CPF da tupla de destino para filtrar apenas os registros que têm relação no produto cartesiano gerado.

Perceba, só nisso existem dois problemas. Primeiro, uma cópia de vários caracteres. Segundo, uma comparação de vários caracteres. A abordagem básica que se usa é criar então uma chave primária artificial que normalmente é nomeada de id. Esse id é um número inteiro que, caso seja de 32 bits (4 Bytes) sem sinal, tem um poder de representatividade na ordem de 4 bilhões de números distintos. Se um caracetere ocupa digamos 16 bits (2 bytes), só para armazenar o CPF vc teria um gasto de 176 bits (22 Bytes). A comparação teria que levar em conta ou um inteiro de 32 bits ou um conjunto de 11 unidades de 16 bits. De novo, é quase que certeza que o SGBD fará algo para melhorar isso, gerando hashs para chaves no formato VARCHAR, otimizando índices etc, mas é muito melhor vc pensar na chave como um inteiro e então criar índices únicos para dados que não podem ser duplicados como números de documento, nomes de usuário etc.

Via de regra a maioria das tabelas terão um identificador ou então uma chave composta por identificadores e então colunas com índices únicos para garantir a não duplicidade. Você pode ter um banco sem relacionamento, suas consultas vão funcionar de forma mais lenta, mas vão funcionar. O problema é que se você precisa que restrições referenciais sejam mantidas, você terá que fazer isso do lado do software, o que não é uma boa ideia. Restrição referencial é a habilidade que o SGBD tem de manter a integridade dos dados de duas ou mais tabelas que se relacionam. Por exemplo, o que deve acontecer se você tentar apagar um registro de uma tabela que armazena os estados do país e esse estado estiver sendo usado/referenciado em uma ou mais cidades?

Sinceramente, dando uma olhada nos seus tópicos, parece que você realmente está tateando os assuntos e tentando aprender tudo sozinho, pegando uma coisa aqui e outra acolá. Isso vai funcionar de forma precária por algum tempo. Vai ter uma hora que você vai estar copiando código e programando num modelo de tentativa e erro. Acho que vale muito mais você fazer um curso presencial ou online que te guie pelo menos. As chances de você se frustrar, ainda mais quando sair do arroz com feijão, são enormes e aí você vai desanimar…

4 curtidas

@Wegek Algo me diz que você tem pulado muitas etapas fundamentais do assunto computação.

Não me leve a mal. Eu sugiro fazer uma faculdade, vai te economizar muito tempo e vai deixar de cometer muitos erros.

2 curtidas