Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 July 20

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
Народ, у меня вопрос
не антипаттерн ли писать всю логику связанную с базой на языке plpgsql и из ноды дергать только созданные функции?
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
Дмитрий
Народ, у меня вопрос
не антипаттерн ли писать всю логику связанную с базой на языке plpgsql и из ноды дергать только созданные функции?
думаю рациональнее спросить, каковые цели приследуються и решают ли они проблему?
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
если мы говорим о перфомансе - то БД-шный функции вроде как выигрывают, но размазывается бизнес логика, что повлияет на понимание целостности системы (без нормально поддерживаемой документации, на которую тоже силы нужно тратить)
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Дмитрий
Народ, у меня вопрос
не антипаттерн ли писать всю логику связанную с базой на языке plpgsql и из ноды дергать только созданные функции?
а приведите пример что именно вы там хотите написать?
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
поясню бекграунд на всякий случай
я сейчас перехожу из фронтенда во бекенд
проект чисто мой учебный

допустим есть таблица у которой есть связи (1:м) с таблицей б которая связана (1:м) с таблицей в

и допустим я хочу удалить одним действием запись в таблице б
это значит что мне для начала надо удалить все связанные записи из таблицы в и связь в таблице а

и вот чот не хочется делать это на джаваскрипте
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
а насчет бизнеслогики, то она все же будет не на pgplsql
на оном я хочу писать все полностью связанное с добавлением, удалением и вытаскиванием
п.с. для связи с базой использую node-postgres
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
если для пет проекта, то как по мне тут любые новшества дадут новый опыт, что очень важно для ширины взгляда на проблематику
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Вы все то же самое можете писать в коде, просто используя сырые SQL запросы

await queryInterface.sequelize.query(
   'BEGIN; DELETE FROM "transactions" WHERE ….; DELETE FROM "ordersWHERE ….; COMMIT;’
);
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Плюсы по сравнению с писанием прямо в базе:
- очевидность
- этот запрос попадает в version control соответственно видно кто и когда его менял
- если большая команда то тоже - такие запросы ревьювятся вместе с кодом
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
Плюсы по сравнению с писанием прямо в базе:
- очевидность
- этот запрос попадает в version control соответственно видно кто и когда его менял
- если большая команда то тоже - такие запросы ревьювятся вместе с кодом
а минусы?
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
если в базе - вы слегка подзамучитесь потом писать миграции которые меняют эти функции. насколько я помню там приходится дропать функцию и как бы создавать ее заново.
источник

Д

Дмитрий in NodeUA - JavaScript and Node.js in Ukraine
понял принял
благодарю за фидбек
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
здесь вот pros/cons https://www.postgresqltutorial.com/introduction-to-postgresql-stored-procedures
- Slowness in software development because stored procedure programming requires specialized skills that many developers do not possess.
- Difficult to manage versions and hard to debug.
- May not be portable to other database management systems e.g., MySQL or Microsoft SQL Server.

Для практики на своем проекте почему бы и не поиграться. Чтобы уметь это делать.
источник

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
для pg что ли нет варианта хранимки хранить в vcs и накатывать их на живую базу?
в mssql, например, это стандартный flow, и там код на транзакте точно так же проходит ревью
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
есть. в миграцию пишешь и оно сделает удаление/пересоздание функции.
источник

ЕХ

Егор Хильченко... in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
есть. в миграцию пишешь и оно сделает удаление/пересоздание функции.
вопрос к вам, с помощью чего делаете миграции на ноде? что посоветуете, что нет?
источник

VP

Vitaliy Pavlenko in NodeUA - JavaScript and Node.js in Ukraine
Егор Хильченко
вопрос к вам, с помощью чего делаете миграции на ноде? что посоветуете, что нет?
А яка ліба для роботи з скл?
источник

ЕХ

Егор Хильченко... in NodeUA - JavaScript and Node.js in Ukraine
Vitaliy Pavlenko
А яка ліба для роботи з скл?
допустим если обычная mysql2
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
в текущем проекте sequelize (исторически сложилось) и миграции от него же, типа sequelize db:migrate.
к миграциям у меня претензий нет, там внутри 2 функции - up и down - и внутри мы пишем сырые SQL запросы. а сам sequelize как многие ORM генерит местами ужасные запросы под капотом, если его средствами делать джойны
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
knex удобный http://knexjs.org/#Migrations - сгенерить миграцию/накатить/откатить - все что нужно
источник