PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como armazenar array ou vários valores em uma coluna


Você tem algumas perguntas aqui, então vou abordá-las separadamente:

Preciso armazenar vários itens selecionados em um campo em um banco de dados


Minha regra geral é:não. Isso é algo que quase requer uma segunda tabela (ou terceira) com uma chave estrangeira. Claro, pode parecer mais fácil agora, mas e se surgir um caso de uso em que você precise realmente consultar esses itens individualmente? Isso também significa que você tem mais opções para instanciação lenta e uma experiência mais consistente em vários frameworks/linguagens. Além disso, é menos provável que você tenha problemas de tempo limite de conexão (30.000 caracteres é muito).

Você mencionou que estava pensando em usar o ENUM. Esses valores são fixos? Você os conhece antes do tempo? Se sim, essa seria minha estrutura:

Tabela base (o que você tem agora):
| id primary_key sequence
| -- other columns here.

Tabela de itens:
| id primary_key sequence
| descript VARCHAR(30) UNIQUE

Tabela de mapas:
| base_id  bigint
| items_id bigint

A tabela de mapas teria chaves estrangeiras, então base_id mapeia para a tabela Base e items_id mapeia para a tabela de itens.

E se você quiser uma maneira fácil de recuperar isso de um banco de dados, crie uma visualização que faça as junções. Você pode até criar regras de inserção e atualização para que você esteja lidando praticamente com apenas uma tabela.

Qual ​​formato devo usar para armazenar os dados?


Se você tiver que fazer algo assim, por que não usar apenas uma string delineada por caracteres? Levará menos poder de processamento do que um CSV, XML ou JSON e será mais curto.

Que tipo de coluna devo usar para armazenar os dados?


Pessoalmente, eu usaria TEXT . Não parece que você ganharia muito fazendo disso um BLOB e TEXT , na minha experiência, é mais fácil de ler se você estiver usando alguma forma de IDE.