Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
Есть таблица в БД:
Поле - идентификатор - Primary Key.
Данные допустим:
ХХ00000000УУУ
ХХ00000001УУУ
ХХ00000002УУУ
ХХ00000003УУУ
...

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

00000000
00000001
00000002
00000003
...

При чем возвращаем обработанную продукцию мы с номерами по первому варианту.
То есть, например, вначале продукция идентифицируется по ХХ00000000УУУ - далее по 00000000 - 00000000 - ХХ00000000УУУ - ХХ00000000УУУ... и так в какой угодно последовательности.

Во время прохождения цикла обработки товара - меняется выходит идентификатор, то есть в разное время может использоваться либо полная, либо урезанная версия, при чем не известно когда.

Вижу два варианта изменения УЖЕ НАПИСАННОЙ ПРОГРАММЫ:
1) Переписывать все запросы программы и обращения к данной таблице, чтобы в случае когда поле/диапазон не будет найдено в БД, мы посылали аналогичный запрос, только отбросив от полей таблицы ХХ и УУУ. Сравниваем только середину.
2) Перехватывать все запросы к таблице в БД и каким-то образом подменять идентификатор в зависимости от того, найдено ли поле в БД.


Подскажите пожалуйста как можно это эффективнее и быстрее реализовать. Возможны варианты с добавлением доп полей в таблицу и т.п.
30 ноя 09, 18:34    [7998612]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
iljy
Member

Откуда:
Сообщений: 8711
New_Frozen,

проще всего - всегда превращать идентификатор на клиенте в какой-нибудь один вид. Тогда не будет проблем с индексами и т.п. Как альтернатива - держать 2 поля в таблице, и тот и другой варианты. Какие запросы чаще всего используются для поиска данных?
30 ноя 09, 18:50    [7998650]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
iljy,

Нам ПРИХОДЯТ разные ИД, на коробках - один тип допустим (там указывается диапазон номеров продукции в ящике), а на карточках - совсем другой.

Программа уже написана. Только вот возник только сейчас вопрос о том, что данные могут прийти в таком виде. Запросы на Select and Update. Количество различных запросов больше пятидесяти наверно. + программа работает как с компа, так и с Терминала Сбора Данных, то есть грубо говоря - две программы. В каждой из которых прийдется куча чего поменять.
30 ноя 09, 19:02    [7998682]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
iljy
Member

Откуда:
Сообщений: 8711
New_Frozen,

как эти типы с карточек и коробок попадают в базу? Вот на ввод и поставьте проверку и изменение. Или напишите триггер, который будет в базе проверять введенные значения и приводить к одному виду.
30 ноя 09, 19:07    [7998699]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
iljy,

В базе подгружены необрезанные поля. А определить надо автоматически. Раньше определялось на глаз :) Ввести в базу не проблема два столбца - обрезанный и нет. Но прийдется переписать значительные объемы кода программы. А как вот триггер написать я даже не представляю.

Появилась мысля использовать поиск в строке, то есть найти подстроку в поле БД. Эти подстроки - уникальные, поэтому возможно...
А если строка = подстроке, то тоже отработает... только вот наверно будет значительно медленнее выполняться запросы.
30 ноя 09, 23:10    [7999303]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
iljy
Member

Откуда:
Сообщений: 8711
New_Frozen
iljy,

В базе подгружены необрезанные поля. А определить надо автоматически. Раньше определялось на глаз :) Ввести в базу не проблема два столбца - обрезанный и нет. Но прийдется переписать значительные объемы кода программы. А как вот триггер написать я даже не представляю.

Появилась мысля использовать поиск в строке, то есть найти подстроку в поле БД. Эти подстроки - уникальные, поэтому возможно...
А если строка = подстроке, то тоже отработает... только вот наверно будет значительно медленнее выполняться запросы.

не просто значительно, а весьма. раз подстроки уникальны - выберите способ хранения данных в базе, приведите к нему все существующие данные (это делается одним UPDATE, только индексы поотключайте на таблице кроме кластерного) и напишите триггер на вставку новых (CREATE TRIGGER...). При поиске соответственно так же приводите все данные к одному виду.
1 дек 09, 00:02    [7999432]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
iljy,

Данные приведены к виду:
ХХ00000000УУУ
ХХ00000001УУУ
ХХ00000002УУУ
ХХ00000003УУУ

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

Неужели поиск подстроки настолько трудоемкий процесс?

Размер таблицы максимум 400 000.
1 дек 09, 13:34    [8002160]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
iljy
Member

Откуда:
Сообщений: 8711
New_Frozen,

а проверить слабо? запустите 2 запроса
select * from Table
where id = 'ХХ00000000УУУ'

select * from Table
where id like '%' + '00000000' + '%'
и посмотрите на время. А что, написать функцию, которая будет получать строку, проверять длинну и если надо - добавлять символы в начале и в конце - такая проблема?
1 дек 09, 13:40    [8002213]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
iljy
New_Frozen,

и посмотрите на время. А что, написать функцию, которая будет получать строку, проверять длину и если надо - добавлять символы в начале и в конце - такая проблема?


а какие символы добавлять?
они то разные для каждой записи... их не вычислишь...
1 дек 09, 13:56    [8002385]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
iljy
Member

Откуда:
Сообщений: 8711
New_Frozen

а какие символы добавлять?
они то разные для каждой записи... их не вычислишь...

кхм... забавная у вас система а они вам вообще нужны? Вы говорите подстроки уникальны - так храните в ключевом поле их (0000001 только), а полные строки если нужны - храните в отдельном (не индексированном) поле справочно.
1 дек 09, 14:15    [8002563]     Ответить | Цитировать Сообщить модератору
 Re: Поле-идентификатор.  [new]
New_Frozen
Member

Откуда: Киев
Сообщений: 223
iljy

кхм... забавная у вас система а они вам вообще нужны? Вы говорите подстроки уникальны - так храните в ключевом поле их (0000001 только), а полные строки если нужны - храните в отдельном (не индексированном) поле справочно.


Да уж забавная, учитывая что программа написана...
В общем буду пробовать подстроку...
1 дек 09, 14:17    [8002585]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить