• Практическое использование схем в Postgresql - когда они нужны?

    В целом, понимайте схемы как пространства имен. Схемы помогают логически организовать структуру БД. Различные приложения или компоненты приложений внутри себя имеют более высокую связность, чем между собой, тоже самое и с данными в БД - часто таблицы сами по себе организуются в логические группы, причем внутри группы связей довольно много (внешние ключи, какие-то общие хранимые процедуры и т.д.), а между этими группами - мало или нет вовсе.

    Важно понимать, что различные БД плохо подходят для логического группирования, т.к. разбиение по базам данных нужно скорее для администраторов, а не для приложений. Плюс, в большинстве СУБД, где существует понятие схемы, возможно ставить внешние ключи на таблицы в другой схеме, но нельзя на таблицы в другой БД. Иными словами, отдельные БД удобно создавать тогда, когда вы разделяете данные абсолютно не связанных приложений или сервисов. Например, складского учета и форума поддержки пользователей. С другой стороны, если вы хотите логически разделить таблицы в соответствии с компонентами одного приложения (например, корпоративный портал: 4 таблицы для поддержки авторизации, 10 таблиц для поддержки форума, еще 5 для чата со службой поддержки или отделом продаж) - то именно схемы будут удобным механизмом для этого.

    Если сформулировать коротко, то разбиение на базы данных - это для администраторов БД, а разбиение на схемы - это для администраторов данных и разработчиков приложений, чтобы им же было легче.

    А что будет если несколько юзеров будут на одну public-схему коннектиться?

    Помимо того, что схема - это пространство имен, в большинстве СУБД это еще и пространство безопасности. Даже в рамках одного многокомпонентного приложения имеет смысл ставить границы безопасности для ограничения возможных потерь и разрушений в случае компрометации одного из компонент.

    Вот допустим, у вас есть отдельная схема для таблицы авторизации и аутентификации и отдельная - для корпоративного форума. Сервис авторизации у вас выполнен отдельно от форума (например, авторизация выдаёт токены пользователю, с которыми он потом может зайти на форум). С точки зрения безопаности было бы логичным выдать сервису авторизации и форума различных пользователей в базе - тогда, при взломе форума невозможно будет получить доступ к паролям в базе или изменить права на портале, подправив данные в таблице ролей. Конечно, многие СУБД разрешают ставить права на отдельные таблицы, однако схема в данном случае играет роль контейнера и позволяет проставить единые правила для всех таблиц внутри неё.

    то есть при работе в постгре предпочтительнее вместо отдельных баз делать разные схемы в одной

    Как вы уже поняли - для независимых приложений, которые могут и должны существовать отдельно друг от друга - лучше делать разные базы. Тогда администраторы смогут спокойно переносить базы с сервера на сервер, независимо их бэкапить и т.д. Для компонентов одного приложения нужно использовать схемы.

    Вот вам еще хороший пример. У вас есть приложение для ведения бухгалтерии и складского учёта на фирме. При этом сложилось так, что вам нужно хранить на одном сервере данные нескольких разных фирм (например, вы предоставляете готовый сервис под ключ нескольким клиентам). В этой ситуации более чем логично хранить данные разных клиентов в разных БД, а данные бухгалтерского и складского учета - в различных схемах в рамках одной БД конкретного клиента.
    Ответ написан
    2 комментария
  • Почему такой код считается нормальным?

    @RidgeA
    Такой подход общепринят в NodeJS.

    Кстати, модуль в NodeJS по сути является функцией. Так что копирование функции `start` - это копирование части
    функции по сути :-)

    Ничто не мешает написать так:
    async function start() {
        const Hapi = require('hapi');
        const server = Hapi.server({});
    
        try {
            await server.start();
        }
        catch (err) {
            console.log(err);
        }
    };
    
    start();
    Ответ написан
    3 комментария
  • Angular-cli vs Angular-seed - что лучше?

    GTRxShock
    @GTRxShock
    SA
    Они появились во времена когда не было cli, и причем как правило на базе какого-нибудь обучающего курса.

    Когда ангуляр официально зарелизил стайл гайд от john papa, то проще и продуктивнее стало изучить его и работать с cli. Сейчас я беглым взглядом проглядел сид проекты, вроде порядок навели в архитектуре, но нет. :)

    Полезнее понять почему именно так а не иначе рекомендуют делать ребята с ангуляра, тем более cli почти все потребности покрывает (достаточный уровень кастомизации как для разработки, так и для продакшен билда). Почему пользуются до сих пор? Привычка - вторая натура ;)

    p.s. https://angular.io/guide/styleguide и вперед
    Ответ написан
    1 комментарий
  • Как правильно организовать внутренний баланс пользователей?

    Demetriy
    @Demetriy
    веб и мобильная разработка
    1) Как написали в первом комментарии: делать операции в транзакциях, вести логи транзакций.

    2) Двойная запись (https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D..., вот лекция с описанием https://vimeo.com/117154510.

    3) У денежных систем (Paypal и т.п.) бывают разные способы ответа вашем сайту о том, что пользователь действительно оплатитил счет, так вот, никогда не нужно использовать систему, когда подтверждением является редирект пользователя на страницу вашего сайта с хешом операции. Ваш сайт должен отправлять запрос на проверку операции независимо от пользователя.

    4) Ведение логов действий пользователей (когда вы видите, что по логам пользователь 5 раз пополнил баланс на общую сумму 2000 рублей, а на реальный счет вам пришло 400 рублей, то это повод бить тревогу).

    5) Бекапы
    Ответ написан
    1 комментарий
  • За и против Bootstrap?

    @vasIvas
    Bootstrap - это золотые, не разрушаемые магические доспехи. Но для человека ростом 1,2.
    Ответ написан
    Комментировать