Структура БД - achugr/GoodsReview GitHub Wiki
ER-диаграмма и проект в Toad Data Modeler: скачать
Сущности для базы: скачать
Каждая сущность соответствует одной таблице. Связи между таблицами отражены в именах свойств <что-то>_id.
Типы полей должны быть понятны интуитивно или из примеров. (update: см. типы в диаграмме)
- Сценарий: стащили с ресурса новый коммент. Добавить его в базу. Коммент относится к товару -> добавить товар тоже, если его там ещё нет.
Отсюда такие запросы:
- insert into review... (+date, source_url, score)
- insert into article... (+shop_url)
- select from article... (запрос проверки наличия - регулярка?)
- Из коммента в базе вытащили тезисы. Добавить их (TODO: как обрабатывать дубликаты?).
- insert into thesis... (+score)
- Пересчитали важность тезиса X, теперь она равна Y. Обновить важность.
- update thesis set score = Y where id = X
- Пользователь смотрит страницу товара X. Хотим показать ему комменты, отсортированные по среднему голосу согласия.
- select from review where article_id = X... (тут ещё select from vote, вычисление среднего и сортировка, не могу из головы сложный запрос написать)
- Пользователь смотрит страницу товара X. Хотим показать ему тезисы в порядке убывания важности.
- select from thesis where article_id = X order by score desc
- Пользователь голосует за тезис или коммент, выражая своё согласие (например, по шкале 1..5). Добавить голос.
- insert into vote... (+ score, type=thesis_vote/review_vote)
API примерно так мне видится:
класс вроде DatabaseWrapper, у него приватный конструктор и статический метод getInstance
и методы в стиле addReview(text, date, source...)
Из Java можно работать с MySQL с помощью обычного JDBC, только нужен драйвер MySQL Connector/J.