powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Покритикуйте историю
4 сообщений из 4, страница 1 из 1
Покритикуйте историю
    #35325310
_Monah_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте

в базе есть объекты, для которых нужно хранить глобальныю историю, типа добавление/удаление пользователя, скачивание файла, добавление файла, добавление новой версии файла, сообщения между пользователями и т. д. что-то порядка 30 событий пока, который группируются по трем типам.

Планирую создать таблицу ObjectHistory(id, event_id, type, [some required fields]) и для каждого типа хранить историю в таком виде [Type History](id, ..., ObjectHistoryId)

Будет ли правильной такая схема или можно придумать что-то лучше?
И какие проблемц могут возникнуть впоследствии?
...
Рейтинг: 0 / 0
Покритикуйте историю
    #35368727
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно для хранения истории делается либо дублирующая таблица для каждого типа объекта , либо одна таблица, в которой содержится история для всех типов примерно следующей структуры: History(id, HistoryDate, HistoryObjectID, ).
Последний вариант можно нормализовать, выделив в дочернюю таблицу HistoryAttributeID и HistoryValue.
Смысл таблицы [Type History](id, ..., ObjectHistoryId) мне не совсем понятен.
Минусы дублирующей структуры - в поддержке и расширении (в последующем включении атрибутов ели для них понадобится ведение истории).
Минусы одной таблицы - в проблемах с производительностью, ее оптимизации, необходимости организации дополнительных структур для хранения метаданных о типах, слабой типизации при хранении значения истории.
...
Рейтинг: 0 / 0
Покритикуйте историю
    #35372342
Tarabtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Monah_
в базе есть объекты, для которых нужно хранить глобальныю историю, типа добавление/удаление пользователя, скачивание файла, добавление файла, добавление новой версии файла, сообщения между пользователями и т. д. что-то порядка 30 событий пока, который группируются по трем типам.


Я бы реализовал так:
1. Для связи пользователся с сессией создается таблица Сессий (SessionID, USER)
1. Удаление в основных таблицах запрещено. Признаком активности записи есть поле, например ISACTIVE
2. Для каждой таблицы есть архивная , с такой же структурой + 3 поля: Время, Операция, SessionID
3. В триггерах на вставку и изменения записывать NEW в архивную таблицу
...
Рейтинг: 0 / 0
Покритикуйте историю
    #35373154
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все чудненько для обычных полей, а вот что вы будете делать с блобами и оле?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Покритикуйте историю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]