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

Вниз

Скажите мастера можно ли такое реализовать? И если да то как?   Найти похожие ветки 

 
Relaxxx ©   (2003-08-30 12:12) [0]

У меня вот такая проблема. Есть поле в котором через запятую записаны номера заказов которые относятся к счету. Так вот, мне нужно зделать фильтрацию, например выбрать все счета где встречается заказ 111. Суть понятна? Вообще как реализовать эту фильтрацию?


 
a_andru   (2003-08-30 12:44) [1]

where name_pole like ("%111%")
пишешь это в запросе. Результат должен вернуть строки где встречаються 111


 
Zacho ©   (2003-08-30 12:49) [2]


> Relaxxx © (30.08.03 12:12)

Неправильно спроектирована БД. Прямое нарушение 1НФ - поле явно не атомарно. Лучше всего - перепроектировать базу.


 
Anatoly Podgoretsky ©   (2003-08-30 12:50) [3]

И 1112


 
Relaxxx ©   (2003-08-30 12:52) [4]

а скажите, используя like скорость сильно уменьшится?


 
Anatoly Podgoretsky ©   (2003-08-30 12:53) [5]

Сильно, но если надо быстро, то нужна другая структура базы


 
Relaxxx ©   (2003-08-30 12:57) [6]

реально ли использовать like если в таблице будет максимум 3000 строк, или при таком размере таблицы нужна все таки другая структура


 
Zacho ©   (2003-08-30 13:58) [7]


> Relaxxx © (30.08.03 12:57) [6]

Проверь - узнаешь.


 
VID ©   (2003-08-30 14:43) [8]

я в общем не знаю, как там дела у oracle но у yaffil (клон IB) проблем с LIKE нету: в тбд ~4500 записей, запрос строится по LIKE - ставнению по НЕСКОЛЬКИМ (где то 4-5) полям, и невидать никаких тормозов.
Думается всё таки что и для Oracle, великого и ужасного, это тоже не будет проблемой :)


 
MsGuns ©   (2003-08-31 18:10) [9]

>Zacho © (30.08.03 12:49) [2]
>> Relaxxx © (30.08.03 12:12)
>Неправильно спроектирована БД. Прямое нарушение 1НФ - поле явно не атомарно. Лучше всего - перепроектировать базу.

При всем уважении не согласен. Бывают ситуации, когда не смысла выводить каждый термин (в узерском понимании) в отдельное поле БД. Пример ? Доверенность к накладной. Там указываются данные паспорта и ФИО, а также иногда доп. информация, которая может фиксироваться или не фиксироваться. Например, № авто, № путевого, вес груза и т.д. - всего не предусмотришь. То же самое можно сказать по справочник контрагентов, раздел "информация о телефонах и ФИО администрации".

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


 
Krey   (2003-09-18 19:56) [10]

MsGuns >> которая может фиксироваться или не фиксироваться

Да но в данном случае по этому полю идет отбор. Соответственно база спроектирована неправильно


 
MsGuns ©   (2003-09-18 20:39) [11]

>Krey (18.09.03 19:56) [10]
>Да но в данном случае по этому полю идет отбор. Соответственно база спроектирована неправильно

Неверно. В смысле неверно считать все, по чему может делаться поиск, собственно сущностью БД (если допустить, что любое поле БД является сущностью). Опять же простой пример:
В БД фармацевтической фирмы есть справочник объектов "препараты" (аналог товаров) и требуется возможность хранения некоторой произвольной дополнительной информации о препарате (нужна для продавцов - не провизоров), в частности о режиме приема препарата или перечне заболеваний, при которых противопоказан. Да и много чего еще может быть в подобном "примечании" - на все "атомы" не заложишь. Ессно, для этих целей предусмотрен VARCHAR(4095) или вообще текстовый BLOB. Туда тетенька - спец заносит все дополнительную инфу, нужную другим тетенькам - не спецам, чтобы не травануть доверчивую бабульку - покупательницу.
Вот и надо бывает продавцу выбрать, к примеру, обезболивающий препарат (есть такой признак-атом в БД), который имеет, к примеру, пояснение: "... не имеет противопоказаний" и "..против зубной боли.."


 
Zacho ©   (2003-09-18 20:49) [12]


> MsGuns © (31.08.03 18:10) [9]


> MsGuns © (18.09.03 20:39) [11]

Насчет произвольной доп. информации - полностью согласен. Но в данном конкретном случае, все же неправильно спроектирована БД.
Номера заказов должны быть в отдельной таблице. А то еще и не только с поиском проблемы возникнут.


 
MsGuns ©   (2003-09-18 20:56) [13]

>Zacho © (18.09.03 20:49) [12]

Если заказы существуют в модели БД как объекты, т.е. есть соотв. таблицы, содержащие по ним инфу и т.д., тогда спору нет и я двумя руками за. А если нет ? Т.е. это просто тонкая ссылка на некоторые толстые обстоятельства ?


 
Zacho ©   (2003-09-18 21:09) [14]


> MsGuns © (18.09.03 20:56) [13]
> А если нет ? Т.е. это просто тонкая
> ссылка на некоторые толстые обстоятельства ?

Да даже если кроме номеров заказов в БД больше ничего по заказам не содержиться, то все равно при структуре, как у автора вопроса, могут возникнуть все возможные для ненормализованной (даже не в 1НФ !) таблицы аномалии.
Эх, жалко Дейта под рукой нет, а то какую-нибудь цитату бы привел :-)
Впрочем, все зависит от того, что именно с этими номерами заказов надо делать. Может, исходя из условий его задачи, это поле вполне можно считать атомарным.


 
hCat   (2003-10-03 18:17) [15]


> a_andru (30.08.03 12:44) [1]
> where name_pole like ("%111%")


Все таки, наверное ;)
where name_pole like ("%,111,%")

Такой запрос в любом случае будет решен полным перебором таблицы - других вариантов, кроме того что набор будет уменьшен за счет других условий where нет.



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

Текущий архив: 2003.10.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
1-74288
Kiril
2003-10-13 00:06
2003.10.23
Не добавляет в TList объект.


1-74144
ZEE
2003-10-10 18:47
2003.10.23
Приколы с памятью занимаемой прогой


1-74112
download
2003-10-13 19:37
2003.10.23
Задачки по Turbo Pascal


6-74348
shark
2003-08-26 20:22
2003.10.23
онлайновая игра бес сервера


1-74192
Qwerr
2003-10-10 10:44
2003.10.23
TDBGrid