|
|
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Я создал уникальный индекс, из следующих полей: Код: plaintext 1. 2. 3. 4. Я создал две строки и не получил сообщения о нарушении уникальности. Как видите, одно поле содержат значения Null. Код: plaintext 1. 2. А если я делаю так, Код: plaintext 1. 2. То получаю сообщение о нарушении уникальности, что мне и нужно. Что нужно сделать, чтобы обеспечить уникальность записей при отсутствии значения (Значение равно Null)в индексируемом поле? Или это невозможно в Access XP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 17:33 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Кажись это невозможно не в аксесе хп, а в принципе (в классической теории реляционных баз данных) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 17:39 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Вот что написано в справке Access XP ( красным цветом я выделил то что не совсем понятно) =============================================== Свойство «Пропуск пустых полей» (IgnoreNulls) Свойство Пропуск пустых полей (IgnoreNulls) определяет, следует ли включать в индекс поля, содержащие пустые (Null) значения в индексированных полях. Значение Свойство Пропуск пустых полей (IgnoreNulls) может иметь следующие значения. Значение Microsoft Visual Basic Описание Да True Записи, содержащие пустые (Null) значения в индексированных полях, не включаются в индекс. Нет False (Значение по умолчанию.) Записи, содержащие пустые (Null) значения в индексированных полях, включаются в индекс. Значение данного свойства задается в окне индексов таблицы в режиме конструктора или в программе Microsoft Visual Basic. Доступ к свойству индекса Пропуск пустых полей (IgnoreNulls) в программах Microsoft Visual Basic обеспечивает свойство IgnoreNulls объектов доступа к данным. Заметки Создание индекса для поля ускоряет выполнение поиска индексированных записей в этом поле таблицы. Если ожидается, что индексированное поле будет содержать много пустых (Null) значений, следует задать значение «Да» для свойства индекса Пропуск пустых полей (IgnoreNulls), тем самым уменьшив объем индекса. =============================================== Как это понимать в классической теории реляционных баз данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 17:56 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
И еще. Когда я портирую таблицы в MS SQL 2000, то получаю сообщение о дублировании записей. Получается что в MS SQL 2000 поля, содержащие Null успешно индексируются? Замечу, что я не знаток MS SQL 2000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 17:59 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Пропуск пустых полей - это пропуск пустых полей. А уникальность - это уникальность. Не надо путать широкое с зеленым. Пропуск пустых полей (да/нет) - просто указывает Jet'у, включать ли записи с Null в индекс (для ускорения выборки с условием Is Null), или нет (для уменьшения размера индекса). Уникальность для поля, содержащего Null - как ты себе это представляешь? Если a = Null, b = Null, то (a=b)=Null, а никак не True. Поэтому никакие условия на уникальность не нарушаются. Нет у тебя в таблице записей, в которых индексированные поля совпадали бы с другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 18:09 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, но верю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 18:16 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
А тогда такой вопрос: Если я не могу иметь уникальный индекс, то я осуществляю дополнительную проверку. Сейчас в событии формы BeforeUpdate я проверяю запросом наличие записи в базе данных. Если такой записи нет, то я вношу ее. Поскольку программа работает в сети, то все таки, как я понимаю, эти действия лучше делать в виде одной транзакции (проверка наличия записи, если нет то вставка записи)? И соответственно не совсем правильно работать только в событии BeforeUpdate , не используя при этом транзакцию добавления записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 18:25 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Короче, надо поменять IgnoreNulls с да на нет. Почему это нельзя считать ответом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:01 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
>Короче, надо поменять IgnoreNulls с да на нет. Почему это нельзя считать >ответом? Я задал значение IgnoreNulls как "нет". Но это не помогает. Получается что Null не используется в индексе и прав Лох Позорный (спасибо ему за чувство юмора:)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:07 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Может, надо создать таблицу заново? Или всю базу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:15 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Создал базу, затем таблицу, затем индекс. Не помогает. Значить не индексируются поля с Null. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:24 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Может, это какой-то глобальный параметр в опциях... Не-не, это я сам с собой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:34 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Если в таблице уникальный индекс из полей поле1, поле2, поле3, то при вставке новой записи ( ЗаписьНовая ) должно ругаться на повторяющиеся значения тогда и только тогда, когда существует такая запись ( ЗаписьСтарая ), что ЗаписьНовая.поле1=ЗаписьСтарая.поле1 И ЗаписьНовая.поле2=ЗаписьСтарая.поле2 И ЗаписьНовая.поле3=ЗаписьСтарая.поле3 Очевидно, что если хотя бы одно из полей в любой записи (новой или старой) есть Null, то условие не будет истинным ни при каких значениях остальных полей. Поэтому ругани на повторяющиеся значения быть и не должно. Все. Ушел пить вотку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:43 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Лох, я не знаю, застал ли я тебя до пития или после, но по-твоему получается, что параметр IgnoreNulls никогда ни на что не влияет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:46 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Повторяю, он влияет только на включение ссылок на записи (с нулом) в индекс. Или включаются (тогда быстрее ищет нуловые значения), или нет (тогда ищет медленнее, но индекс меньше места занимает). К проверке уникальности это не имеет никакого отношения. Кстати, чего вы привязались к составному индексу? Сделайте обычный индекс (из одного поля), уникальный, но не обязательный. И добавляйте туда сколько хотите записей с пустым значением. Это так, для примера. Все. Ой мароз, мароооз..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2003, 19:50 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Не марось миняя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:26 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Лох (слушай, а как тебя зовут?), это кончится тем, что я опять пришлю тебе ссылку на музыкальный форум... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:33 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Сан Саныч миня завут Ниии маррроооосьь миняяяя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:39 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
>Ниии маррроооосьь миняяяя Ниии маррроооосьь миняяяя //подпевает вторым голосом... мля... подскажите хороший антидеприсант... а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:40 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
2 Лох: Так это чего, мы с тобой рифмуемся??? 2 Нуф: А тебя как зовут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:43 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Харощий антидепресант - вотка. Толька сушняк вызывает (как и любой антидепресант) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:47 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Саныч, если не лениво, глянь мой имэйл - там и имя, и особая отметка через всю шею... Антидеприсант не подскажешь? Шобы без превыкания? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:48 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
Не, Лох, водка - плохо... Тааааакое превыкание вызывает! Кроме того, водка во время дипрессии - первый шаг к суициду, имхо... Таблетки есть какие-то... //вот автор топика обрадуется нашему задушевному разговору "на троих" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:51 |
|
||
|
Как сделать уникальный индекс при наличии Null
|
|||
|---|---|---|---|
|
#18+
ВАЙ НУФ в гости приезжай да? Антидепресант - не самое главное в этой жизни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2003, 00:51 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32194418&tid=1680835]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 308ms |

| 0 / 0 |
