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!