powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Использование триггеров в EAV
36 сообщений из 36, показаны все 2 страниц
Использование триггеров в EAV
    #34154602
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При EAV модели, данные от разных объектов хранятся в одной таблице.

Триггеры по определению не должны производить те же изменения на ту же таблицу, а это необходимо для организации логики.

Как вывернуться?
Есть какойто общий подход, чтобы избежать зацикливаний?

В Postgresql есть правила (rule), но в них нет переменных которые предоставляет триггер.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34154928
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключников
Как вывернуться?
Есть какой то общий подход, чтобы избежать зацикливаний?

Зависит от БД.
В MSSQL, например, есть INSTEAD OF триггеры.
Можно, например, нужные срезы базовой таблицы создать в виде view и действия производить с view на которые навешаны INSTEAD OF - триггеры делающие изменения в базовой таблице.

Вобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34154997
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.IMHO, спорная рекомендация, особенно в общем случае.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34155212
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.
В принципе да - использовать триггеры только в крайнем случае.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34155234
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используются хранимые процедуры, только кто их будет запускать если не триггер.

С представлением и триггером instead off на нем, понятно, спасибо за идею.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34155243
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
мод Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.
В принципе да - использовать триггеры только в крайнем случае.
что "да"? вы все еще не можете обойтись без хранимых процедур?
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34155270
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* вы все еще не можете обойтись без хранимых процедур?
А зачем без них обходится ?
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34155276
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
модА зачем без них обходится ?
надо. это рекомендация. так делают все реальные пацаны.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34156884
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.
В принципе да - использовать триггеры только в крайнем случае.
+1
триггеры - прошлое тысячилетие
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34156982
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 мод Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедуры.
В принципе да - использовать триггеры только в крайнем случае.
+1
триггеры - прошлое тысячилетие
:) А что же делать? Событийный подход хотелось реализовать..
Апликейшн сервер делать?

А проблема в том, что надо хранить два типа сущьностей.
1. Объекты
2. Связи между объектами.
Первое хорошо решается моделью EAV. Второе тоже EAV или как угодно ибо важно быстродействие.
А проблема в том что каждая связь несет с собой действие (метод или если конкретно то соответствующую ХП). Активизировать эту ХП может только триггер!
Если триггеры прошлый век, то весь подход не верный?

Второй вариант, данные в объекты передавать посредством соответствующих ХП. И уже в самих ХП определять все последующие действия согласно связям между объектами.

Какие плюсы минусы у этих подходов?
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157034
RENaissance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
триггеры - прошлое тысячилетие

И давно???

З.Ы Ссылку не кинете почитать...для просветления?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157062
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КлючниковА что же делать? Событийный подход хотелось реализовать..
Если источник событий клиент - то обработка этих событий процедурами.
Если источник событий сама БД - то обработка этих событий триггерами.
Алексей КлючниковА проблема в том что каждая связь несет с собой действие
Непонятно что, кто и куда несет.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157143
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод
Алексей КлючниковА проблема в том что каждая связь несет с собой действие
Непонятно что, кто и куда несет.
хм. есть связи информационные, которые ничего никуда не несут, а используются только для работы третьесторонных функций.
А есть изменяющие связи, такие подразумевают наличие ХП при активизации связи.
такая связь активизируется при изменении данных одного из связываемых объектов.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157304
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключников мод
Алексей КлючниковА проблема в том что каждая связь несет с собой действие
Непонятно что, кто и куда несет.
хм. есть связи информационные, которые ничего никуда не несут, а используются только для работы третьесторонных функций.
А есть изменяющие связи, такие подразумевают наличие ХП при активизации связи.
такая связь активизируется при изменении данных одного из связываемых объектов.
IMHO EAV мало где применяется. Очень часто вместо EAV делают усечённый EAV, а остальную объектность и логику несут ХП - серверПриложений или клиент.

