[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Журнализация
zvezda_t
Если у меня данные записываются в определенную таблицу,
а теперь понадобилось обновление некоторых полей таблицы, как мне осуществить перезапись без потери старых данных?


создала дубликат таблицы - только с теми полями, которые нужно переписать,
в итоге в главной таблице - у меня последняя версия данных, а в таблице вспомогательной храниться история перезаписанных полей, но в этом случае получается что
1)в главной и вспомогательной таблицах есть одинаковая запись(последняя)
2) некоторые поля во вспомогательной таблице не всегда перезаписываются и следовательно пустуют

как обычно журнализацию делают грамотно?



Спустя 3 часа, 24 минуты, 44 секунды (19.05.2010 - 15:34) Семён написал(а):
Самый простой способ на мой взгляд, создать таблицу history в которой будет хранится информация с принадлежностью к определённому id оригинала

Спустя 14 часов, 41 минута, 47 секунд (20.05.2010 - 06:16) zvezda_t написал(а):
Цитата
Самый простой способ на мой взгляд, создать таблицу history в которой будет хранится информация с принадлежностью к определённому id оригинала


и дата обновления?
а сам оригинал тоже будет обновляться? получается в любом случае данные будут дублироваться?

Спустя 11 минут, 23 секунды (20.05.2010 - 06:28) zvezda_t написал(а):
а если я прям в таблице оригинала буду хранить и старые записи и обновления. это глупо?

Спустя 11 минут, 37 секунд (20.05.2010 - 06:39) HardWoman написал(а):
И до какой поры будут храниться обновляемые записи? Сколько архивных записей планируется хранить? 2?5?!10? И что должно делаться с архивными и по какому условию?

Цитата
1)в главной и вспомогательной таблицах есть одинаковая запись(последняя)
Это почему?


Цитата
2) некоторые поля во вспомогательной таблице не всегда перезаписываются и следовательно пустуют


И это непонятно. Можно конкретный пример? Очень бы хотелось увидеть ваши таблицы - какие данные в них хранятся и как.

Спустя 23 минуты, 57 секунд (20.05.2010 - 07:03) zvezda_t написал(а):
Цитата
И до какой поры будут храниться обновляемые записи? Сколько архивных записей планируется хранить? 2?5?!10? И что должно делаться с архивными и по какому условию?

архивные записи должны храниться всегда. Не одна, 2 или 5 - а все. То есть мне нужна вся история по изменению определённого поля в таблице. Чтобы при необходимости можно было её просмотреть.

Можно попробую объяснить на примере?
Допустим главная таблица, в ней поля:
Таблица Tab1:
i
date1
a1
b1
с1
d1
f1
g1

Вспомогательная таблица:
Таблица Tab2:
j
i2
date
date1
a2
date2
b2

Цитата
1)в главной и вспомогательной таблицах есть одинаковая запись(последняя)

когда происходит первая запись, в главной таблице заполняются все поля и во вспомогательной тоже.
Потом начинается обновление, в главной таблице значения полей a1 и b1 перезаписываются, а во вспомогательной добавляется новая запись (и записывается в поле date1 и date2 дата обновления)
и тогда получится что значение a1 и b1 главной таблицы =значениям a2 b2 вспомогательной (последняя запись).

Цитата
2) некоторые поля во вспомогательной таблице не всегда перезаписываются и следовательно пустуют
И это непонятно. Можно конкретный пример?


потому что date-это дата когда было принято обновить поля,
но обновиться может только поле a1, в этом случае b1 будет пустовать)))

(это вот так у меня сейчас организовано, я не говорю что это правильно - я хочу понять - КАК НАДО ПРАВИЛЬНО???)

Спустя 16 минут, 12 секунд (20.05.2010 - 07:19) zvezda_t написал(а):
Живой пример:

Главная таблица хранит данные всех студентов.
Поля для изменения - это решения степендиальной коммиссии о начислении стипендии,
проходит коммисия в два этапа.
Если студент по оценкам проходит, выносится первое решение - поле a1, допускается на конкурс второго этапа, принимается решение - поле b1.

Но бывает что студент прересдал экзамен, тогда нужно принимать решения заново.
Решения a1 и b1 обнуляются (но в истории должны храниться и когда было обнуление, тоже нужно хранить) Для этого я и сделала вспомогательную таблицу - решений.

