sql >> Databáze >  >> RDS >> PostgreSQL

Jak uložit pole nebo více hodnot do jednoho sloupce

Máte zde několik otázek, takže se jim budu věnovat samostatně:

Potřebuji uložit několik vybraných položek do jednoho pole v databázi

Moje obecné pravidlo zní:ne. To je něco, co všechno kromě vyžaduje druhá tabulka (nebo třetí) s cizím klíčem. Jistě, nyní se to může zdát snazší, ale co když se objeví případ použití, kdy je potřeba tyto položky skutečně hledat jednotlivě? Znamená to také, že máte více možností pro líné vytváření instancí a máte konzistentnější zkušenosti ve více rámcích/jazycích. Dále je méně pravděpodobné, že budete mít problémy s časovým limitem připojení (30 000 znaků je hodně).

Zmínil jste, že uvažujete o použití ENUM. Jsou tyto hodnoty pevné? Znáte je dopředu? Pokud ano, toto by byla moje struktura:

Základní tabulka (to, co máte nyní):

| id primary_key sequence
| -- other columns here.

Tabulka položek:

| id primary_key sequence
| descript VARCHAR(30) UNIQUE

Tabulka mapy:

| base_id  bigint
| items_id bigint

Tabulka map by měla cizí klíče, takže base_id se mapuje na základní tabulku a items_id se mapuje na tabulku položek.

A pokud byste chtěli snadný způsob, jak to získat z DB, vytvořte pohled, který provede spojení. Můžete dokonce vytvořit pravidla pro vkládání a aktualizaci, takže se budete prakticky zabývat pouze jednou tabulkou.

Jaký formát mám použít pro ukládání dat?

Pokud něco takového musíte udělat, proč nepoužít pouze řetězec ohraničený znakem? Bude vyžadovat menší výpočetní výkon než CSV, XML nebo JSON a bude kratší.

Jaký typ sloupce bych měl použít pro ukládání dat?

Osobně bych použil TEXT . Nezdá se, že byste tím, že z toho uděláte BLOB, moc získali a TEXT , podle mých zkušeností je snazší číst, pokud používáte nějakou formu IDE.



  1. PostgreSQL:Proč se psql nemůže připojit k serveru?

  2. Vypočítejte rozdíl mezi 2 daty/časy v Oracle SQL

  3. Předat více hodnot v jednom parametru

  4. Dotaz obsahující vnější spojení se v Oracle 12c chová odlišně