Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.038 c
2-1178599022
rozik
2007-05-08 08:37
2007.05.27
CheckBox в StringGrid


8-1158148694
АМД134
2006-09-13 15:58
2007.05.27
Смена имен списка мр3


15-1177900456
ctudent
2007-04-30 06:34
2007.05.27
WoW


3-1173439204
Silver...
2007-03-09 14:20
2007.05.27
Как определить запись перед/над которой отпускаю Drop в DBGrid-e


15-1177508337
начинающий
2007-04-25 17:38
2007.05.27
Дауншифтинг