Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Salvar categoria usando como chave primária o nome

Tenho uma dúvida, seguindo essa lógica de cadastrar as categorias e relaciona-las com o produto, eu não gostaria de cadastrar duas categorias iguais. Uma coisa que pensei ser possível de fazer é:

  • Buscar no banco de dados se já existe uma categoria de mesmo nome cadastrada, caso sim, usa essa categoria, caso não, cria essa nova.

Mas pensando nisso, não seria mais fácil fazer o nome da categoria ser a chave primária, já que ela não pode se repetir? Sei que isso provavelmente não é boa prática, é mais por curiosidade mesmo, e também gostaria de saber maneiras de fazer com que não se repita categorias na tabela do banco de dados.

2 respostas
solução!

Olá, Jelson!

Sua curiosidade é muito válida! Embora seja possível utilizar o nome da categoria como chave primária, não é uma prática recomendada. A chave primária é um identificador único para cada registro em uma tabela, e geralmente é um valor numérico. Utilizar o nome da categoria como chave primária pode trazer algumas limitações, como por exemplo, a impossibilidade de alterar o nome da categoria sem alterar a chave primária.

Uma maneira de evitar a repetição de categorias na tabela do banco de dados é utilizar uma restrição de unicidade. Você pode criar uma restrição no banco de dados para garantir que o nome da categoria seja único, por exemplo:

ALTER TABLE categorias ADD CONSTRAINT nome_unico UNIQUE (nome);

Dessa forma, o banco de dados irá impedir a inserção de categorias com o mesmo nome. Caso você tente inserir uma categoria que já existe, o banco de dados irá retornar um erro.

Outra opção é fazer a verificação no código antes de inserir uma nova categoria. Você pode fazer uma consulta no banco de dados para verificar se já existe uma categoria com o mesmo nome antes de inserir uma nova categoria. Se já existir, você pode utilizar a categoria existente, caso contrário, você pode criar uma nova categoria.

Por exemplo, em Java utilizando JPA e Hibernate, você poderia fazer algo assim:

// Verifica se já existe uma categoria com o mesmo nome
Query query = entityManager.createQuery("SELECT c FROM Categoria c WHERE c.nome = :nome");
query.setParameter("nome", nomeCategoria);
List<Categoria> categorias = query.getResultList();

if (categorias.isEmpty()) {
    // Cria uma nova categoria
    Categoria categoria = new Categoria();
    categoria.setNome(nomeCategoria);
    entityManager.persist(categoria);
} else {
    // Utiliza a categoria existente
    Categoria categoriaExistente = categorias.get(0);
    // Faça o que for necessário com a categoria existente
}

Espero ter ajudado e bons estudos!

Valeu mestre, respondeu todas as minhas dúvidas haha!