Size: a a a

Clojure — русскоговорящее сообщество

2020 February 19

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Vlad 💩
ну таблица creature в ней общие поля и потом с таблицы dog, alien, person foreign key на creature так не подходит?
Я так понимаю такая, если мы говорим за использование классического подхода?
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Или мы говорим про jsonb?
источник

V💩

Vlad 💩 in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
Или мы говорим про jsonb?
про jsonb
источник

V💩

Vlad 💩 in Clojure — русскоговорящее сообщество
ну то был мой вариант самый лучший как я это вижу, у вас такой же?
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
creature
 id uuid
 type enum
 entity jsonb
источник

p

programmist ⌨️ in Clojure — русскоговорящее сообщество
enum в PostgreSQL не самый удобный тип данных.
источник

V💩

Vlad 💩 in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
creature
 id uuid
 type enum
 entity jsonb
в enum слоны,жирафы и т.д?
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Да, тип животного.
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
programmist ⌨️
enum в PostgreSQL не самый удобный тип данных.
Можно использовать обычную строку.
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
Наверное, это даже удобнее, чем обновлять enum при появлении нового типа животного.
источник

p

programmist ⌨️ in Clojure — русскоговорящее сообщество
ну то есть обычная таблица-справочник, с внешним ключом
источник

V💩

Vlad 💩 in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
creature
 id uuid
 type enum
 entity jsonb
а если мне нужно сгрупировать животных по рост => количество с таким ростом
источник

V💩

Vlad 💩 in Clojure — русскоговорящее сообщество
по факту обычный group by
источник

VM

Vyacheslav Mikushev in Clojure — русскоговорящее сообщество
group by (entity-»'height')
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Может немного не в тему,  но отличная презентация
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
источник

p

programmist ⌨️ in Clojure — русскоговорящее сообщество
Это хорошо работает, когда сущностей обозримое количество, и они редко добавляются. Два-три десятка. Когда их сотни, это не так удобно.
В случае с ценными бумагами, например. Избавится от множества JOIN'ов можно ещё так:
WITH
attr AS (
 SELECT ia.instrument_id
   ,MAX(CASE WHEN ia.attribute_name='step_price' THEN ia.attribute_value ELSE NULL END) AS step_price
   ,MAX(CASE WHEN ia.attribute_name='limit_down' THEN ia.attribute_value ELSE NULL END) AS limit_down
 FROM instrument_attributes ia
 )
SELECT i.*
 ,a.step_price
 ,a.limit_down
FROM instruments i
LEFT JOIN attr  a ON i.instrument_id=a.instrument_id


и аггрегированная выборка будет гораздо быстрее.
источник

p

programmist ⌨️ in Clojure — русскоговорящее сообщество
вот так читабельнее
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Я не читал всю переписку. Я про 38ой слайд. Там очень остроумно сделаны внешние ключи.
источник

AB

Alex Bubnov in Clojure — русскоговорящее сообщество
Vyacheslav Mikushev
creature
 id uuid
 type enum
 entity jsonb
тут еще версию в type надо не забыть
источник