Является ли вложение категорий «цепочкой строк» ​​плохой идеей? - PullRequest
1 голос
/ 21 октября 2010

Думая о создании вложенной категории «система» с использованием «цепочек строк» ​​из-за отсутствия лучшего термина.Вот план:

Категория слизняк может быть чем-то вроде "shopping-clothing-womens".Это будет соответствовать 3 глубоким категориям: Покупки> Одежда> Женская.

У объекта в базе данных будет поле категории, содержащее слаг.Допустим, есть несколько объектов с разными слизнями в категории «Покупки»> «Одежда», «покупки-одежда-мужчины», «покупки-одежда-дети» и «покупки-одежда-другие».

Iу меня будет коллекция или словарь, который переведет этот слизень в нечто более значимое для конечных пользователей (например, «shopping-clothing-womens» -> «женская одежда»).

Если яЯ хотел бы выбрать все объекты, которые были в категории «Покупки»> «Одежда», я бы сделал что-то вроде этого:

DB.Objects.Where(a => a.Category.Contains("shopping-clothing"));

И вернул бы все подкатегории товаров для женщин, мужчин, детей и одежды>Категория одежды.

Целью является простой запрос, но при этом он остается мощным с возможностями почти бесконечной подкатегории без безумных связей БД и СОЕДИНЕНИЙ.Я также склоняюсь к возможной адаптации моего приложения к базе данных NoSQL в будущем, это поможет в реализации этого.

Но приведенный выше запрос меня беспокоит ... будет ли он медленным?

Этот план плохая идея?

Ответы [ 2 ]

1 голос
/ 21 октября 2010

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

Что касается Contains, я бы, вероятно, пошел на StartsWith. Это даст LIKE 'shopping-clothing%' и будет намного быстрее с правильным индексом.

Еще один совет: если вы добавите каждую категорию с тире, у вас не возникнет проблем, если одна категория будет иметь такой же префикс, как и другая, например "shopping-clothing-womans-". Тогда вы всегда можете использовать StartsWith("shopping-clothing-").

0 голосов
/ 21 октября 2010

Другой подход заключается в том, чтобы иметь отдельную таблицу категорий, которая содержит категории (без дерьма, Шерлок?), Которые могут быть вложенными.Например:

| ID | Name | ParentId |

В случае, если ParentId равен 0, это основная категория.

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

Если вам нужно найти все товары из магазина одежды, ваш запрос может выглядеть следующим образом:

    SELECT * FROM PRODUCT WHERE CategoryId IN 
    (SELECT ID FROM CATEGORY WHERE ParentId = 'shopping_clothing_id')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...