Задать вопрос
  • Можно ли такое реализовать с помощью MySQL?

    @Akina
    Дмитрий Беляев, ну да. Во втором варианте предлагается разреженная таблица. Но её использование никоим боком не денормализация - как бы ни различались экземпляры разных типов, это всё одна и та же сущность.
  • Можно ли такое реализовать с помощью MySQL?

    @Akina
    Дмитрий Беляев, Я вижу:
    create table products(product_id int, steam_level int, telegram_is_premium boolean)

    product_id - внешняя ссылка, как я понимаю.
    steam_level - ну... наверное, можно возможные значения вынести в отдельную таблицу, но как по мне, то оно не стоящее дело. Тогда уж CHECK constraint или вообще ENUM.
    telegram_is_premium - тоже как-то выносить странненько.

    Что декомпозировать-то?
  • Можно ли через VBA сделать отправку уведомлений на почту?

    @Akina
    А какие сложности-то? Если в системе есть обработчик SimpleMAPI, то задача несложная. Объектная модель вполне доступна.
  • Почему не получаются значения NEW в триггере BEFORE UPDATE?

    @Akina
    ПО создает в таблице объектов пустой объект со своим id (под пустым я понимаю то, что в других таблицах у него нет параметров с его ID) и в таблице договоров присваивает его id в ячейке в столбце id_объекта для того чтобы как-то связать их. Есть так же еще пара таблиц которые отвечают уже за параметры присваеваемые данному объекту. Таблица для параметров типа текст, типа список и типа флаг. Моя задача заключается в том чтобы в момент создания данного ПУСТОГО объекта, у которого отсутствуют параметры, подхватить данные с договора и насунуть их в эти параметры, которые будут созданы триггерром и обозначены ID соответствующим данному объекту.

    То есть, если я верно понимаю происходящее, то:

    1. ПО создаёт запись в таблице объектов и получает её ID.
    2. ПО создаёт запись в таблице договоров, и в поле ссылки на объект использует полученный ID.

    Это - верно? Если так - то я бы ориентировался на создание записи именно в таблице договоров, и именно в её BEFORE INSERT триггере присваивал необходимые значения полям этой таблицы. А сами значения параметров передавал бы через пользовательскую переменную.

    Моя базовая задача конкретно здесь, план минимум - это BEFORE UPDATE phone_client_item_1
    сделать INSERT INTO (object_id, param_id, value)
    где VALUES будут (NEW.object_id, 1, num), где num - это результат SELECT number INTO num FROM phone_item_number_1 WHERE item_id = id;

    То есть на момент UPDATE phone_client_item_1 уже имеется соответствующая запись в phone_item_number_1?

    Всё стало совсем непонятно. Пожалуйста, добавьте INSERT INTO с 2-3 начальными записями на таблицу, потом приведите все запросы, которые выполняет указанное ПО, с какими-то значениями (все значения должны быть уникальны в пределах всех показанных запросов, т.е. которые невозможно перепутать), и после каждого запроса от ПО, если надо что-то сделать дополнительно, укажите точно, что и где дополнительно должно произойти.

    Почему на этапе INSERT INTO используя конструкцию NEW.column_name я получаю ничего.

    Это верно только для автоинкрементных полей. Генерация автоинкремента будет выполнена только после всех триггеров, и только если значение после всех триггеров равно нулю. Даже если для него в запросе было явно указано NULL - ведь поле является первичным ключом, и соответственно NOT NULL. См. https://dbfiddle.uk/eVEpy39j
  • Запрос на удаление, что нём не так?

    @Akina
    А ошибку нам предлагается угадать? ПОЛНЫЙ текст ошибки, от первого до последнего символа - в текст вопроса.

    PS. Сам запрос синтаксически и логически верен.
  • Можно ли такое реализовать с помощью MySQL?

    @Akina
    Дмитрий Беляев,
    насчет второго варианта, он ещё и денормализован

    ??? Почему? что тут денормализованного?
  • Можно ли такое реализовать с помощью MySQL?

    @Akina
    Но это, как написали, денормализованный.

    Ну и неправильно написали. Нет там ничего денормализованного. Обычная себе разреженная таблица.
  • Почему не получаются значения NEW в триггере BEFORE UPDATE?

    @Akina
    Andrey, Вы прочитали материалы по ссылке в постскриптуме?

    Не надо рассказывать, как вы пытаетесь решить задачу - расскажите саму задачу. Конкретно и предметно. Пока, судя по описанию, вы используете какой-то сторонний ЯП с каким-то сторонним фреймворком, который даже не подозревает о существовании триггеров и неспособен их работу правильно учитывать. Вы же упорно намерены триггеры в эту систему втащить, и по итогу боретесь с системными косяками своего инструмента. А сова не натягивается...
  • Почему не получаются значения NEW в триггере BEFORE UPDATE?

    @Akina
    Вы можете создать максимально упрощённую, но при этом адекватную, модель? CREATE TABLE для трёх связанных таблиц (только нужные для вопроса поля, только PK/FK, всё лишнее поудалять), INSERT INTO, вставляющий в них по 3-5 связанных записей, затем обсуждаемый UPDATE в одну таблицу, описание того, что должно при этом измениться в остальных двух таблицах (и подробно - почему именно так), плюс требуемое финальное состояние данных в каждой из трёх таблиц.

    идея в том что при UPDATE я беру данные из данного UPDATE и вношу их INSERT INTO в другие таблицы чтобы на выходе у пользователя уже подтянулись сгенереные данные. А не закрывать и открывать снова "окошко".

    Не понял.. вроде раньше было сказано:
    чтобы когда пользователь нажал "создать объект" в этом ПО - ему сразу вываливался на экране этот созданный объект с уже вставленными данными этим тригером.

    Судя по тому, что ты описываешь - твоё ПО то ли вообще не знает о существовании двух дополнительных таблиц, то ли никак их не связывает с создаваемым объектом. Но раз так - то изменения в тех двух таблицах вообще не должны менять поведения этого ПО.
    Ну и непонятно, как ты собираешься создавать НОВЫЙ объект запросом UPDATE.
  • Почему не получаются значения NEW в триггере BEFORE UPDATE?

    @Akina
    триггер, который перед UPDATE таблицы вносит данные в другие таблицы.

    Глупо. Лучше сперва убедиться, что вставка прошла нормально, и только потом изменять другие таблицы - тогда при проблемах не придётся откатываться.

    Исключение - если на эти самые добавленные в другие таблице записи должна ссылаться вставляемая запись. Но тогда это свидетельствует о грубых косяках в схеме данных.
  • Как исключить при join повторение множества для другого множества?

    @Akina
    Есть 2 таблицы

    Дайте их в виде проверенно рабочих CREATE TABLE + INSERT INTO.

    PS. Задача-то в общем плёвая. UNNEST второй таблицы. Нумерация в группе по буковке в обеих таблицах. LEFT JOIN. Обратная агрегация.
  • Как лучше хранить и быстро искать связанные данные?

    @Akina
    Таблица групп.
    Таблица терминов.
    Таблица, связывающая термин и группу, с полями даты начала и конца валидности связи. Для актуальной связи конец - в далёком будущем.
    А, собственно, всё.
    Разве что ещё мелочь - при расщеплении группы в новую группу выделяется меньшая подгруппа терминов, а если равно - то любая.
  • Как гарантировать последовательную запись данных без пропусков id?

    @Akina
    MishaXXL, да в триггере. Получаем текущее максимальное значение, прибавляем единицу, записываем. Чтобы гарантировать уникальность - создаём по этому полю уникальный индекс. Поскольку при конкурентных процессах можем получить дублирование, срабатывание ограничения уникальности и соответственно ошибку при вставке - предусматриваем и обрабатываем эту ситуацию на клиенте.
    В случае именно Постгресса можно попробовать задействовать дополнительный генератор, который не привязан к таблице и, соответственно, не будет плодить дыр из-за пред-резервирования... но всё равно при ошибке вставки значения будут теряться.
  • Как гарантировать последовательную запись данных без пропусков id?

    @Akina
    Виктор Кожухарь, это ожидаемо. Любой мультикомбайн, выполняя кучу функций, любую из них выполняет плохо (ну если повезёт - то любую кроме основной). То же и с автоинкрементом - уникальность он обеспечивает хорошо, а всё остальное - оторви и выбрось.
  • Какой проект можно сделать на PL/pgSQL новичку?

    @Akina
    Есть две категории случаев, где следует использовать хранимые процедуры:

    PL/pgSQL используется (обычно) для создания хранимых объектов. Их много (ну хорошо, несколько) типов, и процедуры среди них всего лишь в топе, а если вдруг и лидеры, то явно не безоговорочные. Пользовательские функции и триггеры ничуть не менее популярны.
  • Какой проект можно сделать на PL/pgSQL новичку?

    @Akina
    pavel_the_man, простейший пример - ни одна учётная запись в принципе не имеет прямого доступа к данным. Только и исключительно через хранимые процедуры. Очень полезно с точки зрения безопасности, кстати.
  • Ввод данных от нескольких источников в Excel c помощью VBA?

    @Akina
    чтобы данные введенные одной упаковщицей не перемешивались с данными другой упаковщицы

    Excel - это не база данных, нормализация ему и не ведома, и не нужна.
    Каждый файл либо каждый интерфейс - на отдельный лист.

    оператору, который выводил время появившейся ячейки, например: отсканировал->в соседней колонке зафиксировалось время скана

    Private Sub Worksheet_Change(ByVal Target As Range)
  • Как сделать sql запрос для показа топ 10 ключевых слов с группировкой и суммой метрик из другой таблицы?

    @Akina
    one2four,
    только те которые были отфильтрованы и сгруппированы

    Наоборот - сначала группировка, потом фильтрация (вернее, лимитирование). А это совсем другое дело. После этого остаётся или один git, или ни одного. А потом к нему зарплаты - соответственно тоже либо все, либо ни одной, т.е. зарплаты не фильтруются.
  • Как сделать sql запрос для показа топ 10 ключевых слов с группировкой и суммой метрик из другой таблицы?

    @Akina
    one2four,
    похоже это то, что нужно

    Вряд ли. В последнем запросе нет лимитирования. Я тупо так и не понял, что собсно нужно лимитировать...