我有一些要在网络上抓取的数据,我希望对其进行规范化并将其存储在数据库中,但是我发现建模一种存储面包屑路径的方法非常困难,这些路径出现在购物网站的顶部(例如主页>视频游戏>控制台> 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)可能会起作用: 但是看来我的外键在其他地方必须是主键,并且我不能将Trail_id用作主键,因为它必须是非唯一的。
我觉得我尝试做的是可能的,但是我找不到可行的解决方案。有什么想法吗?