Как моделировать версии в базе данных?

У меня есть сущность, состоящая из некоторых атрибутов fix и некоторых переменных атрибутов, которые должны быть версионными. Это приводит к созданию базы данных, содержащей таблицу для фиксированных деталей (таблица F) и таблицу для версионных деталей (таблица V).

V имеет отношение многие к одному F(одна сущность многие имеют много версий). Fимеет отношение один к одному Vдля указания текущей версии. Это приводит к циклическим зависимостям в нашей базе данных, что затрудняет жизнь.

Мы предпочитаем решение, обеспечивающее согласованность данных на уровне базы данных (поэтому установка флага currentversoin на Vне является решением, так как мы не можем гарантировать, что нет нескольких текущих версий в случае сбоя). Вы видите лучший способ смоделировать это без кругов?

1 ответ

  1. Удалите ссылку на Fтекущую версию V. Это просто не нужно. Текущая версия является последней версией.

    Вот некоторые «must have» особенности версионного дизайна:

    • Одно и только одно значение даты/времени (нет пар от / до даты)
    • Нет отдельного поля, используемого для указания текущей версии.
    • Создание новой версии включает запись одной записи. Нет обновления других версий.
    • Ссылки на внешние ключи работают так же, как и всегда.
    • Используйте стандартный шаблон, который является последовательным и уже хорошо известным (в этом случае шаблон 2nf).

    Вот ответ с более подробной информацией. Он также содержит ссылки на еще более подробную информацию, если вы думаете, что он держит обещание.