SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.01.2013 17:50:42

master_alf
Участник
Зарегистрирован: 14.04.2011
Сообщений: 4

Как вернее реализовать такую возможность? Подробное описание внутри.

Прошу прощения, что не смог краткое описание сделать в заголовке темы - просто не влез по кол-ву символов.

Задача такая:
Есть несколько таблиц, например 5. Мне нужно сделать возможность отображать историю изменений данных в этих таблицах. Я вижу два решения данной задачи:
1. Создаем 6ую таблицу, в которую впрямую вносим жесткие записи об изменениях. В духе: "добавили новую запись в таблицу 2 - вписали строку 'В таблице 2 добавилась новая запись такая-то'".
2. Создаем 6ую таблицу в которой храним сведения об изменениях других таблиц в связанном виде, т.е. храним имя таблицы, номер строки, тип операции (добавление, изменение, удаление) и всё, что там еще может понадобиться.

Пользователю данные должны показываться в легко читаемом виде. Если записи из первого варианта можно просто показывать напрямую, т.к. они вносятся изначально в читабельном виде, то из решения номер два данные нужно еще подставить. Ведь мы храним только ссылки....
Вопрос в следующем:
1. Насколько быстро будет работать второй вариант? Если каждое поле в строке хранит только сведения о том, откуда получить данные?[
2. Каким образом осуществляется подставление данных в подобных случаях? Вот я делаю условный запрос 'SELECT * FROM logTable WHERE date > 01.01.01' и получаю 'tableName|Строка 5|Увеличили значение поля 3 на 1'. Можно ли как-то штатными средствами SQL подставлять данные к этому запросу? т.е. из tableName взять строку 5 и дополнительно вытащить сведения из 5 полей этой строки? Или же получив строку из logTable я должен разобрать результат и составить обычны SELECT?

Скажу честно - поиском не пользовался т.к. не могу внятно сформулировать запрос. Знания в SQL/mySQL слабые, потому даже если вопрос простой и очевидный - пршу ответить smile

Неактивен

 

#2 30.01.2013 19:44:20

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как вернее реализовать такую возможность? Подробное описание внутри.

Второй вариант предпочтительней, так как база занимает меньше места, а смотреть изменения пользователь будет вероятно очень редко.

Получив строку из logTable, разобрать результат и составить обычный SELECT. Работать будет быстро.

Неактивен

 

#3 31.01.2013 14:22:55

master_alf
Участник
Зарегистрирован: 14.04.2011
Сообщений: 4

Re: Как вернее реализовать такую возможность? Подробное описание внутри.

Еще второй вариант предпочтительнее тем, что если что-то изменилось в одной из таблиц, например наименование заказчика, то лог будет показывать не старое имя, а актуальное.

А просматриваться это всё будет часто. Будет страница "изменения за сегодня" - дабы руководитель видел какие изменения произошли на его участке.
Спасибо за ответ.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson