Реализация простой схемы просмотра базы данных / приложения - PullRequest
0 голосов
/ 01 декабря 2011

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

В текущей схеме базы данных у меня есть таблица, назовите ее tbl_item, в которой есть столбцы для различных свойств элементов.Я хочу, чтобы пользователи могли просматривать элементы и связывать каждый отзыв в tbl_reviews с определенным элементом.

Конечно, у меня настроен внешний ключ, ссылающийся на столбец идентификатора в tbl_item, но я не знаю, куда идти дальше.В основном мой вопрос: что должно рассчитывать среднее количество отзывов?

Должно ли приложение делать вызов SQL каждый раз, когда запрашивается оценка обзора для определенного элемента, где БД должна затем выполнить поиск по всем строкам tbl_reviews, чтобы найти те, у которых есть конкретный item_id?

(Это кажется неправильным.) Должна ли БД вмешиваться и иметь какой-то тип вычисляемого поля или представления или хранимой процедуры, которая делает то же самое?

Должен ли я иметь новый столбец в tbl_item, в котором есть средний балл и который обновляется всякий раз, когда любой новый отзыв, соответствующий конкретному элементу, помечается как CRUD?

Если это имеет значение, я использую Yii (PHP) и MySQL.

1 Ответ

1 голос
/ 01 декабря 2011

В основном вы спрашиваете об эффективности и математике.

Вот что я бы сделал:

Ваша БД реляционная. Хорошо, ты понял. Каждый отзыв имеет числовое значение? Как 1 - 10? Скажем, для этого примера.

Я бы сказал, что при каждом рассмотрении сам обзор устанавливается в БД, а также в очередь в таблице действий. Что-то, что имеет идентификатор элемента и тип действия. В этом случае вернемся. Затем вы каждую минуту запускаете фоновый режим, проверяя эту очередь действий, и в случае нового обзора или набора проверок вы запускаете алгоритм для каждого применимого элемента, который собирает все данные, доступные в обзоре, и возвращает образованное число, основанное на стандартном отклонении коллективных данных.

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

Что касается стандартного отклонения, я проверяю множество вещей на наличие спама. Я храню все пользовательские данные, IP-адреса, дату и время и все, что могу, чтобы убедиться, что это не просто один парень, который входит в систему с разными учетными записями, просматривая свои собственные вещи с 10-балльной оценкой каждый раз. Не могу влюбиться в это. Кроме того, если вы получите 100 10 отзывов, которые выглядят вполне законно, и 1 отзыв с оценкой 1, вы можете отбросить их как ненавистника и просто проигнорировать их в результатах.

Вы должны понимать, что ваш запрос огромен, поэтому фрагменты кода здесь не обсуждаются. То, что я только что объяснил, было 4 месяца работы для огромного клиента и серьезного антиспам калькулятора.

удачи, хотя

...