#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 (вероятно, это подошло бы лучше в программной инженерии, но кажется слишком неспецифичным для ответа)