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)xmlmer omfattande och mer komplex än någonderahstoreellerjsonb, 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".