如何在保持面包屑顺序的同时标准化面包屑路径?

时间:2019-03-07 20:39:39

标签: 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'

同时,我希望能够按照出现的顺序重新组装碎屑,以便可以轻松读取碎屑痕迹。

我认为将产品连接到CRUMBS的关联表(TRAILS)可能会起作用: enter image description here 但是看来我的外键在其他地方必须是主键,并且我不能将Trail_id用作主键,因为它必须是非唯一的。

我觉得我尝试做的是可能的,但是我找不到可行的解决方案。有什么想法吗?

0 个答案:

没有答案