Каков наилучший способ создания базы данных и отношений для веб-сайта, такого как Yelp или eBay (множество категорий и подкатегорий)? - PullRequest
3 голосов
/ 08 апреля 2009

Есть ли у них таблица для всех категорий и еще одна для всех подкатегорий (и еще одна для подкатегорий и т. Д.), Или как? Как все уровни общаются друг с другом?

Я новичок, начинающий работу над проектом, который может иметь такой уровень сложности, и мне трудно обдумать это.

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

Ответы [ 2 ]

4 голосов
/ 08 апреля 2009

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

Вам просто нужно две таблицы. Одна из таблиц предназначена для категорий и отношений между категориями. Например:

CategoryID CategoryName ParentCategoryID
----------------------------------------
1          Computers    NULL
2          Programming  1
3          Games        1
4          Python       2

Другая таблица предназначена для хранения данных, связанных с категориями. Например:

CategoryID ItemID Description
----------------------------------------------
4          1      Book – Programming in Python
3          1      World of Warcraft

Первая таблица содержит столбец внешнего ключа, который связывает подкатегории с их родительскими категориями. Это известно как «Модель списка смежности». Преимущество этой модели заключается в простоте понимания и выполнении различных действий (например, поиск пути к категории Python - / Computers / Programming / Python), при этом эта модель может быть довольно легко реализована с помощью кода на стороне клиента (если вы этого не сделаете помните о производительности, потому что вам может потребоваться сделать несколько запросов к базе данных). Тем не менее, это может быть ошеломляющим, если вы попытаетесь сделать это в полном SQL. Например, для получения пути к категории потребуются самостоятельные объединения.

Другой способ структурирования этой таблицы - думать о категориях и подкатегориях как о наборах и подмножествах (известных как «Модель вложенных наборов»). Трудно объяснить эту модель без диаграмм, и статья Управление иерархическими данными в MySQL , кажется, лучше справляется с объяснением концепций (модели «Список смежности» и «Вложенный набор»).

1 голос
/ 08 апреля 2009

Я рекомендую использовать отдельные таблицы для каждой, однако вопрос «может ли подкатегория существовать в нескольких категориях» также меняет результат.

Если у вас один на один, у вас есть таблица категорий A, тогда таблица подкатегорий B с идентификатором родительской категории (из A).

Но если они могут существовать в нескольких категориях, то, скорее всего, у вас будет нормализованная структура таблиц, в которой вы будете иметь категории A, подкатегории B и третью таблицу Cat_ID и Sub_ID в качестве одной записи.

Кроме того, что касается продукта, у вас также будет нормализованная настройка таблицы, где у вас есть Таблица продуктов, Таблица категорий, а затем Product_Categories с product_id и category_id. Это бесконечно масштабируется (не дай бог) с таблицей подкатегорий, подкатегориями product_subcategories, sub sub, sub sub sub, бла-бла-бла и т. Д. И т. Д. И т. Д. И т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...