Вы уверены что Ваша задача именно для EAV?
Путано всё.
авторПри EAV модели, данные от разных объектов хранятся в одной таблице.
Триггеры по определению не должны производить те же изменения на ту же таблицу, а это необходимо для организации логики.
Привели бы структуру БД и задчу.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157422
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключников
такая связь активизируется при изменении данных одного из связываемых объектов.
Ну вот вам и первичное событие - его и надо обрабатывать.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34157572
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КлючниковТриггеры по определению не должны производить те же изменения на ту же таблицу А почему собственно ?
Да еще и так жестко: "изменения".
Update одной колонки это тоже "изменение"
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158416
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Алексей Ключников
такая связь активизируется при изменении данных одного из связываемых объектов.
Ну вот вам и первичное событие - его и надо обрабатывать.
Угу, только вот в таблице 1000 объектов, на них наложено 2000 связей,
100 разных типов связей. Т.е. на измнение данных в одном из обьектов
отрабатывает тригер, запускающий ХП, которая выясняет все взаимосвязи этого обекта и запускает соответствующие ХП (что то типа коллектора получается). ХП в свою очередь производят уже следующую волну изменени в ту же таблицу.
Все это взято с потолка потому что не реализовано и не протестировано,
но уже видно что поддержка целостности (в смысле обеспечение отсутствия зацикливаний),
задача не тривиальная.
Или тривиальная? :)
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158443
007.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Ключников100 разных типов связей.
Например?
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158457
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что за мега система с 1000 объектов ООП в РСУБД?
А клиент - просто тупой браузер?
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158459
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
007. Алексей Ключников100 разных типов связей.
Например?
1. переложить данное обекта 5 параметра 10 в обект 7 параметр 11
2. добавить данное обекта 5 параметра 10 к данному в обекте 7 параметр 11
3. если данное обекта 5 параметра 1 = 4, обнулить парметры 30,25,35 у объекта 6
4. объект 1 подключен к обекту 2 (как пример информационной связи)
И т.д.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158476
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123что за мега система с 1000 объектов ООП в РСУБД?
А клиент - просто тупой браузер?

Да, просто тупой браузер.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158553
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключников 007. Алексей Ключников100 разных типов связей.
Например?
1. переложить данное обекта 5 параметра 10 в обект 7 параметр 11
2. добавить данное обекта 5 параметра 10 к данному в обекте 7 параметр 11
3. если данное обекта 5 параметра 1 = 4, обнулить парметры 30,25,35 у объекта 6
4. объект 1 подключен к обекту 2 (как пример информационной связи)
И т.д.
это не связи, а бизнес-процедуры и должны лежать в ХП:
Напр.:
- В ослике КонтекстноеМеню - "ОбъеденитьОбъекты"
- В ХП с именем ОбъеденитьОбъекты(id1, id2, ....)
Код: plaintext
1.
2.
3.
 1 . переложить данное обекта  5  параметра  10  в обект  7  параметр  11 
 2 . добавить данное обекта  5  параметра  10  к данному в обекте  7  параметр  11 
 3 . если данное обекта  5  параметра  1  =  4 , обнулить парметры  30 , 25 , 35  у объекта  6 
 4 . объект  1  подключен к обекту  2  (как пример информационной связи)
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158570
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё лучше если вы ЭТО назовёте бизне-логикой в виде методов объектов-классов.
Т.к. в РСУБД нет такого, то:
- написать на Net в MS SQL Server
- написать в сервере приложений.
- взять готовые маппинг-трансформаторы (тут проскакивало)

______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158596
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123ещё лучше если вы ЭТО назовёте бизне-логикой в виде методов объектов-классов.
Т.к. в РСУБД нет такого, то:
- написать на Net в MS SQL Server
- написать в сервере приложений.
- взять готовые маппинг-трансформаторы (тут проскакивало)

Это все не бизнес логика. и тут нет присутствия MS.
маппинг-трансформаторы вроде как происходит попытка изобрести свой
маппинг-трансформаторы, со своей спецификой.


Связь подразумевает ХП, или ХП подразумевает связь, от перемены мест слагаемых,
в данном случае, ничего не меняется. Ускользает только смысл отличия свяи от объекта,
получаются некие перекрывающие друг друга объекты.

Перекрывающие друг друга объекты -- звучит.. слабо предложить структуру под это?
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158616
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то меня отнесло от темы..
так как с борьбой с зацикливанием в EAV с триггерами.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158670
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КлючниковЧто то меня отнесло от темы..
так как с борьбой с зацикливанием в EAV с триггерами.

авторПерекрывающие друг друга объекты -- звучит.. слабо предложить структуру под это?
допустим можно изобретать велосипед в виде ООБД на РСУБД или свой маппинг, но
изобретать свои связи в ООП или "Перекрывающие друг друга объекты" - это слишком.
:)
IMHO нужен сначала не проектировщик БД, а проектировщик предметной области или аналитик.

Удачи!
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158744
007,
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСвязь подразумевает ХП, или ХП подразумевает связь, от перемены мест слагаемых,
в данном случае, ничего не меняется. Ускользает только смысл отличия свяи от объекта,
получаются некие перекрывающие друг друга объекты.

