MySQL:我该如何起草这个数据库?

时间:2010-09-06 03:57:50

标签: mysql sql performance

我正在为高流量论坛设计一个插件。我正在做的是使用搜索API列出相关的线程,搜索API每天最多搜索800次

我想要做的是创建一个数据库来存储结果,将它们缓存一天,以便用它代替API。

这样的表格布局是否最佳:

Table:
+---------+-----------+------------+
| threadid | relatedids | dateentered |
+---------+-----------+------------+
|   129314 |  1124;2144 | 1234567890  |
|   124129 |  1251;1241 | 1234567890  |
|   185292 |  1151;5125 | 1234567890  |
+----------+-----------+-----------+

相关网址也是线程ID,以冒号分隔。我不是一个SQL专家,所以我不知道是否设置索引到threadID是一个好主意,或者是什么!

1 个答案:

答案 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));

此模型的好处是它可以扩展,这意味着您可以添加特定于相关线程的属性。此外,您可以执行一些您的方法无法实现的查询,例如查找有多少线程与另一个线程相关(在两个方向上)。