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

Код: 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
28.06.2003, 17:39
    #32194312
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
Кажись это невозможно не в аксесе хп, а в принципе (в классической теории реляционных баз данных)
...
Рейтинг: 0 / 0
28.06.2003, 17:56
    #32194319
cab
cab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
Вот что написано в справке 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
28.06.2003, 17:59
    #32194321
cab
cab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
И еще. Когда я портирую таблицы в MS SQL 2000, то получаю сообщение о дублировании записей. Получается что в MS SQL 2000 поля, содержащие Null успешно индексируются? Замечу, что я не знаток MS SQL 2000.
...
Рейтинг: 0 / 0
28.06.2003, 18:09
    #32194325
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
Пропуск пустых полей - это пропуск пустых полей. А уникальность - это уникальность. Не надо путать широкое с зеленым.
Пропуск пустых полей (да/нет) - просто указывает Jet'у, включать ли записи с Null в индекс (для ускорения выборки с условием Is Null), или нет (для уменьшения размера индекса).
Уникальность для поля, содержащего Null - как ты себе это представляешь? Если a = Null, b = Null, то (a=b)=Null, а никак не True. Поэтому никакие условия на уникальность не нарушаются. Нет у тебя в таблице записей, в которых индексированные поля совпадали бы с другой.
...
Рейтинг: 0 / 0
28.06.2003, 18:16
    #32194329
cab
cab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
Не совсем понятно, но верю.
...
Рейтинг: 0 / 0
28.06.2003, 18:25
    #32194333
cab
cab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать уникальный индекс при наличии Null
А тогда такой вопрос:

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

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

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

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

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

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

2 Нуф:

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


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