|
|
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
Есть таблица Rodnya(kod_chela, kod_rodstv, kod_step_rodsva) где kod_chela - код человека kod_rodstv - код человека - родственника kod_step_rodsva - степень родства Мне унжно написать тригер, такой что при добавлении одному человеку родственника только (мать, отец, сын, дочь, жена, муж, брат сестра), у родственника бы появлялся этот человек с соответствующей обратной степенью родства и + у родственнкиа появлялись бы все те родственники что у первого и у первого родственники второго. Впринципе на клиенте я это реализовал, и все нормально работает. Но подумал что в БД будет лучше. Тригер нужно на Update и на Insert. Так вставка же будет происходить в одну и ту же таблицу. Как отключить срабатывание этого триггера на вставку когда я буду вставлять новые записи в теле функции триггера, чтобы не возникало зацикливаний? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 13:27 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
откажитесь от избыточности в структуре базы, и не придётся дублировать, заморачиваться с триггерами. object1 (человек) object2 (человек) link_type (тип связи) при этом есть тип связи 'родитель-ребёнок', но нет обратной связи 'ребёнок-родитель'. есть тип связи 'муж-жена', но нет связи 'жена-муж'. для поиска всех детей: where object1=? and link_type='родитель-ребёнок', а для поиска родителей: where object2=? and link_type='родитель-ребёнок'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 14:11 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
Это все конечно хорошо, но эта родственная связь важна для вывода в выходные документы, и как потом понмать кто кому кем приходится? может тогда два поля ввести кто первый второму и кто второй первому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 14:56 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
PG81как ... понмать кто кому кем приходится?уточните, какие проблемы видите? PG81может тогда два поля ввести кто первый второму и кто второй первомуэто и определяется типом связи. например в строке с link_type='родитель-ребёнок' значение object1 - родитель, object2 - ребёнок. (связь 'родитель-ребёнок' направленная.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 15:26 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
PG81Есть таблица Rodnya(kod_chela, kod_rodstv, kod_step_rodsva) где kod_chela - код человека kod_rodstv - код человека - родственника kod_step_rodsva - степень родства Мне унжно написать тригер, такой что при добавлении одному человеку родственника только (мать, отец, сын, дочь, жена, муж, брат сестра), у родственника бы появлялся этот человек с соответствующей обратной степенью родства и + у родственнкиа появлялись бы все те родственники что у первого и у первого родственники второго. Впринципе на клиенте я это реализовал, и все нормально работает. Но подумал что в БД будет лучше. Тригер нужно на Update и на Insert. Так вставка же будет происходить в одну и ту же таблицу. Как отключить срабатывание этого триггера на вставку когда я буду вставлять новые записи в теле функции триггера, чтобы не возникало зацикливаний? присоединяюсь к LeXa NalBat более того, если 2 перца - дети мистера Х и миссис Y, то они ,безусловно, братья. т.е. всё что вы рисуете через "kod_step_rodsva" - это надо бы забыть как дурной сон. Ибо "степень родства" есть просто полностью определённая (иногда многозначная) ф-я от предков 1-го уровня (предков 1-го уровня ровно 2 штуки нынче, если не учитывать клонирование и генную инженерию). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:28 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
assaИбо "степень родства" есть просто полностью определённая (иногда многозначная) ф-я от предков 1-го уровня (предков 1-го уровня ровно 2 штуки нынче, если не учитывать клонирование и генную инженерию).- кровное родство - с точностью до рекурсии. (по поколениям). некровное (свояки, зятья/невестки свёкры/тёщи и т.п.) - зависимость от брака. т.е. я бы предложил сущность "брак" (в т.ч. гражданский, разовый и т.п. - т.е. "биологическая пара") и определял бы детей от брака (а не от отдельно папы и отдельно мамы). тогда все степени родства (и кровные и некровные) считались бы через связи типа "дети" от сущностей типа "брак". В зависимости от количества путей по графу между 2-мя людьми имеем и количество значений ф-ии "родство". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:37 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
да, забыл еще один момент. взаимоотношения нечеткой природы моно таки учитывать вашей таблицей связей. А мименно - друзей, знакомых, одноклассников и ... приёмных детей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:40 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
не, у родственников столько связей возможных, что без "тип связи" точно никуда не уедешь, придется этот дурной сон реализовывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 18:38 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
На самом деле суть вопроса абстрагируясь от родства вот в чем: после вставки записи в таблицу записи стработает триггер. В триггере я определяю что мне нужно сделать и начинаю вставлять опять же в жту таблицу новые записи и так как происходит вставка опять будет срабатывать триггер.Как сделать так чтобы тригер на вставляемые записи из триггера не срабатывал. Вот хотелосьбы получить ответ на этот вопрос, для начала, так как времени не осталось так что я буду делать так как уже решил, а потом уже, когда будем делать следующую версию, если найду получше вариан, то реализую его. А этот вариант я уже сделал, но добавление происходит на клиенте и все работает, но я решил сделать триггером, так думаю будетлучше. Ну а пока конечно порассуждать мне интересно как можно сделать это эффективней. В таблице по идее должны быть только близкие родственники. Я уже писал (мать, отец, сын, дочь, жена, муж, брат, сестра)но пользователь может добавить и еще кого угодно, но по ним отслеживать , кто кому кем приходится и добавлять я не собираюсь, так как слишком сложные зависимости получаются и нужно будт запрашивать у пользователя дополнительные данные чтобы все правильно расставить. LeXa NalBat я имел ввиду что из предложенной вами схемы мне не совсем понятно как определеить кто кому кем приходится из выше перечисленных степеней родства. Вобщем толком не понял ваш принцип если честно. Еще один важный аспект, одно дело хранить такую структуру в БД, может и можно все отуда вытащить, но другое дело как реализовать интерфес для пользователя чтобы ему было понятно, кто кем приходится. Пользователи у нас понимаетели клавиатуры боятся не то чтобы понять связь ,что означет ребенок - родитель. Вот объясните на пальцах, например, есть 4 человека 1-А М 2-B Ж 3-C М 4-D Ж, где A и B муж и жена, а C и D их дети Как будет заполнена таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2010, 23:50 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
PG81, ищем, читаем доку по custom_variable_classes в триггере делам что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2010, 00:35 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
p.s. дальше заголовка темы не читал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2010, 01:08 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
V&N, О благодарю, то что надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2010, 15:55 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
PG81Вот объясните на пальцах, например, есть 4 человека 1-А М 2-B Ж 3-C М 4-D Ж, где A и B муж и жена, а C и D их дети Как будет заполнена таблица.person (id,name,sex) 1,'A','муж' 2,'B','жен' 3,'C','муж' 4,'D','жен' relation (person_id_1,person_id_2,link_type) 1,2,'брак' 1,3,'родитель' 1,4,'родитель' 2,3,'родитель' 2,4,'родитель' например найти (родного!) отца для C: Код: plaintext 1. 2. 3. например найти (родных!) братьев и сестёр для C: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 17:18 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat, Не дай Бог разрешат однополые браки ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2010, 17:56 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
Gold_, Несомненно последние два топега станут украшением ibash' а... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2011, 20:02 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
--отключение всех триггеров SET session_replication_role = replica; SET session_replication_role = default; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 08:08 |
|
||
|
Как отключить тригеру самого себя во время его выполнения
|
|||
|---|---|---|---|
|
#18+
PG81--отключение всех триггеров SET session_replication_role = replica; SET session_replication_role = default; это в корне неверное утверждение если только не делать оговорку об "обычности" триггеров. и "как правило" у меня половина, если не больше , триггеров отрабатывают с ролью replica тоже -- по приходу данных с ноды данных в "olap"-центр. я их специально так писал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 09:01 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=36708158&tid=1998065]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
170ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 460ms |

| 0 / 0 |
