我有一个表“ link_tabl”,我想在其中通过ID链接其他三个表。因此,在每一行中,我都有一个三胞胎(id_1,id_2,id_3)。我可以为三元组的每个元素创建一个列,一切都会好起来的。
但我想要更多:=)
我需要再尊重一个“维度”。有一个算法创建三元组(表格之间的链接)。该算法有时会输出不同的链接。
例:
table_person代表一个人。
table_task代表一个任务。
table_loc代表一个位置。
因此,三元组(p,t,l)的意思是:某个人在某个位置做了某件事。
元组(人,任务)不会被算法更改。他们被给予。该算法为元组(p,t)输出位置l。但是有时算法会为此类元组确定不同的位置。我想在表中存储每个元组(作者,任务)的最后10个三元组。
最好的方法是什么?
我想到了类似的东西:
如果在link_table中已经存储了一个元组(p,t),则将位置的ID添加到该行的下一个空闲插槽(列)中。
如果已经有10个值(所有列均已满),则删除第一个,将每个值从i列移至i-1列,并将新值存储在最后一列中。
ELSE添加新行。
但是我不知道这是否是一个好方法,如果是,如何实现呢?
自己的局部解决方案
我弄清楚,我可以分成两列。 Onw,其中存储作者ID。一种存储任务ID。然后
...
UNIQUE INDEX (auth_id, task_id)
...
我可以索引它们。因此,现在我只需要弄清楚如何将值从第i列优雅地移动到i-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个”要求;您甚至可以根据需要将其嵌入视图中。