|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Привет. Есть таблица: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Поле PARENT_ID может быть либо null, либо ссылаться на другую запись в рамках GROUP_ID, но не на саму себя. Накладываю ограничение: Код: sql 1. 2. 3. 4. 5. 6.
Добваляю данные: Код: sql 1. 2. 3. 4. 5. 6. 7.
При попытке изменить значение поля PARENT_ID на любое, кроме null, вызывает ругань на нарушение констрейнта CHK_T. Удаляю констрейнт CHK_T и добавляю его в виде FK и CHECK: Код: sql 1. 2. 3. 4. 5. 6.
В таком варианте ограничения работают правильно. Что не так в первом варианте CHK_T? С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 14:59 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
PolesovЧто не так в первом варианте CHK_T? Всё, начиная с самой сумасшедшей идеи запихнуть в ограничение запрос. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 15:08 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, т.е. с виду правильный запрос в рамках ограничения работает неправильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 15:13 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
PolesovDimitry Sibiryakov, т.е. с виду правильный запрос в рамках ограничения работает неправильно? Он неправильный. FK, PK и прочие индексы внетранзакционны в отличие от. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 15:17 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
pastor, понятно. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 15:23 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
PolesovНакладываю ограничение: за select в check constraint надо хотя бы на пару дней лишать еды. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 18:12 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Hello, Kdv! You wrote on 8 февраля 2017 г. 18:17:51: Kdv> за select в check constraint надо хотя бы на пару дней лишать еды. От полётов отстранить. Ста грамм не давать. Назначить дежурным, вечным дежурным по аэродрому! (c) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 18:18 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
А как же традиционное "линейкой по пальцам"? по идее должно давать эффект поскорее, хотя и выветривается, пожалуй, быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 18:24 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Hello, Ivan Pisarevsky! You wrote on 8 февраля 2017 г. 18:31:01: Ivan Pisarevsky> А как же традиционное "линейкой по пальцам"? по идее должно давать эффект поскорее, хотя и выветривается, пожалуй, быстрее.не будем ограничиваться полумерами! Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 18:31 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyА как же традиционное "линейкой по пальцам"? по идее должно давать эффект поскорее, хотя и выветривается, пожалуй, быстрее. Это смотря какая линейка. Видал я таких монстров, которые и за гильотину сойдут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2017, 18:53 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Апну тему. Все же вопрос был не в том, хорошо или плохо использовать запрос в check constraint, а почему в запросе не выполняется условие. Запрос в check такой: Код: sql 1. 2. 3. 4.
Попытка присвоения полю ITEM_ID любого значения, отличного от null и удовлетворяющего условию ограничения, вызывает ошибку: Код: powershell 1. 2. 3.
Такое впечатление, что в условии where запроса Код: sql 1. 2.
значения GROUP_ID и ITEM_ID берутся из контекста самого запроса, а не из контекста текущей записи. С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2017, 11:32 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
PolesovВсе же вопрос был не в том, хорошо или плохо использовать запрос в check constraintне хорошо или плохо, а нельзя. Polesovзначения GROUP_ID и ITEM_ID берутся из контекста самого запросаразумеется. используй триггер и его контекстные переменные old/new ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2017, 11:40 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Ivan_Pisarevsky, ограничение нормально реализуется через FK и CHECK Код: sql 1. 2. 3. 4. 5. 6.
С запросом в CHECK CONSTRAINT теперь понятно, только в документации я про это ничего не нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2017, 11:47 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Гипотетический случай. Требуется в некой таблице хранить идентификаторы и имена системных типов. Наложить FK на таблицу RDB$TYPES нельзя, поэтому: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
В таком варианте ограничение работает правильно. Изменим имена полей так, что бы они совпадали с именами системной таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
В таком варианте ограничение перестает работает. Получается, что при совпадении имени поля его значение берется из контекста запроса, а не текущей записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2017, 12:12 |
|
Непонятки с check constraint
|
|||
---|---|---|---|
#18+
Апну тему. PolesovПолучается, что при совпадении имени поля его значение берется из контекста запроса, а не текущей записи. В таких случаях надо явно указывать имя таблицы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2017, 20:23 |
|
|
start [/forum/topic.php?fid=40&fpage=41&tid=1561413]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 164ms |
0 / 0 |