Доброго времени суток!
Ded wrote:
Без крайней необходимости лучше, конечно, PK. Но бывают случаи, когда PK летит. И появляются дубликаты. Иного способа борьбы с ними, кроме как через дбкей, я лично не знаю.
Наверное, можно и более экзотическим образом - грохнуть PK, в процедуре отсортировать по ID, и через WHERE CURRENT OF удалить дубликаты. Кстати, Current Of именно через него и
работает.
Не совсем так. Цитата из http://www.ibase.ru/devinfo/dataaccesspaths.htm
Существует ошибочное мнение, что данный метод доступа является синтаксическим аналогом выборки с помощью RDB$DB_KEY, однако это не так. Позиционированный доступ работает только для активного курсора, т.е. для уже отфетченной записи (с помощью команд FOR SELECT или FETCH). В противном случае будет выдана ошибка isc_no_cur_rec (no current record for fetch operation). Таким образом, это просто способ ссылки на активную запись курсора, не требующий операций чтения вообще. В то время как выборка через RDB$DB_KEY задействует доступ через идентификатор записи и, следовательно, всегда приводит к фетчу одной страницы.
С уважением, Евгений.

