powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать уникальный индекс при наличии Null
25 сообщений из 47, страница 1 из 2
Как сделать уникальный индекс при наличии Null
    #32194308
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
Я создал уникальный индекс, из следующих полей:

Код: plaintext
1.
2.
3.
4.
ContainerId (Тип – Long,  обязательное поле)
CargoId (Тип – Long,  обязательное поле)
ParentId (Тип – Long,  допускается Null)
GeneralId (Тип – Long,  допускается Null)
DateOfLoad (Тип – Date, обязательное поле)


Я создал две строки и не получил сообщения о нарушении уникальности.
Как видите, одно поле содержат значения Null.


Код: plaintext
1.
2.
ContainerId	CargoId	GeneralId	  ParentId	DateOfLoad
 523 	              13 	 311 	     Null                 26 . 06 . 2003 
 523 	              13 	 311 	     Null	              26 . 06 . 2003 


А если я делаю так,


Код: plaintext
1.
2.
ContainerId	CargoId	GeneralId	  ParentId	DateOfLoad
 523 	              13 	 311 	      10 	              26 . 06 . 2003 
 523 	              13 	 311 	      10 	               26 . 06 . 2003 


То получаю сообщение о нарушении уникальности, что мне и нужно.


Что нужно сделать, чтобы обеспечить уникальность записей при отсутствии значения (Значение равно Null)в индексируемом поле? Или это невозможно в Access XP?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194312
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажись это невозможно не в аксесе хп, а в принципе (в классической теории реляционных баз данных)
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194319
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
Вот что написано в справке Access XP ( красным цветом я выделил то что не совсем понятно)

===============================================
Свойство «Пропуск пустых полей» (IgnoreNulls)
Свойство Пропуск пустых полей (IgnoreNulls) определяет, следует ли включать в индекс поля, содержащие пустые (Null) значения в индексированных полях.

Значение
Свойство Пропуск пустых полей (IgnoreNulls) может иметь следующие значения.

Значение Microsoft Visual Basic Описание
Да True Записи, содержащие пустые (Null) значения в индексированных полях, не включаются в индекс.
Нет False (Значение по умолчанию.) Записи, содержащие пустые (Null) значения в индексированных полях, включаются в индекс.

Значение данного свойства задается в окне индексов таблицы в режиме конструктора или в программе Microsoft Visual Basic.

Доступ к свойству индекса Пропуск пустых полей (IgnoreNulls) в программах Microsoft Visual Basic обеспечивает свойство IgnoreNulls объектов доступа к данным.

Заметки
Создание индекса для поля ускоряет выполнение поиска индексированных записей в этом поле таблицы. Если ожидается, что индексированное поле будет содержать много пустых (Null) значений, следует задать значение «Да» для свойства индекса Пропуск пустых полей (IgnoreNulls), тем самым уменьшив объем индекса.
===============================================


Как это понимать в классической теории реляционных баз данных?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194321
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
И еще. Когда я портирую таблицы в MS SQL 2000, то получаю сообщение о дублировании записей. Получается что в MS SQL 2000 поля, содержащие Null успешно индексируются? Замечу, что я не знаток MS SQL 2000.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194325
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пропуск пустых полей - это пропуск пустых полей. А уникальность - это уникальность. Не надо путать широкое с зеленым.
Пропуск пустых полей (да/нет) - просто указывает Jet'у, включать ли записи с Null в индекс (для ускорения выборки с условием Is Null), или нет (для уменьшения размера индекса).
Уникальность для поля, содержащего Null - как ты себе это представляешь? Если a = Null, b = Null, то (a=b)=Null, а никак не True. Поэтому никакие условия на уникальность не нарушаются. Нет у тебя в таблице записей, в которых индексированные поля совпадали бы с другой.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194329
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
Не совсем понятно, но верю.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194333
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
А тогда такой вопрос:

Если я не могу иметь уникальный индекс, то я осуществляю дополнительную проверку.

