|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Привет всем. Есть родительская таблица DADDY в которой определен UNIQUE по 2-м полям, одно из которых null-able. Есть дочерняя таблица CHILD в которой по 2-м полям определен FOREIGN KEY на UNIQUE таблицы DADDY. Вставка записи в таблицу CHILD со значениями FK, которые отсутствуют в таблице DADDY проходит без ошибок. Это так и должно быть? Вот скрипт: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
С уважением, Polesov. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:06 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Polesov, содержимое таблицы DADDY какое. Она совсем пуста или там что-то есть? З.Ы. И чего только народ не придумает ... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:10 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Симонов Денис, таблица DADDY пустая ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:11 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 5 апреля 2016 г. 12:15:26: Симонов Денис> И чего только народ не придумает .. долбишь им, долбишь 18950358 нихрена не внемлют. папуасы, мля. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:17 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
У меня ощущение, что это и в документации есть: с null можешь их вставлять сколько хочешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:19 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
wadman, я сомневаюсь, что это правильно. Если было одно nullable поле понятно, а тут составной ключ, а в нём нюансы есть. Например сам unique допускает в данном случае (1, null), (2, null) и так далее. Но вот как это должно работать в FK хз. Автор сего ограничения обладает весьма извращённой фантазией. Что он хочет от такого ключа? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:27 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Симонов ДенисАвтор сего ограничения обладает весьма извращённой фантазией. Что он хочет от такого ключа? Автор хочет понять, это нормальное поведение для такого FK или ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:31 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
виктор михалыч, не мелочись - пиши сразу UDF для этого случая. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:35 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Polesov, я не знаю. Возможно что и правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:39 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Симонов ДенисВозможно что и правильно Если правильно, то будет использована другая схема FK (менее подходящая, надо сказать). А если нет, то возможно будет исправлена еще одна ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:42 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Polesov, я ожидал такого теста от Таблоида, ибо он может их делать просто так ради изврата, но чтобы кто-то придумал такой FK всерьёз для меня очень неожиданно. И всё же интересно откуда такая идея возникла. И как в этом случае предполагается соединять такие таблицы? Типа того Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 12:49 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Симонов ДенисИ всё же интересно откуда такая идея возникла. Все немного по другому - надо обрабатывать валидность внешних данных по значениям различных типов FK. При обработке такого типа FK из-за ошибки в алгоритме данные были записаны, что и породило тест-кейс из старт-топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:03 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Polesov, а я бы между последним ALTER TABLE и первым INSERT сделал бы commit, а еще лучше пере-коннект ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:19 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Arioch, я думаю у него и так по умолчанию включено AUTODDL ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:22 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
AriochPolesov, а я бы между последним ALTER TABLE и первым INSERT сделал бы commit, а еще лучше пере-коннект В жизни оно так и происходило - все FK были созданы сильно заранее до INSERT-а, и реконнектов было множество. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:23 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Тогда на мой личный вкус это баг http://www.firebirdsql.org/manual/nullguide-keys.html#nullguide-keys-fk Foreign key columns must always reference ... a primary key or a unique key То есть постулируется четкое отображение записей с каждым конкретным FK на PK/U constraint (сключая записи без родителя), соответственно должны работать и правила на частичный Null в этих constrants Но Even if NULLs are absolutely forbidden in the target key (for instance if the target is a PK), the foreign key column may still contain NULLs , unless this is prevented by additional constraints. Вот этот кусок, видимо, реализовали в смысле "хотя бы один нулл", а не "состоит из нуллов" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:28 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Кстати, в связи с Foreign key columns must always reference a column (or set of columns) that is a primary key or a unique key. A unique index on the referenced column(s) is not enough . кажется было бы логично и на уровне DDL выражать именно это самое. Цель (intention), а не реализацию. Целевой "key", а не толко произвольный список столбцов, который может быть совпадает с определением какого-нибудь констрейнта Polesov Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:33 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Arioch, я тебе более простой примерчик придумал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
подозреваю что у составного fk логика та же ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 13:41 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Симонов Денися тебе более простой примерчик придумал Это не "более простой" - это другой вообще. Это пример all-null, когда запись в явном виде выводится из под действия констрейнтов. Когда мы заявляем что мы не знаем значения данного аттрибутоа (простого или составного не важно) и не может поэтому его проверять. А у топик стартера есть значение аттрибута, просто в нём некоторые (но не все) поля null Это другой случай, его как раз в 2.0 правили в приложении к Unique Constraint но видимо забыли поправить для FK.... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 14:15 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Arioch, ладно подождём что скажут dimitr и hvlad. Надо бы ещё узнать что об этом думает стандарт. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 14:29 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Hello, Симонов Денис! You wrote on 5 апреля 2016 г. 14:43:38: Симонов Денис> ладно подождём что скажут dimitr и hvlad. Надо бы ещё узнать что об этом думает стандарт. обсуждалось лет 10 тому назад. но не на сруле, если не ошибаюсь. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 14:44 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
все по стандарту SQL:2011The choices for <match type> are MATCH SIMPLE, MATCH PARTIAL, and MATCH FULL; MATCH SIMPLE is the default . There is no semantic difference between these choices if there is only one referencing column (and, hence, only one referenced column). There is also no semantic difference if all referencing columns are not nullable. If there is more than one referencing column, at least one of which is nullable, and if no <ref- erencing period specification> is specified, then the various <match type>s have the following semantics: — MATCH SIMPLE: if at least one referencing column is null, then the row of the referencing table passes the constraint check . If all referencing columns are not null, then the row passes the constraint check if and only if there is a row of the referenced table that matches all the referencing columns. — MATCH PARTIAL: if all referencing columns are null, then the row of the referencing table passes the constraint check. If at least one referencing columns is not null, then the row passes the constraint check if and only if there is a row of the referenced table that matches all the non-null referencing columns. — MATCH FULL: if all referencing columns are null, then the row of the referencing table passes the constraint check. If all referencing columns are not null, then the row passes the constraint check if and only if there is a row of the referenced table that matches all the referencing columns. If some referencing column is null and another referencing column is nonnull, then the row of the referencing table violates the constraint check. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 14:52 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
Polesov, вот как оказалось это не баг. Если есть желание можешь пожелать предложение MATCH для FK в трекере. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 14:57 |
|
Непонятки с null-able FOREIGN KEY
|
|||
---|---|---|---|
#18+
dimitrвсе по стандарту Отлично - получилось так, что ошибки в алгоритме проверки валидности данных по FK нет :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2016, 15:40 |
|
|
start [/forum/topic.php?fid=40&fpage=62&tid=1562243]: |
0ms |
get settings: |
14ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
others: | 271ms |
total: | 428ms |
0 / 0 |