2009-07-16 2 views
4

Я работаю над усовершенствованием панели инструментов Flex, которая позволит пользователям сохранять поисковые запросы. Я использую BlazeDS и Java/Spring/SpringJdbc на стороне сервера.Хранение критериев поиска в базе данных

Мой вопрос заключается в следующем: как бы вы модель поиска, которая имеет один или несколько критериев, таких как:

  • валютирования между 2009-10-01 и 2009-10-31
  • Валюта = «USD»
  • Название банка начинается с «Первый»

Моя первая попытка в это разделить критерии на 3 типа:

  • Числовые критерии
  • критерии Дата
  • критерии Струнные

Каждый из типов критериев имеет различный набор операторов сравнения:

  • Числовые операторы: =,>,> =, <, < =, <>
  • Операторы передачи данных: До, После, Между
  • Строковые операторы: Начинается с, Заканчивается, содержит

У меня есть коды для идентификации каждого из этих операторов.

Моя объектная модель представляет собой интерфейс SearchCriteria и 3 классов, которые реализуют его: NumericCriteria, DateCriteria и StringCriteria

Все эти классы отображаются на одной и той же таблицы со следующими столбцами:

- SAVED_SEARCH_ID: id of the saved search 
- SEQ_NUM: criteria order. We want to load the criteria in the same order each time 
- CRITERIA_TYPE: Operator code. I can use this later to determine what kind of criteria this is. 
- FIELD: currency, valueDate, bank, etc 
- FIRST_VALUE_NUMERIC 
- SECOND_VALUE_NUMERIC 
- FIRST_VALUE_DATE 
- SECOND_VALUE_DATE 
- FIRST_VALUE_STRING 
- SECOND_VALUE_STRING 

ли там более чистый способ сделать это? Я не сумасшедший по поводу модели данных, но я не могу найти какие-либо ресурсы на эту тему ... Все комментарии оценены, как бы ни жестоко :)

ответ

4

Вы можете сериализовать свои классы критериев в XML и сохранить XML вместо реализации громоздкой схемы.

0

Есть ли какой-либо вред для хранения всех критериев поиска в SQL. Не знаете, каковы ваши другие параметры, чтобы рассмотреть упомянутый вами подход.

+0

Ну, основная проблема с хранением SQL в db заключается в том, что SQL затем должен анализироваться таким образом, чтобы клиент Flex мог использовать его для повторного отображения критериев, когда пользователь извлекал сохраненный поиск. –

2

Возможно, вы можете получить вдохновение от Hibernate Criteria API. Он предоставляет полную модель типичного запроса, которая сама по себе может быть отображена в базу данных с использованием самого JPA/Hibernate.

0

Если вы используете JDBC, вы можете буквально хранить операторы SQL в виде строк (или, возможно, хранить только там, где есть предложения). Запросы должны быть подготовлены каждый раз, когда они запускаются, что может быть проблемой, если у вас очень высокие объемы запросов. Но это звучит намного проще, чем пытаться разбить предложение where на составляющие токены.

Если вы придерживаетесь этой линии подхода, будьте очень осторожны, чтобы защититься от атак SQL-инъекций (помещая больше, чем просто предложение where в ваш запрос - скажем, DROP TABLE).

Смежные вопросы