запросить таблицу не в нормальной 3-й форме - PullRequest
0 голосов
/ 13 октября 2009

Привет, у меня есть таблица, которая была разработана ленивым разработчиком, который не создал ее в 3-й нормальной форме. Он сохранил массивы в таблице вместо использования отношения MM. И приложение работает, поэтому я не могу изменить схему базы данных.

Мне нужно запросить таблицу следующим образом:

ВЫБРАТЬ * ИЗ myTable ГДЕ группа пользователей = 20

где поле группы пользователей содержит такие данные: 17,19,20, или это может быть также только 20 или только 19.

Я мог бы искать как: ВЫБРАТЬ * ИЗ myTable ГДЕ группа пользователей НРАВИТСЯ 20 но в этом случае это будет соответствовать и для поля, которое содержит 200, например

Кто-нибудь есть идеи? Thanx

Ответы [ 3 ]

4 голосов
/ 13 октября 2009

Исправьте плохой дизайн базы данных.

Краткосрочным исправлением является добавление связанной таблицы для правильной структуры. Добавьте триггер для анализа информации в старом поле в связанной таблице при вставке и обновлении. Затем напишите скрипт для [разбора существующих данных. Теперь вы можете делать запросы, но вы не сломали старый код. Затем вы можете найти старый код и исправить. Как только вы это сделаете, просто измените способ вставки кода или обновления в исходной таблице, чтобы добавить новую таблицу и удалить старый столбец.

0 голосов
/ 13 октября 2009

Написать функцию для преобразования списка с разделителями-запятыми в таблицу Должно быть довольно просто. Тогда вы можете использовать IN ().

0 голосов
/ 13 октября 2009

Напишите пользовательскую функцию с табличным значением (UDF в SQL Server, я уверен, что она будет иметь другое имя в других СУБД) для анализа значений столбца, содержащего список, который хранится в виде строки. Для каждого элемента в списке, разделенном запятыми, ваша функция должна возвращать строку в результате таблицы. Когда вы используете такой запрос, запросите результаты, полученные из UDF.

...