首页 > 解决方案 > 用于搜索属性的数据库表的优化设计

问题描述

嗨,我希望我可以在这里写这个问题。我目前正在概述一个数据结构,该结构将位于有电影的数据库中,每部电影都有很多描述符。

我希望能够搜索整个数据库并找到具有属性 Y、Z 并且没有 A、B、C 的电影 X。

我在想的是像这样存储描述符/属性:

Movie ID | Attribute | Has_Attribute
1        | Action    | 0
1        | Adventure | 1
1        | Comedy    | 1
2        | Action    | 1

这是存储记录的所有属性的最佳方式吗?

大概对于每个后续调用,我都会搜索 Action == 0 AND Comedy == 1 ... n == n_has_attribute 以开始缩小搜索范围。

标签: databasealgorithmbinary-search-tree

解决方案


在设计表中,您不需要存储不存在的属性。您只需要记录电影所具有的属性。因此,您的设计将如下所示:

Movie ID | Attribute
1        | Adventure 
1        | Comedy   
2        | Action    

此外,如果属性的数量不是太多,您可以将它们定义为表中具有二进制值的列:

Movie Id | Adventure | Comedy | Action 
1        | 1         | 1      | 0
2        | 0         | 0      | 1

因此,要选择更好的数据结构,需要在属性数量、电影数量方面更加明确问题的空间。

此外,如果需要将数据存储在决策树中,节点的断点将是属性,它更像是第二种表架构而不是第一种设计。


推荐阅读