W większości przypadków użyłbym znormalizowanego schematu
z tabelą option_tag
implementacja relacji wiele-do-wielu między tabelami option
i tag
. Implementacja referencyjna tutaj:
Może nie jest to najszybsza opcja pod każdym względem, ale oferuje pełen zakres funkcjonalności bazy danych, w tym integralność referencyjną, ograniczenia, pełen zakres typów danych, wszystkie opcje indeksowania i tanie aktualizacje.
Aby uzyskać kompletność, dodaj do listy opcji:
hstore
(dobra opcja)xml
bardziej gadatliwy i bardziej złożony niż którykolwiek zhstore
lubjsonb
, więc używałbym go tylko podczas pracy z XML.- "ciąg wartości oddzielonych przecinkami" (bardzo prosta, w większości zła opcja)
- EAV (Entity-Attribute-Value) lub „pary nazwa-wartość” (przeważnie zła opcja)
Szczegóły w tym powiązanym pytaniu na dba.SE:
Jeśli lista jest tylko do wyświetlania i rzadko aktualizowana, rozważyłbym zwykłą tablicę, która jest zwykle mniejsza i działa lepiej niż reszta.
Przeczytaj wpis na blogu Josha Berkusa Link do @a_horse w jego komentarzu. Należy jednak pamiętać, że skupia się on na wybranych przypadkach przeczytania. Josh przyznaje:
I tu właśnie wygrywa znormalizowane podejście, zwłaszcza gdy często zmieniasz pojedyncze tagi przy jednoczesnym ładowaniu.
jsonb
jest dobrą opcją, jeśli i tak zamierzasz operować z JSON, i możesz przechowywać i pobierać JSON „tak jak jest”.