2009-11-23 2 views
1

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

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

  • пользователей
  • вины
  • отзывов

Пользователь имеет много отзывов, отзыв принадлежит пользователю и обзор принадлежит вину. Это очень легко.

У меня есть два дополнительных бита информации, которые я хочу показать.

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

У меня также есть отличные вина, которые будут отображаться на первой странице. Опять поставляется в супермаркет.

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

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

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

Спасибо.

+0

Похоже на corkd.com! =) – jonnii

ответ

3

Создайте единую новую таблицу для хранения обоих типов функций. Она должна включать в себя следующие столбцы:

feature-type: The type of feature (TOP10, FEATURED, etc.) 
wine-id:  The ID of the wine being featured 
date-begin: The date that this list begins 
date-end:  The date that this list ends 
rank:   The ranking of this wine for this list (order displayed for featured wines, or sales volume) 

Эта структура позволяет сохранить исторические рейтинги, добавить новые виды списков, и предварительно добавить данные для будущих недель.

+0

Отличная идея. Благодаря! – KJF

0

Почему бы не иметь таблицу featured_wines и таблицу top10_wines, в которой есть wine_id? Таким образом, у вас будут только строки в тех таблицах, которые применяются для данного условия (т. Е. Top10_wines будет иметь 10 строк в нем, а featured_wines будут иметь только отмеченные идентификаторы вина).

+0

Я идиот. Я не знаю, почему я об этом не думал. Благодарю. – KJF

1

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

0

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

0

Я бы сделал две новые отдельные таблицы; top_wine_list с столбцами; 1-й, 2-й 3-й и т. Д. Возможно, еще несколько столбцов для date_entered и так далее.

Это может быть не самая лучшая практика, но с ней легко работать, каждая строка представляет собой новый «список лучших вин». Или просто добавьте еще один столбец «рейтинг» для своего стола «настоящего вина» и оцените все свои вина!

featured_wine_list может быть просто id ваших других вин. Самый простой!

1

Общей темой среди ответов до сих пор является добавление таблиц для премиальных и лучших виндов X (или одна таблица для этих списков), что отлично, за исключением одной проблемы. Вы упомянули, что у вас нет контроля над этими списками, и они поставляются снаружи супермаркетами. Таким образом, возможно, они отправят вам вино, которого у вас еще нет в вашем списке, или вино, которое описывается по-другому, но для всех целей и целей может быть тем же самым вином, что и в вашем первоначальном списке. Это может привести к осложнениям, если имя вина не представлено в этих таблицах, и вместо этого у вас есть ссылка на винодельку с винной таблицы. Поэтому несколько предложений по смягчению этой проблемы (если это для вас реально):

1) Включите поле «Описание вина», чтобы посторонние супермаркеты могли описать вино по-другому, чем в ваших отзывах. 2) Рассмотрите возможность связывания через стандартный идентификатор, который все стороны могут согласовать, например, SKU. Это может избежать ручной работы с вашей стороны, соответствующей винам супермаркета, в списки, когда они будут импортированы.

+0

Спасибо Тому некоторые хорошие предложения. – KJF

0

Большинство из них сказали то же самое, что я сказал бы, за исключением того, что я бы добавил таблицу «Неделя», чтобы отслеживать, что показывать когда и разрешать вам заполнять списки. Таким образом, вы бы добавить 3 таблицы

Таблица: Неделя
Поля: WeekID, StartDate, EndDate

Таблица: Top10Wines
Поля: WeekID, WineID, Положение

Таблица: FeaturedWines
Поля: WeekID , WineID, OtherFields

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

  • Нет связанных вопросов^_^