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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
3-73994
Velvet
2003-09-30 22:10
2003.10.23
предложение DELETE в SQL


3-73983
GS
2003-10-01 01:41
2003.10.23
Подскажите, как можно осуществить Редактирование DBF.


1-74186
Joisy
2003-10-09 09:23
2003.10.23
Редактор pas файлов


3-74082
AndrewK
2003-09-26 17:17
2003.10.23
Как заставить SQL server выполнить часть хранимой процедуры?


3-73986
AndCot
2003-10-01 09:56
2003.10.23
Индексы CDX в TTable





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский