Хранение идентификаторов в MySQL-Link-Table - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть таблица "link_tabl", в которой я хочу связать три другие таблицы по id. Таким образом, в каждой строке у меня есть триплеты (id_1, id_2, id_3). Я мог бы создать для каждого элемента триплета столбец, и все было бы хорошо.

Но я хочу больше: =)

Мне нужно уважать еще одно «измерение». Есть Algorthm, который создает триплеты (связи между таблицами). Алгоритм иногда выводит разные ссылки.

Пример:

table_person представляет человека. table_task представляет задачу. table_loc представляет местоположение.

Таким образом, триплет идентификаторов (p, t, l) означает: определенный человек что-то сделал в каком-то месте.

Кортеж (персона, задача) не изменяется алгоритмом. Они даны. Алгоритм выводит для кортежа (p, t) местоположение l. Но иногда алгоритм определяет различные местоположения для такого кортежа. Я хочу хранить в таблице последние 10 триплетов для каждого кортежа (автор, задача).

Каков наилучший подход для этого?

Я подумал о чем-то вроде: ЕСЛИ есть кортеж (p, t), УЖЕ сохраненный в link_table, ДОБАВЬТЕ идентификатор местоположения в следующий свободный слот (столбец) строки. Если уже есть 10 значений (все столбцы заполнены), удалите первое, переместите каждое значение из столбца i в столбец i-1 и сохраните новое значение в последнем столбце. В противном случае добавьте новую строку.

Но я не знаю, хороший ли это подход, и если да, то как это реализовать ...

Собственное частичное решение Я понял, что могу сделать две колонки. Onw, в котором хранится идентификатор автора. Тот, который хранит идентификатор задачи. И к

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

Я мог бы их проиндексировать. Так что теперь я просто должен выяснить, как элегантно переместить значения из столбца i в i-1. =) * * Один тысяча двадцать-шесть

С уважением Aufwind

1 Ответ

1 голос
/ 18 апреля 2011

Я бы сохранял выходные данные алгоритма в строках с указателем даты.Требование учитывать только последние 10 записей звучит довольно произвольно - и я бы не закрепил это в макете моего столбца.Это также делает некоторые стандартные реляционные инструменты избыточными - например, на запрос «сколько мест существует человек x и местоположение y» нельзя ответить «count», а вместо этого посмотреть, какой столбец пуст.

Итак, я бы порекомендовал что-то вроде:

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 лучших» в запросах выбора;Вы могли бы даже встроить это в представление при необходимости.

...