а теперь понадобилось обновление некоторых полей таблицы, как мне осуществить перезапись без потери старых данных?
создала дубликат таблицы - только с теми полями, которые нужно переписать,
в итоге в главной таблице - у меня последняя версия данных, а в таблице вспомогательной храниться история перезаписанных полей, но в этом случае получается что
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 обнуляются (но в истории должны храниться и когда было обнуление, тоже нужно хранить) Для этого я и сделала вспомогательную таблицу - решений.
Главная таблица хранит данные всех студентов.
Поля для изменения - это решения степендиальной коммиссии о начислении стипендии,
проходит коммисия в два этапа.
Если студент по оценкам проходит, выносится первое решение - поле a1, допускается на конкурс второго этапа, принимается решение - поле b1.
Но бывает что студент прересдал экзамен, тогда нужно принимать решения заново.
Решения a1 и b1 обнуляются (но в истории должны храниться и когда было обнуление, тоже нужно хранить) Для этого я и сделала вспомогательную таблицу - решений.
Спустя 5 минут, 11 секунд (20.05.2010 - 07:25) HardWoman написал(а):
Если вы намереваетесь каждый раз дублировать всю строку при перезаписи одного значения этой строки - это будет оправдано, вероятно только при необходимости достать не только последнее обновляемое значение, но и другие - которые идут в связке строки.
Если у вас есть только необходимость посмотреть не общее редактирование, а по одному полю - я бы поступила так. Не факт что оптимальное решение - создала бы отдельную таблицу, естественно не ту, которая повторяет первую и дублирует записи.
А присвоила бы каждому полю логическую метку. Поле 1 - 1, поле 2 - 2 - то есть ввела бы идентификаторы логики полей. И в таблице бы хранила ID метку поля, ID значения, ID даты обновления этого поля.
Если же вам нужно знать состояние других полей при поиске для конкретной архивной записи - придется писать все. И не оставлять поля пустыми, а перезаписывать и состояния даже не измененного поля.
Если у вас есть только необходимость посмотреть не общее редактирование, а по одному полю - я бы поступила так. Не факт что оптимальное решение - создала бы отдельную таблицу, естественно не ту, которая повторяет первую и дублирует записи.
А присвоила бы каждому полю логическую метку. Поле 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
Первая таблица - это таблица Юзер которая содержит только лишь данные по студентам - фамилия адрес курс. В нее можно допустим добавить столбец по последнему изменению его состояния по стипендии - никаких отдельных столбцов под каждое состояние. То есть - решение 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 написал(а):
Цитата |
Хранить эти данные в таблице - значения нет необходимости |
просто на каждрм этапе коммисия выносит обоснование решения, вот это обоснование мне и нужно перезаписывать и хранить в архиве- это не просто метка, а текстовое поле.
как быть?
Спустя 1 минута, 41 секунда (20.05.2010 - 08:39) HardWoman написал(а):
Ну так и создайте еще таблицу откуда я могу знать что там вам еще нужно.
Или добавьте просто поле для текста в таблицу хистори.
А вообще общаться с вами хочется все меньше и меньше - никаких знаний азов и желания их узнать. И постоянно невменяемые вопросы - как будто вы мой заказчик и я пытаюсь из вас вытащить что вам нужно.
Чет не хочется вам больше помогать - не буду
Или добавьте просто поле для текста в таблицу хистори.
А вообще общаться с вами хочется все меньше и меньше - никаких знаний азов и желания их узнать. И постоянно невменяемые вопросы - как будто вы мой заказчик и я пытаюсь из вас вытащить что вам нужно.
Чет не хочется вам больше помогать - не буду
Спустя 10 минут, 51 секунда (20.05.2010 - 08:50) zvezda_t написал(а):
Вы мне и так прекрасно помогли))) Спасибо большое!!!
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)