Em 07/10/2008, às 05:42, Yoshio escreveu:

2008/10/7 Magno Junior <[EMAIL PROTECTED]>:
> Não entendi.
> Eu poderia ter uma tabela chamada categoria, com apenas um campo
> chamado categoria, sendo esse unico campo a propria chave primaria da
> tabela, é isso?

Isso

> Não ficaria mais complicado para fazer uma consulta?
Não sei. Esse é um dos meus dilemas. Voltando a tabela de produtos, o select dela não precisaria de um join na tabela de categorias:

SELECT * from produtos;

|       código       |       nome       |     categoria       |
---------------------------------------------------------------
|         1          |       arroz      |       grãos         |
|         2          |       feijão     |       grãos         |
|         3          |        maça      |       frutas        |

O select exibe as categorias sem precisar de uma view ou join.

É verdade, enquanto o atributo categoria não tiver nenhuma dependência, é mais prático usá-lo como um campo ao invés de usar uma FK.

No entanto, vejo dois problemas ao modelar um campo desse tipo como varchar sem nenhuma restrição: 1. Pode gerar inconsistências dentro das categorias (nomes diferentes para a mesma categoria). 2. Listar todas as categorias existentes sem ter uma tabela separada pode ser muito caro se a tabela de produtos for grande.

Logo podemos resolver o dilema de duas formas:

1. Se as categorias não precisam ser modificadas pelo usuário (mudam raramente ao longo do tempo), podemos criar um campo ENUM ou um domínio com uma check constraint para os nomes de categorias válidos. 2. Se as categorias podem sofrer manutenção pelo usuário recomendo o uso de chave estrangeira, pois quando você for apresentar uma lista de opções para o usuário, poderá fazer um select na tabela de categorias ao invés de um SELECT DISTINCT na tabela produtos.

--
Diogo Biazus
[EMAIL PROTECTED]
http://www.softa.com.br
http://www.postgresql.org.br

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a