在MySQL-Link-Table中存储id

时间:2011-04-18 09:07:48

标签: mysql hyperlink alter

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

但我想要更多:=)

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

示例:

table_person代表一个人。 table_task表示任务。 table_locreüpresents位置。

所以ids(p,t,l)的三元组意味着:某个人在某个地方做过某事。

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

最好的方法是什么?

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

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

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

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

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

亲切的问候 Aufwind

1 个答案:

答案 0 :(得分: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

可以通过在选择查询中使用“前10名”来强制执行“仅10”要求;如果有必要,你甚至可以在视图中嵌入它。