0

我有一个表“link_tabl”,我想在其中通过 id 链接其他三个表。所以在每一行我都有一个三胞胎(id_1,id_2,id_3)。我可以为三元组的每个元素创建一列,一切都会好起来的。

但我想要更多:=)

我需要再尊重一个“维度”。有一种算法可以创建三元组(表之间的链接)。该算法有时会输出不同的链接。

例子:

table_person 代表一个人。table_task 代表一个任务。table_loc 代表一个位置。

所以三个 ids (p, t, l) 意味着:某个人在某个位置做了某事。

元组(人,任务)不会被算法改变。他们被给予。该算法为元组 (p,t) 输出位置 l。但有时算法会为这样的元组确定不同的位置。我想将每个元组(作者,任务)的最后 10 个三元组存储在一个表中。

最好的方法是什么?

我想到了类似的东西:如果有一个元组(p,t)已经存储在link_table中,则将位置的ID添加到该行的下一个空闲槽(列)中。如果已经有 10 个值(所有列都已满)删除第一个值,将每个值从第 i 列移动到第 i-1 列,并将新值存储在最后一列中。ELSE 添加一个新行。

但我不知道这是否是一个好方法,如果是,如何实现......

我想出了自己的部分解决方案,我可以制作两列。Onw 存储作者 ID。一个存储任务ID。并且通过

...
UNIQUE INDEX (auth_id, task_id)
...

我可以索引它们。所以现在我只需要弄清楚如何优雅地将值从 i 列移动到 i-1 。=)

亲切的问候

4

1 回答 1

1

我会将算法的输出存储在行中,并带有日期指示器。只考虑最后 10 条记录的要求听起来相当随意——我不会在我的专栏布局中体现它。它还使一些标准的关系工具变得多余——例如,查询“人 x 和位置 y 存在多少个位置”无法通过“计数”来回答,而是通过查看哪一列为空来回答。

所以,我会推荐类似的东西:

personID      taskID       locationID        dateCreated
1             1            1                 1 April 20:20:10
1             1            2                 1 April 20:20:11
1             1            3                 1 April 20:20:12

在选择查询中使用“top 10”可以强制执行“only 10”的要求;如有必要,您甚至可以将其嵌入到视图中。

于 2011-04-18T10:00:15.357 回答