database - 用于搜索属性的数据库表的优化设计
问题描述
嗨,我希望我可以在这里写这个问题。我目前正在概述一个数据结构,该结构将位于有电影的数据库中,每部电影都有很多描述符。
我希望能够搜索整个数据库并找到具有属性 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 以开始缩小搜索范围。
解决方案
在设计表中,您不需要存储不存在的属性。您只需要记录电影所具有的属性。因此,您的设计将如下所示:
Movie ID | Attribute
1 | Adventure
1 | Comedy
2 | Action
此外,如果属性的数量不是太多,您可以将它们定义为表中具有二进制值的列:
Movie Id | Adventure | Comedy | Action
1 | 1 | 1 | 0
2 | 0 | 0 | 1
因此,要选择更好的数据结构,需要在属性数量、电影数量方面更加明确问题的空间。
此外,如果需要将数据存储在决策树中,节点的断点将是属性,它更像是第二种表架构而不是第一种设计。
推荐阅读
- ios - 在 UICollecitonView 中加载用户相册时内存增长失控
- kubernetes - 将 TLS 添加到 Kubernetes 服务的最简单方法是什么?
- reactjs - Webpack 构建 react 应用程序,可以在运行时从 node_modules 加载供应商库
- microsoft-graph-api - 使用 Office.js 访问令牌作为对后端的授权
- c# - 如何在 WinForms 设计器中隐藏自定义属性中的某些对象?
- java - 如何用单个正则表达式解析这些字段?
- c# - Serilog - 多线程日志记录会阻止应用程序取消
- javascript - 如何通过 JavaScript 将结果与另一个文本一起使用
- c# - 如何在 C# 中构建排除条件
- django - 如何在 Django 过滤器中合并任何字段