powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Nullable Unique
8 сообщений из 8, страница 1 из 1
Nullable Unique
    #39940372
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего я не понимаю?

ДокументацияДубликаты значения NULL допускаются в соответствии со стандартом SQL-99 (в том числе и в многосегментном индексе).
DDL
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE TEST (
    A     DM_FK NOT NULL /* DM_FK = INTEGER */,
    B     DM_FK /* DM_FK = INTEGER */
);

ALTER TABLE TEST ADD CONSTRAINT UNQ_TEST1 UNIQUE (A, B);


DML
Код: sql
1.
2.
INSERT INTO test(a, b) VALUES (1, NULL);
INSERT INTO test(a, b) VALUES (1, NULL);



на втором INSERT ошибкаInvalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values.
violation of PRIMARY or UNIQUE KEY constraint "UNQ_TEST1" on table "TEST".
Problematic key value is ("A" = 1, "B" = NULL).
Вроде же не должно быть?

Версия сервераServer Version: WI-V3.0.5.33220 Firebird 3.0
Server Implementation: Firebird/Windows/AMD/Intel/x64
Service Version: 2

Ну и чтобы два раза не вставать, что обозначает эта фраза из документации?Уникальный индекс не является ограничением уникальности.

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Nullable Unique
    #39940373
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Ну и чтобы два раза не вставать, что обозначает эта фраза из документации?

на ограничение уникальности можно FK вешать, так же как на первичный ключ.
...
Рейтинг: 0 / 0
Nullable Unique
    #39940377
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Чего я не понимаю?
_Vasilisk_> на втором INSERT ошибка
_Vasilisk_> Вроде же не должно быть?

Различий же нет. Вот если бы было
Код: sql
1.
2.
INSERT INTO test(a, b, c) VALUES (1, NULL, NULL);
INSERT INTO test(a, b, c) VALUES (1, NULL, NULL);


и уникалка на последние 2 поля - прокатило бы.

P.S. А что за документ ты читаешь ?
...
Рейтинг: 0 / 0
Nullable Unique
    #39940378
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис_Vasilisk_ > Ну и чтобы два раза не вставать, что обозначает эта фраза из документации?

на ограничение уникальности можно FK вешать, так же как на первичный ключ.
Тогда это довольно куцо сформулировано.
Лично я бы в первую очередь подумал, что
констрейнт нельзя деактивировать, а индекс - можно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Nullable Unique
    #39940383
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
на ограничение уникальности можно FK вешать
Все. Увидел. То CONSTRAINT, а то INDEX. Больше отличий нет?

Гаджимурадов Рустам
Различий же нет. Вот если бы было
Так вроде же NULL не равен ничему. Т.е. как бы (1, NULL) <> (1, NULL)?

На самом деле это именно то поведение, которое мне нужно, но уж больно неожиданное. Почему два NULL поля уже не равны друг другу, а одно равно?

Гаджимурадов Рустам
P.S. А что за документ ты читаешь ?
Этот http://www.ibase.ru/files/firebird/Firebird_3_0_Language_Reference_RUS.pdf
...
Рейтинг: 0 / 0
Nullable Unique
    #39940386
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
Вроде же не должно быть?
Должно. Матчасть нужно знать лучше :)

https://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-ddl-tbl.html#fblangref25-ddl-tbl-constraints

См NULL in Unique Keys
...
Рейтинг: 0 / 0
Nullable Unique
    #39940388
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

оно и в русской версии так написано как привёл Влад.
Единственное что подробно расписано для ограничения уникальности, а не для уникального индекса. Это я поправлю.
...
Рейтинг: 0 / 0
Nullable Unique
    #39940392
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_> Так вроде же NULL не равен ничему. Т.е. как бы (1, NULL) <> (1, NULL)?

Нет, считай, что NULL как бы игнорируются
целиком (и рассматриваются оставшиеся поля).

> Почему два NULL поля уже не равны друг другу, а одно равно?

Не понял вопроса. Если ты про мой пример -
потому что в твоём примере есть совпадающее
второе поле, а в моём оно NULL (т.е. не равно).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Nullable Unique
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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