我正在为高流量论坛设计一个插件。我正在做的是使用搜索API列出相关的线程,搜索API每天最多搜索800次
我想要做的是创建一个数据库来存储结果,将它们缓存一天,以便用它代替API。
这样的表格布局是否最佳:
Table:
+---------+-----------+------------+
| threadid | relatedids | dateentered |
+---------+-----------+------------+
| 129314 | 1124;2144 | 1234567890 |
| 124129 | 1251;1241 | 1234567890 |
| 185292 | 1151;5125 | 1234567890 |
+----------+-----------+-----------+
相关网址也是线程ID,以冒号分隔。我不是一个SQL专家,所以我不知道是否设置索引到threadID是一个好主意,或者是什么!
答案 0 :(得分:3)
你在这里显然有一对多的关系,所以你应该使用2个表而不是分隔符,类似于(MySQL语法,假设还有一个名为thread的表):
create table search_thread (
thread_id int,
date_entered datetime,
PRIMARY KEY (thread_id)
FOREIGN KEY (thread_id) REFERENCES thread(thread_id));
create table search_results (
thread_id int,
result_id int,
PRIMARY KEY (thread_id, result_id),
FOREIGN KEY (thread_id) REFERENCES search_thread(thread_id),
FOREIGN KEY (thread_id) REFERENCES thread(thread_id).
FOREIGN KEY (result_id) REFERENCES thread(thread_id));
此模型的好处是它可以扩展,这意味着您可以添加特定于相关线程的属性。此外,您可以执行一些您的方法无法实现的查询,例如查找有多少线程与另一个线程相关(在两个方向上)。