0

他の3つのテーブルをIDでリンクしたいテーブル「link_tabl」があります。したがって、すべての行にトリプレット(id_1、id_2、id_3)があります。トリプレットのすべての要素に対して列を作成でき、すべてがうまくいくでしょう。

しかし、もっと欲しいです:=)

もう1つの「次元」を尊重する必要があります。トリプレット(テーブル間のリンク)を作成するアルゴリズムがあります。アルゴリズムは時々異なるリンクを出力します。

例:

table_personは人を表します。table_taskはタスクを表します。table_locは場所を表します。

つまり、IDのトリプレット(p、t、l)は、次のことを意味します。特定の人が特定の場所で何かをした。

タプル(人、タスク)はアルゴリズムによって変更されません。それらが与えられます。アルゴリズムは、タプル(p、t)の位置lを出力します。しかし、アルゴリズムがそのようなタプルの異なる場所を決定する場合があります。すべてのタプル(作成者、タスク)の最後の10個のトリプレットをテーブルに格納したいと思います。

そのための最良のアプローチは何でしょうか?

次のようなことを考えました。link_tableにすでにタプル(p、t)が格納されている場合は、場所のIDを行の次の空きスロット(列)に追加します。すでに10個の値がある場合(すべての列がいっぱい)、最初の値を削除し、すべての値を列iから列i-1に移動して、新しい値を最後の列に格納します。ELSEは新しい行を追加します。

しかし、これが良いアプローチであるかどうか、もしそうなら、それをどのように実現するかはわかりません...

私が理解した独自の部分的な解決策は、2つの列を作成できるということです。著者IDを保存するOnw。タスクIDを格納するもの。そしてによって

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

それらにインデックスを付けることができます。だから今、私は値を列iからi-1にエレガントに移動する方法を理解する必要があります。=)

よろしくAufwind

4

1 に答える 1

1

アルゴリズムの出力を、日付インジケーターを使用して行に保存します。最後の 10 件のレコードのみを考慮するという要件は、かなり恣意的に聞こえますが、列のレイアウトには入れません。また、いくつかの標準的なリレーショナル ツールを冗長にします。たとえば、「人物 x と場所 y の場所がいくつ存在するか」というクエリは、「カウント」では答えられず、代わりにどの列が null かを調べることによって答えられます。

したがって、次のようなものをお勧めします。

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 件のみ」という要件を適用できます。必要に応じて、それをビューに埋め込むこともできます。

于 2011-04-18T10:00:15.357 に答える