Я намагаюся визначитися з дизайном бази даних, маючи на цьому етапі якомога менше припущень (щодо того, як насправді розвивається веб-додаток).
В якості першого кроку, розуміючи, що JOINS - це дорого, я розглядаю невелику кількість монолітних таблиць на відміну від великої кількості нормалізованих менших таблиць. Як другий момент, я плутаюся між використанням hstore vs звичайних таблиць проти JSONB (з індексацією GiST).
AFAIK (будь ласка, не соромтеся виправляти):
Як правило, у Postgres, як відомо, hstore працює краще, ніж інші типи даних. Ця презентація від FOSDEM PGDAY має цікаву статистику (у другій половині слайдів). https://wiki.postgresql.org/images/b/b4/Pg-as-nosql-pgday-fosdem-2013.pdf
Перевагою hstore є швидке індексування (GiN або GiST). Однак за допомогою JSONB, GiN та GiST індексація також може бути застосована до даних JSON.
У цьому щоденнику професіонала на другому квадранті сказано: «Напевно, варто замінити використання hstore на jsonb у всіх нових програмах» (прокручуйте до кінця): http://blog.2ndquadrant.com/postgresql-anti-patterns-unne необходимо -jsonhstore-динамичні стовпці /
Тому я хотів би визначитися з наступним:
- Для основної (структурованої) частини даних: вона повинна містити пару реляційних таблиць (порівняно велика з багатьма стовпцями), чи це має бути ряд ключових сховищ, що використовують hstore?
- Якщо дані про спеціальні (внесені / неструктуровані користувачем) дані повинні бути в JSON або сховищах ключових значень в hstore (з ключами, що зберігаються в одній з основних реляційних таблиць)?
JSON(B)
іhstore
(і EAV) корисні для даних з невідомою структурою.