我有一个表“ 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个”要求;您甚至可以根据需要将其嵌入视图中。

09-16 06:46