У меня очень загруженный сайт. Пользователи могут создавать множество типов контента, которые затем можно проголосовать за / против, сообщить оскорбительным, включить / отключить администраторами и т. Д. И т. Д. Я хочу включить аудит всех действий, выполняемых на сайте.
Я использую базу данных SQL Server 2005. У меня в голове есть два варианта. Первая - это одна большая таблица, которая содержит большую часть деталей, необходимых для экранов аудита, то есть фрагменты контента дублируются в этой таблице, чтобы исключить необходимость присоединения к другим таблицам. Второе решение - иметь отдельную таблицу аудита для каждого типа контента. Это делает более сложным получение журнала аудита для пользователя, например, потому что они могут быть связаны с множеством различных типов контента, и поэтому мне нужно будет извлекать данные из множества разных таблиц.
Так что, похоже, это компромисс между размером таблицы и простотой запроса. Есть ли здесь какие-то практические правила - или, может быть, совершенно очевидно, какой путь лучше?
Это не совсем ответ на ваш вопрос, но документ настолько полезен, что вам действительно будет полезно его прочитать. Microsoft составила руководство по аудиту и соответствию для SQL Server 2008 (я знаю, не 2005), и оно содержит массу полезной информации по этому вопросу:
Ситуация, которую вы описываете, является отличным кандидатом для системы отслеживания измененных данных SQL Server 2008, которая автоматически фиксирует данные, которыми вы хотите управлять. К сожалению, это только Enterprise Edition, а это значит, что это не дешево. Если вы не хотите изобретать велосипед заново, это правильный путь.
Однако когда вы говорите «очень загруженный веб-сайт», это вызывает тревогу. Ни один из этих приемов, даже катание самостоятельно, не будет легким в использовании.