Помещение ряда из таблицы в другую таблицу перед удалением

newARTix

Новичок
zerkms
Прочитал. Я понимаю о чем вы с iceman говорите. Что приложение или архитектура не использующая банальные возможности СУБД - плохое/плохая. И я согласен с этим утверждением. Не зачем изобретать велосипед, если все давно придумано.
НО. В указанной главе сказаны все ключевые слова:
Applications come, applications go. The data, however, lives forever. In the long term, the goal is not about building applications; it really is about using the data underneath these applications.

If you were developing a highly scalable, enterprise application on a brand-new operating system (OS), what would be the first thing you would do? Hopefully, your answer is, “Find out how this new OS works, how things will run on it, and so on.”

Все зависит от того, какие задачи решает разработчик. Видимо iceman тяготеет к большим, или уникальным приложениям, для которых допустимо и вполне эффективно вносить изменения в структуру существующей БД, для добавления новых функций. А я говорю о простых сайтах. У них допустим вообще не было функции версионности (о чем спрашивает ТС). Что сделаю я, чтобы добавить ее?
1) Добавлю таблицу в БД
2) Добавлю класс в PHP-код
3) Добавлю пару методов в классы объектов для которых нужна поддержка версионности
4) PROFIT!
Никаких переосмыслений того что уже и так работало.

А iceman предлагает _внести изменение_ в структуру БД, _внести изменения_ в php-код работы с БД. Плюс написать код которые будет-таки управлять всеми этим версиями.
Так где выгода-то? Так и не ответили вы :)

-~{}~ 12.09.10 13:47:

iceman
я уже писал - что во-первых это повышает нагрузку на БД. Да, я решил эту проблему, любую проблему можно решить, но она все-таки возникла, а могла бы и не возникать, если бы я сразу сделал отдельную таблицу для архива.
Во-вторых, уникальные поля идут к чертям. Запись типа удалена, но добавить новую с таким же кодом из 1С, например, нельзя, приходится опять решать проблему.

Это то что на вскидку вспомнил. + Опять же всегда приходится думать об этом, забивать самому себе голову.

Версионность на самом деле тут очень близко. Ты правильно сказал, что достаточно добавить всего одно поле. По сути у меня так и было сделано :) (uid, id, recent, edittime)
 

iceman

говнокодер
не не не, если использовать "представления", то добавив это поле и подкорректировав представление, заменив конструкцию delete from на update, если сразу небыло написано функции в бд для этого - больше ничо менять не нужно... ты дальше работаешь как не в чом не бывало...

это не версионность...

-~{}~ 12.09.10 16:11:

нагрузка на бд больше от кривых запросов, не знания бд, а не от кол-ва данных в таблице, тем более размер таблицы будет отличатся гдето на ~10-15%
 

qru

Новичок
Автор оригинала: prolis
http://dev.mysql.com/doc/refman/5.1/en/insert-select.html
[sql]
INSERT INTO backup_table
SELECT * from real_table where ID=$ID;
DELETE FROM real_table where ID=$ID;
[/sql]
Спасибо огромное prolis! Похоже то что я хотел как раз увидеть!

Единственное пока не разобрался как сделать так чтобы дата удаления (перемещения в другую таблицу) сохранялась.
Сделала поле timestamp в новой таблице с автоподстановкой текущей даты.. Но ответ тогда
Ответ MySQL:
#1136 - Column count doesn't match value count at row 1
из-за того что число колонок не совпадает..

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

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

prolis

Новичок
может так
[sql]
INSERT INTO backup_table
SELECT t.*, now()
FROM real_table t
WHERE ID = $ID;
[/sql]
 
  • Like
Реакции: qru
Сверху