Как я могу нормализовать следы крошки при сохранении порядка панировочных сухарей? - PullRequest
0 голосов
/ 07 марта 2019

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

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

...