Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

Скорость поиска   Найти похожие ветки 

 
VadimSpb   (2007-03-06 12:14) [0]

Добрый день!
Перед вводом записи в БД проверяю ее на уникальность. Какой метод будет работать быстрее: Locate или запрос на выборку?


 
Ega23 ©   (2007-03-06 12:28) [1]

Зависит от множества факторов.
Лично я предпочитаю второе.


 
sniknik ©   (2007-03-06 12:43) [2]

проверкой на уникальность должен заниматься сервер, при или непосредственно перед вставкой... иначе прога будет лишена "высокого звания многопользовательской..." ;о))

ни один из приведенных способов не отвечает этому требованию (про локейт по локальному рекордсету (который может час назад получен) и говорить нечего, а решение о уникальности/нет на клиенте с помощью запроса может быть "испорчено" вставкой аналогичного значения "в момент действий по решению" другим клиентом (ну вот 2 одновременно послали запрос на выборку одного и тогоже...))


 
Ega23 ©   (2007-03-06 12:47) [3]


> а решение о уникальности/нет на клиенте с помощью запроса
> может быть "испорчено" вставкой аналогичного значения "в
> момент действий по решению" другим клиентом (ну вот 2 одновременно
> послали запрос на выборку одного и тогоже...))
>


Когда проверка идёт в рамках SP? Да ладно...


 
sniknik ©   (2007-03-06 13:09) [4]

> Когда проверка идёт в рамках SP? Да ладно...
в процедуре это уже можно говорить о принятии решении о уникальности на сервере.

в вопросе о процедурах ни слова, лиш о запросе. т.е. смею предположить речь шла о такой схеме - клиент делает запрос с условием и анализирует ответ, если выборка чтото вернула значит такие значения есть, посылать повторно то же значение нельзя, если же выборка пустая то выполняется (может предварительно еще и формируется) запрос на вставку...
так в общем, хотя могут быть вариации (счас автор "проснется", скажет).


 
VadimSpb   (2007-03-06 13:43) [5]

Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с буквами. Если бы требовались только цифровые значения, можно было использовать ключевое поле.


 
Sergey13 ©   (2007-03-06 13:46) [6]

> [5] VadimSpb   (06.03.07 13:43)
Как это все друг с другом связано?
В огороде бузина, а в Киеве дядька.


 
Ega23 ©   (2007-03-06 13:46) [7]


> Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с
> буквами. Если бы требовались только цифровые значения, можно
> было использовать ключевое поле.


А почему нельзя рядом тупо Identity-поле положить, назначить ключевым его? А на номер счёта - тупо unique-индекс наложить?


 
sniknik ©   (2007-03-06 13:59) [8]

> Речь идет о "Лицевом счете". Он д.б. уникальным и м.б. с буквами.
вообще ожидалось не инфа по тому что ты делаешь(хотя тоже полезно), а инфа о том как ты это делаеш... разница однако.

> Если бы требовались только цифровые значения, можно было использовать ключевое поле.
ты чтото путаешь, ключевое поле с автоинкрементом и ключ с уникальностью.
совершенно неважно есть или нет буквы в значениях поля для назначения его ключем... и тебе не нужен ключ по этому полю чтобы сделать его уникальным (уникальность ключа это всеголишь одно из его свойств, которое есть и отдельно. индекса с уникальностью достаточно)


 
VadimSpb   (2007-03-06 14:06) [9]


> а инфа о том как ты это делаеш...

Пока сделал выборкой. Поле nvarchar(50). Сервер не позволяет его сделать уникальным.


 
Ega23 ©   (2007-03-06 14:10) [10]

зачем nvarchar? Почему не varchar? Ты с юникодом работаешь?


 
VadimSpb   (2007-03-06 14:16) [11]


> Почему не varchar?

Не принципиально.


 
Ega23 ©   (2007-03-06 14:17) [12]


> Не принципиально.
>


Отнюдь.


 
VadimSpb   (2007-03-06 14:19) [13]


> sniknik ©   (06.03.07 13:59) [8]

Согласен :-)) Так как лучше сделать данное поле?


 
Ega23 ©   (2007-03-06 14:25) [14]


> Согласен :-)) Так как лучше сделать данное поле?


Данное поле лучше:
1) Убрать ключ с nvarchar
2) Рядом положить ключевое поле int (identity или нет - не принципиально)
3) Поменять nvarchar на varchar
4) Наложить на поле уникальный индекс
5) Всё обернуть хранимой процедурой и все проверки делать уже в ней


 
VadimSpb   (2007-03-07 11:34) [15]

Решил просто.
ALTER TABLE TableName ADD CONSTRAINT UQ_FieldName UNIQUE (FieldName)


 
Ega23 (home)   (2007-03-07 11:39) [16]

Ну до 3-й нормальной формы всё равно не дотянул...   :)


 
Johnmen ©   (2007-03-07 20:24) [17]


> Ega23 (home)   (07.03.07 11:39) [16]

Он таких букаф не знает, ибо не в курсе основ теории построения баз данных. Что печальною. Но, как обычно...


 
MsGuns ©   (2007-03-07 20:58) [18]

Гадали восемь поросят
С какой приправой их едят ;)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.04 c
3-1173052260
Ш-К
2007-03-05 02:51
2007.05.27
Вставка записи при уникальном индексе.


15-1177681245
Kolan
2007-04-27 17:40
2007.05.27
Unified Process, кто использует?


15-1177827660
iZEN
2007-04-29 10:21
2007.05.27
Вышла первая часть книги Lazarus Delphi-кросс-платформенный.


2-1178455647
pest_tt
2007-05-06 16:47
2007.05.27
вызов функции stdcall


15-1177489164
db2admin
2007-04-25 12:19
2007.05.27
Это не обьявление войны это пропоганда, зачем?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский