Для проекта, над которым работает компания, над которой я работаю, нам необходим аудит (хранение журналов) для различных задач (изменения, внесенные в таблицы в системе), которые выполняют пользователи.В настоящее время есть только три различных типа задач.Но это может возрасти в будущем.
Мое предложение для этого было следующими таблицами схемы и отношениями (пример):
Table AuditLog
------------------------------
Id | PK
Description
Created
И для каждой задачи:
Table ExampleTaskAuditLog
------------------------------
ExampleTaskId | FK PK
AuditLogId | FK PK
И:
Table AnotherExampleTaskAuditLog
------------------------------
AnotherExampleTaskId | FK PK
AuditLogId | FK PK
По сути, для каждого вида задач, которые нам нужны для аудита, у нас будет новая таблица, содержащая взаимосвязь.
То, что предложил другой разработчик, было следующим:
Table AuditLog
------------------------------
Id (PK)
Description
Created
ExampleTaskId | NULLABLE
AnotherExampleTaskId | NULLABLE
Type | (an integer id which indicates whether this is a "example task" or a "another example task").
По сути, если бы мы создавали журнал для «ExampleTask», мы установили бы поле ExampleTaskId в качестве идентификатора примерной задачи, а тип - в соответствующее значение ExampleTask-enum.*
Он предложил приведенную выше таблицу, потому что он спорит о честности (что я считаю хорошим!) И производительности.Главным образом потому, что есть ограничения FK, и нужно было бы объединить таблицу, чтобы получить соответствующие журналы (да, это RMDBS - MSSQL).Кроме того, поскольку для каждого журнала есть две таблицы, необходимо также две вставки (поиск целостности и т. Д.).Конечно, это правильно.Но я не вижу проблемы.Особенно не с производительностью, так как она минимальна.Кроме того, журналы, которые будут сохранены, скорее всего, не будут превышать 5-10K в течение первого года.Через пару лет таблицы могут содержать около 30-40 тыс. Строк, максимум
Каково ваше мнение по поводу вышеизложенного?Кроме того, какое из перечисленных выше решений вы бы предпочли и почему?