У меня есть некоторые данные в Интернете, которые я хотел бы нормализовать и сохранить в базе данных, но мне очень сложно смоделировать способ хранения цепочек крошек, тех путей, которые появляются в верхней части торговых сайтов (т. Е.Главная> Видеоигры> Консоли> 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) для подключения PRODUCTS к CRUMBS: Но, похоже, мои внешние ключи должны быть первичными ключами в другом месте, и я не могуtrail_id первичный ключ, поскольку он должен быть неуникальным.
Мне кажется, что то, что я пытаюсь сделать , возможно , но я не могу найти решение, которое работает.Есть идеи?