Сейчас в событии формы BeforeUpdate я проверяю запросом наличие записи в базе данных. Если такой записи нет, то я вношу ее.

Поскольку программа работает в сети, то все таки,
как я понимаю, эти действия лучше делать в виде одной транзакции (проверка наличия записи, если нет то вставка записи)?

И соответственно не совсем правильно работать только в событии BeforeUpdate , не используя при этом транзакцию добавления записи?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194341
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Короче, надо поменять IgnoreNulls с да на нет. Почему это нельзя считать ответом?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194342
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
>Короче, надо поменять IgnoreNulls с да на нет. Почему это нельзя считать >ответом?

Я задал значение IgnoreNulls как "нет". Но это не помогает. Получается что Null не используется в индексе и прав Лох Позорный (спасибо ему за чувство юмора:)?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194345
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Может, надо создать таблицу заново? Или всю базу...
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194349
cab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cab
Гость
Создал базу, затем таблицу, затем индекс.
Не помогает. Значить не индексируются поля с Null.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194354
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Может, это какой-то глобальный параметр в опциях... Не-не, это я сам с собой.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194359
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в таблице уникальный индекс из полей поле1, поле2, поле3, то при вставке новой записи ( ЗаписьНовая ) должно ругаться на повторяющиеся значения тогда и только тогда, когда существует такая запись ( ЗаписьСтарая ), что
ЗаписьНовая.поле1=ЗаписьСтарая.поле1 И ЗаписьНовая.поле2=ЗаписьСтарая.поле2 И ЗаписьНовая.поле3=ЗаписьСтарая.поле3
Очевидно, что если хотя бы одно из полей в любой записи (новой или старой) есть Null, то условие не будет истинным ни при каких значениях остальных полей. Поэтому ругани на повторяющиеся значения быть и не должно.
Все. Ушел пить вотку.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194360
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох, я не знаю, застал ли я тебя до пития или после, но по-твоему получается, что параметр IgnoreNulls никогда ни на что не влияет.
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194361
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю, он влияет только на включение ссылок на записи (с нулом) в индекс. Или включаются (тогда быстрее ищет нуловые значения), или нет (тогда ищет медленнее, но индекс меньше места занимает). К проверке уникальности это не имеет никакого отношения.
Кстати, чего вы привязались к составному индексу? Сделайте обычный индекс (из одного поля), уникальный, но не обязательный. И добавляйте туда сколько хотите записей с пустым значением. Это так, для примера.
Все.
Ой мароз, мароооз.....
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194404
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не марось миняя
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194406
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох (слушай, а как тебя зовут?), это кончится тем, что я опять пришлю тебе ссылку на музыкальный форум...
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194409
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сан Саныч миня завут
Ниии маррроооосьь миняяяя
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194410
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Ниии маррроооосьь миняяяя
Ниии маррроооосьь миняяяя //подпевает вторым голосом... мля... подскажите хороший антидеприсант... а?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194413
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Лох:

Так это чего, мы с тобой рифмуемся???

2 Нуф:

А тебя как зовут?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194414
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Харощий антидепресант - вотка. Толька сушняк вызывает (как и любой антидепресант)
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194415
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саныч, если не лениво, глянь мой имэйл - там и имя, и особая отметка через всю шею... Антидеприсант не подскажешь? Шобы без превыкания?
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194416
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, Лох, водка - плохо... Тааааакое превыкание вызывает! Кроме того, водка во время дипрессии - первый шаг к суициду, имхо... Таблетки есть какие-то... //вот автор топика обрадуется нашему задушевному разговору "на троих" :)
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194417
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВАЙ НУФ в гости приезжай да? Антидепресант - не самое главное в этой жизни
...
Рейтинг: 0 / 0
Как сделать уникальный индекс при наличии Null
    #32194418
Фотография Нуф-нуф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох... Район страны (мира) та хоть какой? А то ты вообще "мембер" какой-та беспреютный... :) Луче ты приезжай - я дачу почти достроил, там кайф...
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать уникальный индекс при наличии Null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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