Связь - это не действие с объектом (пп. 1-3), а отношение между объектами (п. 4). Обычно, разные действия получаются при взаимодействии объектов разного типа и в зависимости от вызвавшей их причины 8)
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158771
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Ключниковтак как с борьбой с зацикливанием в EAV с триггерами. А в чем проблема-то с зацикливанием ?
Я все понять не могу.
Как не банально это звучит, но в триггере всего лишь нужно _проверять_, добавлены ли необходимые с вашей т.з. строки в таблицы и, _если нет_ то добавлять. Эта проверка и избавляет от зацикливания.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34158947
Алексей Ключников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov Алексей Ключниковтак как с борьбой с зацикливанием в EAV с триггерами. А в чем проблема-то с зацикливанием ?
Я все понять не могу.
Как не банально это звучит, но в триггере всего лишь нужно _проверять_, добавлены ли необходимые с вашей т.з. строки в таблицы и, _если нет_ то добавлять. Эта проверка и избавляет от зацикливания.
Решение в лоб. Значит так тому и быть. А потом посмотрим..
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159013
007.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Ключников Alexey Kudinov Алексей Ключниковтак как с борьбой с зацикливанием в EAV с триггерами. А в чем проблема-то с зацикливанием ?
Я все понять не могу.
Как не банально это звучит, но в триггере всего лишь нужно _проверять_, добавлены ли необходимые с вашей т.з. строки в таблицы и, _если нет_ то добавлять. Эта проверка и избавляет от зацикливания.
Решение в лоб. Значит так тому и быть. А потом посмотрим..
О добавлении каких строк говорил этот человек... и что такое зацикливание? )
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159107
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENaissance
Petro123
триггеры - прошлое тысячилетие

И давно???
З.Ы Ссылку не кинете почитать...для просветления?

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

смежные темы:
Тригеры или хранимые процедуры
Зачем триггеры?
Создать триггер и избежать рекурсии
Переносить ли код триггера в ХП
Удалить подчиненные записи в той же таблице
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159184
Да вроде давно известен "общий подход", Алексей Ключников. Когда в триггере пишите обновление данных используйте, при необходимости, параметр "не выполнять триггеры".
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159472
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Роман Дынник т.к. это быстрее
т.к. Вам не надо писать код


все зависит от того, считаете вы пп 1-3 правилами или законами (ограничениями целостности). при нарушении законов система перейдет в недопустимое состояние и вам не дадут денек на цветные мелки
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159522
RENaissance
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник
Выполняйте все проверки ссылочной целостности и верности данных, используя ограничения (внешние ключи и проверки доменной
целостности), вместо использования триггеров, т.к. это быстрее. Ограничьте использование триггеров только для задач аудита,
специальных задач и проверок, которые не могут быть выполнены с использованием ограничений. Ограничения также сохраняют Ваше время,
т.к. Вам не надо писать код для этих проверок, позволяя системе управления базами данных делать все это за Вас.

Извините конечно, но Вы забыли написать IMHO .

З.Ы Указанные Вами темы прочитал. Ничего нового: каждый "тянет" в свою сторону, забывая о компромиссе, и готов "гланды вырывать
через одно место", лишь бы реализовывать свою задачу тем инструментом, который он (они) считает ЕДИНСТВЕННО ПРАВИЛЬНЫМ.

З.З.Ы Еще раз извините, но меня интересовала официальная ссылка , например (да и желательно) из BOL, т.к. для меня это
практически единственный официальный документ (в котором я не нашел статьи на счет устарелости триггеров). В любом случае, спасибо.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34159705
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RENaissanceкаждый "тянет" в свою сторону
Я о том же. Каждый выбирает себе сам, в зависимости от условий и задачи...
Для меня лично триггеры создают больше проблем чем решают их, поэтому я их использую редко.
Для кого-то это, наоборот, очень удобный механизм, и этот кто-то тоже будет по-своему прав.
Ссылки приведены для того, чтобы показать что незачем поднимать "религиозные войны", которым уже не один год.
...
Рейтинг: 0 / 0
Использование триггеров в EAV
    #34162090
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Роман Дынник RENaissanceкаждый "тянет" в свою сторону
Я о том же. Каждый выбирает себе сам, в зависимости от условий и задачи...
Для меня лично триггеры создают больше проблем чем решают их, поэтому я их использую редко.
Для кого-то это, наоборот, очень удобный механизм, и этот кто-то тоже будет по-своему прав.
Ссылки приведены для того, чтобы показать что незачем поднимать "религиозные войны", которым уже не один год.Дык, если бы не было Роман ДынникВобщем же случае рекомендации такие - не использовать триггеры ни в EAV модели, ни в "нормальной" реляционной, а использовать хранимые процедурыили было бы указано, что это IMHO, то не было бы и поводов их поднимать :) Я, лично, тоже стараюсь избегать триггеров, но давать рекомендацию отказываться от них "в общем случае" я бы не рискнул. В любом подходе есть свои "за" и "против" и в их число не должно входить субъективное мнение.

P.S. IMHO ;)
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Использование триггеров в EAV
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]