我想更清洁,更有效地编码,我想知道以下问题的任何其他建议:
我有一个mySQL数据库,其中包含有关一组照片名称的数据。哦,说100张照片名称
表1 :(照片)包含以下字段: photo_id,photo_name
Ex数据:
1 | sunshine.jpg
2 | cloudy.jpg
3 | rainy.jpg
4 | hazy.jpg
...
表2 :(类别)具有以下字段: category_id,category_name,category_order
Ex数据:
1 | Summer Shots | 1,2,4
2 | Winter Shots | 2,3
3 | All Seasons | 1,2,3,4
...
通过逗号分隔值,每个条目以这种方式存储照片的顺序是否有效?这是我以前见过的一种方法,但我想知道运行时是否还有其它东西更快。
使用这种方式我不认为可以在类别表和照片表上直接 INNER JOIN 来获得每个类别的所有照片的单个匹配列表。
前:夏季拍摄 - > sunshine.jpg,cloudy.jpg,hazy.jpg因为它与1,2,4匹配
迭代所有类别然后照片将有一个O(n ^ 2),并且必须有更好/更快的方式。请教育我:))
答案 0 :(得分:6)
在我看来,您可以使用另一个表格来查看照片和类别之间的关系,其中包含字段category_id,order_id和photo_id
我认为使用起来会更简单,你就可以进行加入
如果您决定使用该解决方案,我还建议您将photo_id设置为该新表中的索引。
- 编辑 -
使用'index'以某种方式告诉MySQL您希望优化对索引列的研究,当您发现许多查询在特定列上有WHERE和/或JOIN时,通常最好将列设置为索引。此外,除非它简化某些内容,否则将多个数据组合成一个单独的数据几乎绝不是一个好主意,例外情况可能是将电话号码前缀与实际数字组合在一起以及类似的一些事情,但它们是例外情况。如果你使用文件,你在表中硬编码顺序的方式会很好,但在数据库中,你最好使用另一个表而不是使用逗号分隔符。有问题吗?