Спустя 5 минут, 11 секунд (20.05.2010 - 07:25) HardWoman написал(а):
Если вы намереваетесь каждый раз дублировать всю строку при перезаписи одного значения этой строки - это будет оправдано, вероятно только при необходимости достать не только последнее обновляемое значение, но и другие - которые идут в связке строки.

Если у вас есть только необходимость посмотреть не общее редактирование, а по одному полю - я бы поступила так. Не факт что оптимальное решение - создала бы отдельную таблицу, естественно не ту, которая повторяет первую и дублирует записи.

А присвоила бы каждому полю логическую метку. Поле 1 - 1, поле 2 - 2 - то есть ввела бы идентификаторы логики полей. И в таблице бы хранила ID метку поля, ID значения, ID даты обновления этого поля.

Если же вам нужно знать состояние других полей при поиске для конкретной архивной записи - придется писать все. И не оставлять поля пустыми, а перезаписывать и состояния даже не измененного поля.



Спустя 3 минуты, 36 секунд (20.05.2010 - 07:28) HardWoman написал(а):
Цитата
Главная таблица хранит данные всех студентов.
Поля для изменения - это решения степендиальной коммиссии о начислении стипендии,
проходит коммисия в два этапа.
Если студент по оценкам проходит, выносится первое решение - поле a1, допускается на конкурс второго этапа, принимается решение - поле b1.

Но бывает что студент прересдал экзамен, тогда нужно принимать решения заново.
Решения a1 и b1 обнуляются (но в истории должны храниться и когда было обнуление, тоже нужно хранить) Для этого я и сделала вспомогательную таблицу - решений.

Не не не это неправильно - подождите чуть через пол часа расскажу - позавтракать хочу.

И именно с написания этой задачи и следовало начинать вопрос

Спустя 3 минуты, 10 секунд (20.05.2010 - 07:31) zvezda_t написал(а):
Цитата
И в таблице бы хранила ID метку поля, ID значения, ID даты обновления этого поля.


не поняла...это айдишники - а сами значения где и как храниться должны?

Спустя 26 минут, 19 секунд (20.05.2010 - 07:58) HardWoman написал(а):
Какие здесь могут быть варианты.

Первая таблица - это таблица Юзер которая содержит только лишь данные по студентам - фамилия адрес курс. В нее можно допустим добавить столбец по последнему изменению его состояния по стипендии - никаких отдельных столбцов под каждое состояние. То есть - решение 1, решение 2 или 3 - студент на текущий момент времени может находиться только в одном состоянии.
Это полезно тогда когда нужно посмотреть по всем студентам - например тех, кто прошел первый этап - зависит от логики запроса.

А теперь вторая таблица - таблица изменения этих состояний по каждому студенту.
ID студента
ID состояния
Дата изменения состояния

Но бывает что студент прересдал экзамен, тогда нужно принимать решения заново.

Все так же просто - состояние записывается по новой , но у него новая дата

Потом может еще понадобится еще кое что - предмет по которому шла пересдача. Тогда добавится ID предмета.

Вот эта вторая таблица и будет у вас history

Спустя 5 минут, 2 секунды (20.05.2010 - 08:03) HardWoman написал(а):
ID даты обновления этого поля. ошиблась - здесь нужно хранить саму дату в удобном вам формате. У логической метки нет значения в данном случае, просто при запросе вы пишете если id метки = 2 вывести пересдача/второй этап и проч в самом скрипте. Хранить эти данные в таблице - значения нет необходимости - вы же не движок пишите да и меток у вас немного

Спустя 34 минуты, 38 секунд (20.05.2010 - 08:37) zvezda_t написал(а):
Цитата
Хранить эти данные в таблице - значения нет необходимости

просто на каждрм этапе коммисия выносит обоснование решения, вот это обоснование мне и нужно перезаписывать и хранить в архиве- это не просто метка, а текстовое поле.

как быть? rolleyes.gif

Спустя 1 минута, 41 секунда (20.05.2010 - 08:39) HardWoman написал(а):
Ну так и создайте еще таблицу откуда я могу знать что там вам еще нужно.

Или добавьте просто поле для текста в таблицу хистори.

А вообще общаться с вами хочется все меньше и меньше - никаких знаний азов и желания их узнать. И постоянно невменяемые вопросы - как будто вы мой заказчик и я пытаюсь из вас вытащить что вам нужно.


Чет не хочется вам больше помогать - не буду

Спустя 10 минут, 51 секунда (20.05.2010 - 08:50) zvezda_t написал(а):
Вы мне и так прекрасно помогли))) Спасибо большое!!! smile.gif


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.