Istnieją dwa typy szczególnie odpowiednie do przechowywania słowników jako całość:hstore
i json
- lub przeważnie lepszy jsonb
w Postgresie 9.4 lub nowszym.
Postgres ma również dedykowany xml
typ danych, ale wolałbym wybrać jedną z trzech poprzednich opcji. XML jest stosunkowo gadatliwy i bardziej złożony (by nie powiedzieć zawiły) i może być przesadą dla twojego celu.
Jeśli wszystko, czego chcesz od bazy danych, to przechowywanie i pobieranie całego słownika, są to dobre opcje. Zobacz:
Znajdziesz tu również obszerną dyskusję na temat zalet i wad dotyczących eav (entity-attribute-value) przechowywanie w relacyjnych bazach danych.
Jeśli chcesz innych rzeczy z bazy danych, takich jak integralność referencyjna, klucze obce lub różne inne ograniczenia, łatwy dostęp do poszczególnych wartości, minimalny rozmiar pamięci, proste indeksy itp. Proponuję jedną lub więcej tabel z dedykowaną (znormalizowany ) kolumny.
Znormalizowany układ tabeli
Z tego, co zebrałem, "MyObject" (m
) zawiera zbiór odniesień do „OtherObject” (o
). Każdy m
jest powiązany z (24) o
i każdy o
jest powiązany z 0-n m
- które można zaimplementować w klasycznej relacji n:m. Oto szczegółowe instrukcje: