4
respostas

VARCHAR PARA GRAVAR NÚMEROS

  1. Não entendi o principio: " o número que identifica o cliente, pode ser que tenha pontos, traços e às vezes inicia com zero. Por essa razão, por mais que o CPF sejam números, é melhor armazenar como texto". Poderiam explicar de outra maneira por favor?

  2. A outra duvida foi parecida, mas para definir qual string para declarar o tipo NOME. Por exemplo, durante a minha resolucao de exercicios, em vez de:

CREATE TABLE tbcliente" ( CPF VARCHAR (11), NOME VARCHAR (100),

Eu fiz com

CREATE TABLE tbcliente" ( CPF VARCHAR (11), NOME LONGTEXT(100), . . . Fiz o exercicio da segunda forma e deu erro, por que? (U+1F605)

  1. Também em: . . . "IDADE SMALLINT," . . . Onde em vez de fazer como no exposto acima, fiz com "IDADE UNSIGNED SMALLINT" por se tratar de idade e nao existem idades negativas! Mas da forma como fiz retornou erro. Por que?

Podem tambem, por favor, nos darem mais exemplos de exercicios para treinarmos estes tipos todos?

4 respostas

Oi, Andressa! Tudo certo por aí?

Abaixo estarei explicando cada um desses pontos que você trouxe, vamos nessa?

1 - Usando o tipo VARCHAR para armazenar CPF

Quando estamos construindo um banco de dados, é recomendável salvar documentos como CPF e RG em formato de texto e não de número devido a estes fatores:

  • Em alguns casos, esses valores podem levar consigo caracteres especiais como pontos (.) e hífens (-), que não são numéricos. Ao tentar registrar um CPF com pontos e hífens (como este: 123.456.789-11) em um campo numérico, não teríamos sucesso;
  • Alguns documentos podem ser iniciados pelo número 0. Contudo, vários tipos numéricos (como o INT) ignoram zeros à esquerda, o que mudaria o verdadeiro valor do CPF.

Sendo assim, é uma boa prática usar o tipo de dado VARCHAR para criar campos de documentos, como o CPF!

2 - Usando o tipo LONGTEXT para armazenar nomes

Ao usar LONGTEXT(100) recebemos um erro, pois esse tipo de dado contém um tamanho determinado e não permite a adição de parâmetros. Para usá-lo durante a construção de uma tabela, precisamos retirar o número 100 e os parênteses, chegando neste resultado:

CREATE TABLE tbcliente ( 
    CPF VARCHAR (11), 
    NOME LONGTEXT
);

3 - Usando SMALLINT e removendo valores negativos

Ao usarmos UNSIGNED SMALLINT, recebemos um erro, uma vez que a escrita correta para esse comando é SMALLINT UNSIGNED, indicando inicialmente o tipo de dado e depois o atributo relacionado a ele.

Fazendo essa mudança, chegamos na seguinte criação de tabela:

CREATE TABLE tbcliente ( 
    CPF VARCHAR (11), 
    NOME LONGTEXT,
    IDADE SMALLINT UNSIGNED
);

Andressa, espero ter ajudado com as explicações. Se surgir alguma dúvida, estarei aqui para conversarmos juntas sobre isso!

Aliás, durante o nosso processo de aprendizagem, realizar diferentes exercícios é uma prática muito importante para a consolidação de conhecimentos. Abaixo, trago algumas atividades que você pode desenvolver:

1º Exercício: ESCOLA

  • Criar um novo banco de dados chamado escola;
  • Criar a tabela aluno com os seguintes campos:
    1. id, com o tipo INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;
    2. nome, com VARCHAR(100);
    3. data_nascimento, com DATE;
    4. turma, com VARCHAR(100);
    5. periodo, com VARCHAR(50);
    6. status, com ENUM('Ativo', 'Inativo').
  • Criar a tabela notas com os seguintes campos:
    1. id, com o tipo INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;
    2. materia, com VARCHAR(50);
    3. nota, com DECIMAL(5,2).

2º Exercício: LIVRARIA

  • Criar um novo banco de dados chamado livraria;
  • Criar a tabela livro, que terá os seguintes campos:
    1. id, com INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;
    2. titulo, com VARCHAR(100);
    3. autor, com VARCHAR(100);
    4. numero_paginas, com SMALLINT;
    5. categoria, com VARCHAR(50);
    6. preco, com DECIMAL(6,2).
  • Criar a tabela vendedores com os seguintes campos:
    1. id, com o tipo INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;
    2. nome, com VARCHAR(100);
    3. salario, com DECIMAL(6, 2).

