Дизайн базы данных: отслеживание изменений тегов между ревизиями - PullRequest
4 голосов
/ 05 октября 2009

Я строю ревизионную систему, похожую на , в которой переполнение стека имеет , и есть одна вещь, которую я не могу придумать, как лучше всего различать теги между несколькими ревизиями?

Самый простой способ, которым я могу придумать, это то, что у нас есть 3 таблицы, ревизии, теги и еще одна, чтобы связать их.

Каждая ревизия имеет свой собственный набор тегов, единственная проблема в том, что когда вы хотите отобразить все ревизии, необходимо повторно сравнить теги, чтобы выяснить различия, даже если они не меняются.

Возможно, можно добавить дополнительное поле или два, чтобы отметить теги, которые были добавлены или удалены из предыдущей версии.

Есть ли лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 05 октября 2009

Не усложняйте вашу схему и не оптимизируйте преждевременно. Попарное сравнение тегов ревизии - это очень дешевая операция (при условии, что у вас есть все данные в памяти), и это можно сделать при подготовке модели представления.

0 голосов
/ 05 октября 2009

Я бы сказал, что вы на правильном пути

T1: Revisions
|Item ID|revision ID|more...|

T2: Tags
|Tag ID|Tag fields...|

T3: Tags Per Revision
|Item ID|revision ID|Tag ID|  /* This will have multiple rows, 1 per tag) */

Чтобы найти различия в тегах, просто извлеките теги для последних 2 ревизий и сравните, используя ваши любимые хеш-карты на любом языке, который у вас есть, или же в другом случае ваш язык может эффективно реализовывать набор различий.

...