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

#database #data-modeling #breadcrumbs

#База данных #моделирование данных #панировочные сухари

Вопрос:

У меня есть некоторые данные, извлеченные из Интернета, которые я хотел бы нормализовать и сохранить в базе данных, но я нахожу очень сложным смоделировать способ хранения маршрутов панировочных сухарей, тех путей, которые отображаются в верхней части веб-сайтов покупок (т. Е. Главная страница > Видеоигры> Консоли> PS4) таким образом, чтобы избежать избыточности и упростить выполнение запросов.

Например, скажем, мои очищенные данные выглядят следующим образом:

  --------------- --------------- -------- --------------- ------------- ------------- ------------- ------------- 
|    Product    |     Store     | Price  |    Crumb_1    |   Crumb_2   |   Crumb_3   |   Crumb_4   |   Crumb_5   |
 --------------- --------------- -------- --------------- ------------- ------------- ------------- ------------- 
| Playstation 4 | Electromart   |  500.0 | Electronics   | Gaming      | Consoles    | Playstation |             |
| Xbox One      | Electromart   |  500.0 | Electronics   | Gaming      | Consoles    | Xbox        |             |
| Playstation 4 | Gamestart     |  550.0 | Consoles      | Modern Gen  | Playstation |             |             |
| Xbox One      | Gamestart     |  525.0 | Consoles      | Modern Gen  | Xbox        |             |             |
| Playstation 3 | Gamestart     |  50.00 | Consoles      | Retro       | Playstation |             |             |
| PS 4          | Future Store  |  565.0 | Entertainment | Electronics | Video Games | Consoles    | Playstation |
 --------------- --------------- -------- --------------- ------------- ------------- ------------- ------------- 
  

Я хотел бы иметь возможность запрашивать все продукты с «Playstation» в качестве одной из крошек, не прибегая к чему-то подобному этому:

 SELECT * FROM PRODUCTS
WHERE CRUMB_1 = 'Playstation'
OR CRUMB_2 = 'Playstation'
OR CRUMB_3 = 'Playstation'
OR CRUMB_4 = 'Playstation'
OR CRUMB_5 = 'Playstation'
  

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

Я подумал, что, возможно, сработала бы ассоциативная таблица (TRAILS) для подключения ПРОДУКТОВ к КРОШКАМ: введите описание изображения здесь Но, похоже, мои внешние ключи должны быть первичными ключами в другом месте, и я не могу сделать trail_id первичным ключом, поскольку он должен быть неуникальным.

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

Комментарии:

1. Я не думаю, что модель будет работать.. Что, если у вас один и тот же продукт в разных маршрутах? Вы уверены, что продукт принадлежит трассировке или он принадлежит крошке?

2. Продукты иногда появляются дважды с разными маршрутами (которые состоят из разных крошек). Например, иногда поисковик выбирает Playstation, скажем, в разделе продаж Future Store, поэтому у нее будет трассировка крошек, например, Продажи> Электроника> Консоли. Я не уверен, означает ли это, что продукт принадлежит маршруту или крошкам.

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