Andressa, trouxe algumas atividades bacanas para você praticar. Sinta-se livre para adicionar novas coisas ou mudar algo que você considere interessante. Fico à disposição para ajudá-la em caso de dúvidas.

Um forte abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Professora nos foi falado durante a aula ate aqui sobre primary key mas ainda nao cheguei na parte da implementacao disto. nao soube fazer! Do que entendi do que me pediu, fiz como nas imagens abaixo. Primeiro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segundo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

*Poderia explicar e exemplificar com aplicacao, por favor: *

  1. id, com o tipo INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;
  2. id, com INT e com os parâmetros AUTO_INCREMENT e PRIMARY KEY;

Sei que ja estou exagerando, mas poderia explicar me a pergunta anterior baseada neste exemplo abaixo:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Tambem nao entendi a aplicacao de ENUM. Se puder explicar, agradeço.

Olhe, tens me ajudado bastante. Obrigada S2

Oi, Andressa!

As chaves primárias são geralmente criadas durante a própria criação de uma tabela. A sintaxe (escrita) utilizada para esse procedimento é justamente essa que você trouxe como exemplo. Inicialmente, adicionamos o nome do campo, o seu tipo de dado e o parâmetro PRIMARY KEY. Esta última parte é fundamental, pois é justamente ela que define que determinado campo será uma chave primária.

Nos exemplos que eu trouxe, a chave primária chama-se id. Além da cláusula PRIMARY KEY, ela também recebe a AUTO_INCREMENT — que significa, em português auto incremento. Por meio do AUTO_INCREMENT, indicamos que, conforme novos dados forem sendo inseridos na tabela, os valores da chave primária serão incrementados de forma sequencial (1, 2, 3, 4...).

Sabendo disso, já podemos partir para a criação!

Tendo como principal exemplo a tabela aluno do nosso banco de dados ESCOLA, a criação dela com a chave primária ficaria assim:

CREATE TABLE aluno (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(100),
    data_nascimento DATE,
    turma VARCHAR(100),
    periodo VARCHAR(50),
    status ENUM('Ativo', 'Inativo')
);

Além de todos os campos que você já colocou, foi adicionado na primeira linha o id, que é do tipo INT e possui os parâmetros AUTO_INCREMENT e PRIMARY_KEY, sobre os quais já conversamos!

As chaves primárias das outras tabelas terão o mesmo padrão de criação. No entanto, vale ressaltar que o tipo de dado pode variar e o AUTO_INCREMENT nem sempre será necessário (cabe a nós analisarmos se as chaves primárias serão incrementadas sequencialmente ou terão outro valor específico — como, por exemplo, um conjunto de caracteres).

Andressa, como você já criou as tabelas, ao invés de criá-las novamente você pode usar uma cláusula super interessante: ALTER TABLE! Por meio dela, podemos fazer diversas coisas, como inserir novos campos em uma tabela.

Continuando com o exemplo da tabela aluno, o comando para adição do campo id seria este:

ALTER TABLE aluno ADD id INT AUTO_INCREMENT PRIMARY KEY;

Após o ALTER TABLE, identificamos a tabela em que será feita a alteração, usamos a cláusula ADD (que indica a adição do campo) e, por fim, usamos a mesma sintaxe que utilizamos anteriormente para criação da chave primária!

A partir disso, a nossa tabela já estará com a chave primária!

Você pode praticar usando o mesmo comando nas demais tabelas, sempre se atentando ao banco de dados que você está usando no momento, à tabela que será modificada e à chave primária e seus respectivos atributos.

Agora, já podemos conversar sobre o ENUM! O ENUM é um tipo de dado que trabalha com listas de strings separadas por vírgulas. Em uma tabela com um campo do tipo ENUM, cada registro precisará ter um dos itens que compõe essa lista.

Na tabela aluno, utilizamos o tipo ENUM para o campo status, pois somente existem duas possibilidades de valor: Ativo e Inativo — logo, somente elas poderão ser utilizadas durante a inserção de dados.

Andressa, espero ter ajudado!! Fico muito feliz em saber que tenho te auxiliado bastante, lembre-se que você sempre pode contar com a Alura.

Abraços!