Допустим, у меня есть таблица вещей, и мне нужно хранить некоторую одитинговую информацию о том, кто, когда и где что-то сделал с вещами.
Базовая схема может выглядеть так:
Things
- ID
- ThingName
- CreatedOn
- CreatedBy
- CreatedIn
- LastModifiedOn
- LastModifiedBy
- LastModifiedIn
- HiddenOn (nullable)
- HiddenBy (nullable)
- HiddenIn (nullable)
Это немного беспокоит меня. Исходя из ООП и учитывая, что эти данные будут в основном использоваться linq-to-sql, создается впечатление, что я мог бы извлечь повторяющиеся поля в отдельную структуру, которая также будет действовать как своего рода контракт схемы:
Actions
- ID
- ExecutedOn
- ExecutedBy
- ExecutedIn
Things
- ID
- ThingName
- CreatedAction -> Actions.ID
- LastModifiedAction -> Actions.ID
- HiddenAction (nullable) -> Actions.ID
Затем я мог бы повторно использовать таблицу Actions для хранения той же информации аудита для других вещей, которые я мог бы иметь в базе данных. Было бы много внешних ключей, указывающих на эту таблицу.
Я обеспокоен тем, может ли агрегирование данных, связанных со многими частями базы данных, вызвать проблемы в долгосрочной перспективе. Мне интересно,
Может ли это стать источником конфликта вставки (Работа с SQL Server 2008)?
Не станет ли поиск по этим полям более дорогим, потому что будет намного больше строк, и можно ли это уменьшить, проиндексировав его на дискриминаторе?
В общем, хорошая идея или плохая?
Спасибо