|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Есть домен Код: sql 1. 2. 3. 4. 5.
и табля Код: sql 1. 2. 3. 4. 5. 6.
Нужно реализовать на триггере: для всех ID у одного FK_PEOPLE сделать MAIN_CONTACT = 0, если у одному из них делается MAIN_CONTACT = 1 1. где реализовать, в Before Insert/Update? 2. как? был бы благодарен за пример или пинок в нужном направлении ================= Док. Win10 Ultim x64/Deb 10 amd64/Darwin Cocoa: FB 3.0.7.33374, Lazarus 2.3.0(trunk); FPC 3.3.1(trunk) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 11:15 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, 1. Лучше в after 2. что-то вроде того Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
З.Ы. я не люблю такие триггеры ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 11:24 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, чего сложного? В After Update типа такого: Код: sql 1. 2. 3. 4.
Подводных камней не вижу. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 11:35 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Гуд. Спасибо за примеры. Чуть позже опробую и отпишусь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 12:01 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, я бы сделал иначе - создал ещё одну таблицу MAIN_PHONE с полями PEOPLE_ID (PK и FK к PEOPLES) и PHONE_ID (FK к TBL_PHONE). Потом создал бы VIEW на TBL_PHONE с LEFT JOIN к MAIN_PHONE по PEOPLE_ID и с вычисляемым полем BOOL на MAIN_PHONE.PHONE_ID IS NOT NULL. Не пришлось бы возиться с триггером. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 12:29 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
rdb_dev, ага, вместо одного триггера две таблицы? Оккама плачет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 19:44 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Вобщем, сделал так: Код: sql 1. 2. 3. 4. 5. 6.
Причем, работает как в before , так и в after insert/update Еще раз спасибо за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 20:13 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, если у тебя есть поле FK_PEOPLE - значит, у тебя есть табличка PEOPLE. Во в ней и размести ссылку на майн контакт. И триггеров не понадобится. И выборку делать проще будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 20:34 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
ДокПричем, работает как в before, так и в after insert/update ну, делать триггер before, в котором update, это как-то нелогично. А в after самое то. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 22:17 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док Вобщем, сделал так: ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 22:37 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
hvlad, С виду опасностей не вижу... ъъъъъ Во в ней и размести ссылку на майн контакт. КМК, не подойдет. В моем понимании, реализовывать консистентность логики и данных надо на уровне сервера, а не клиента. Если я правильно тебя понял, я должен закольцевать таблички. Тогда при изменении MAIN_CONTACT я еще должен буду в TBL_PEOPLE менять ФК на TBL_PHONE.ID той записи, которая теперь является основным контактом. А это еще триггер. Circulus viciosus получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 22:51 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док hvlad, С виду опасностей не вижу... ъъъъъ Во в ней и размести ссылку на майн контакт. КМК, не подойдет. В моем понимании, реализовывать консистентность логики и данных надо на уровне сервера, а не клиента. Если я правильно тебя понял, я должен закольцевать таблички. Тогда при изменении MAIN_CONTACT я еще должен буду в TBL_PEOPLE менять ФК на TBL_PHONE.ID той записи, которая теперь является основным контактом. А это еще триггер. Circulus viciosus получается. Как раз наоборот, логика из императивной становится декларативной, в итоге отпадает необходимость в триггерах вообще. Поле MAIN_CONTACT таблички TBL_PHONE становится ненужным. Для назначения "главной записи" меняется значение ссылки в табличке PEOPLE, вот и всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 23:05 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
ъъъъъ, изящно. Только мне на клиенте нужно отображать ВСЕ имеющиеся на данный момент у человека телефоны, из которых один является основным :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2021, 23:19 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док Только мне на клиенте нужно отображать ВСЕ имеющиеся на данный момент у человека телефоны, из которых один является основным :) Ну вот, смотри. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 00:44 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Добавляем данные: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Т.е., у Иванова главный телефон это 222-22-2222-22, у Петрова - 444-44-4444-44, а у Васильева - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 00:46 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Добавим констреинтов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Составной ключ в констреинте для того, чтобы пиплу не назначили главным чужой номер. Если бизнеслогика этого не требует - составной ключ не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 00:47 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Список всех пиплов, с их основными номерами: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 00:49 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, И, наконец, Док мне на клиенте нужно отображать ВСЕ имеющиеся на данный момент у человека телефоны, из которых один является основным :) - Код: sql 1. 2. 3. 4.
Например, для :PEOPLE_ID равным 1, результат: ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 00:56 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док С виду опасностей не вижу... Причём делает он это после любого апдейта "главной" записи, даже если MAIN_CONTACT не менялось. PS способ 22381418 гораздо лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 11:38 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
ъъъъъ, Понял. Тоже вариант, конечно. Спасибо. hvlad Твой триггер апдейтит все записи (кроме текущей) с таким же FK_PEOPLE - а достаточно только одной. Ага, вот ты о чем. Согласен, конечно, апдейтить ВСЕ записи телефонов одного ФК - не комильфо. С другой стороны, ну сколько телефонов м.б. у пациента в базе? Сервер и не заметит :) Способ Дениса универсальнее и правильнее (возьму на заметку "в целях повышения общей образованности" ©), а способ KreatorXXI - в моем случае практичнее, КМК. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 12:01 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док, кто я такой, чтобы учить доктора соблюдать гигиену и не применять кривые методы лечения ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 14:19 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
hvlad, Влад, я не спорю. Просто до меня иногда долго доходит :) А так кошерно будет? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Вроде работает (и на вставку и на апдейт) и обновляет только те записи, которые надо изменить ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2021, 17:01 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Вот лентяй... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2021, 00:07 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док А так кошерно будет? Учтёшь вторую - получится триггер как у Дениса. И нужно ещё что-то делать с удалениями, или не нужно - тут тебе виднее. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2021, 00:24 |
|
Нужна помощь с написанием триггера
|
|||
---|---|---|---|
#18+
Док rdb_dev, ага, вместо одного триггера две таблицы? Оккама плачет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2021, 09:03 |
|
|
start [/forum/topic.php?fid=40&msg=40103169&tid=1559912]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 169ms |
0 / 0 |