Size: a a a

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

2020 February 19

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Владислав Петров
Воу. Как это? Просветите, если не затруднит. По работе много sql использую
На псевдоязыке:

Creature

Person : Creature
    name: string
    email: string
    birth_date: date

Dog : Creature
    name: string

Alien : Creature
    name: string
    planet_of_origin: string

(И допустим мы знаем, что других нет и не бывает)
Вопрос: как такое представлять в реляционной бд?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Пример из финансов: есть Asset (актив) и его вариации акция, облигация, депозитарные расписки и тд
источник

A

Artem in Clojure — русскоговорящее сообщество
ты хочешь все в одной таблице?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Artem
ты хочешь все в одной таблице?
Не обязательно, хочу удобно просто)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Допустим нужно вытаскивать всех таких из базы, что-то делать с ними, и запихнуть обратно в базу
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Не обязательно, хочу удобно просто)
ну если в одной таблице всё, это удобно?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну если в одной таблице всё, это удобно?
Мне кажется нет, потому что теряется "типобезопасность" и вообще вроде бд не предполагает такое использование)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Делать паддинг нулами я имею в виду
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Но вообще у меня на работе именно так и сделали) Причем оно и в коде также, поэтому там хрен разберёшься, что тебе пришло..
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Но вообще у меня на работе именно так и сделали) Причем оно и в коде также, поэтому там хрен разберёшься, что тебе пришло..
то есть вот так сделали?
creature
- name: string
- type: enum [person, dog, alien]

- person__email: string
- person__birth_date: date

- alien__planet_of_origin: string
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
то есть вот так сделали?
creature
- name: string
- type: enum [person, dog, alien]

- person__email: string
- person__birth_date: date

- alien__planet_of_origin: string
Не, в бд одна таблица, в коде один класс. Все, поля, которые не относятся к твоему "типу" заполнены нулами
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Джабакод
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Не, в бд одна таблица, в коде один класс. Все, поля, которые не относятся к твоему "типу" заполнены нулами
ну вот я нарисовал в бд одна таблица
если в коде будут три класса, это решит проблему?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну вот я нарисовал в бд одна таблица
если в коде будут три класса, это решит проблему?
А, я понял, ну в принципе решает, но опять же, нулы в базе зачем-то хранить.. И в коде надо распарсить это, но это уже детали, это норм
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
В общем, реляционная бд и полиморфизм как-то не слишком дружат, кажется
источник

p

programmist ⌨️ in Clojure — русскоговорящее сообщество
Ivan Grishaev
Они выглядят страшно, но если навесить на них индекс, будет так же быстро, как и обычное поле
Но обновление (UPDATE) такого поля будет тяжёлым.
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну как бы база совершенно для этого не предназначена
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
можно как в джанго наколбасить модельки, а потом ORM построит по ним таблицы
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Модели наследуешь как обычные классы, и таблицы создаются как надо
источник

p

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