I de flesta fall skulle jag använda ett normaliserat schema
med en tabell option_tag
implementera många-till-många-relationen mellan tabellerna option
och tag
. Referera till implementering här:
Det kanske inte är det snabbaste alternativet i alla avseenden, men det erbjuder hela utbudet av DB-funktionalitet, inklusive referensintegritet, begränsningar, hela utbudet av datatyper, alla indexalternativ och billiga uppdateringar.
För fullständighetens skull, lägg till i din lista med alternativ:
hstore
(bra alternativ)xml
mer omfattande och mer komplex än någonderahstore
ellerjsonb
, så jag skulle bara använda det när jag arbetar med XML.- "sträng med kommaseparerade värden" (mycket enkelt, oftast dåligt alternativ)
- EAV (Entity-Attribute-Value) eller "namn-värde-par" (oftast dåligt alternativ)
Detaljer under denna relaterade fråga på dba.SE:
Om listan bara är för visning och sällan uppdateras, skulle jag överväga en vanlig array, som vanligtvis är mindre och presterar bättre för detta än resten.
Läs blogginlägget av Josh Berkus @a_horse länkade till i sin kommentar. Men var medveten om att den fokuserar på utvalda läsfall. Josh medger:
Och det är där det normaliserade tillvägagångssättet vinner stort, särskilt när du byter enstaka taggar mycket under samtidig belastning.
jsonb
är bara ett bra alternativ om du ändå ska arbeta med JSON, och kan lagra och hämta JSON "som den är".