Как обновить уже присутствующие данные на сайте, только после модерации?
Всем привет, первый раз задаю вопрос, большой гоогле не помог :D другими ни привык пользоваться, та и думаю что результаты теже самые.
Есть задача:
На сайте есть страницы пользователей с информацией о их деятельности, зубные врачи, кардиологи и тд.
Есть возможность изменить ети данные.
И хотелось бы чтоб сначала ети измененные данные были видны только пользователю а когда етот удовлетворен всеми изменениями, то отправляет их нам на просмотр а мы решаем обновлять или не обновлять то что уже есть на сайте у етого пользователя.
По моему без двух таблиц не обойтись, пихать все в одну и туже меняя идентификатор не красиво кажется, шяс так и есть. Но вот думаю если я сделаю копии таблицы пользователя и всех реляцыонных то тоже как то слишком наворочено, но уже логичней.
И отсюда вопрос специалистам. Какой самый лучший вариант это реализовать пользуясь PHP, MySQL.
Данные: Имя, Фамилия ... Адрес, Описания, координаты (уже в другой реляционной таблице) .. Картинки (еще одна таблица) ... время работы с 8:00 - 13:00 (еще одна таблица). Пользователь может захотеть их изменить так как ему больше нравиться, или захотеть нагадить сайту и написать что попало, дублирование не нравиться потому что в будущем может прибавиться еще таблиц ...
Про картинки согласен, про координаты мог бы согласиться, ну они нужны только для карты а во время показа всех пользователей отлегают, и время ... как зачем другая таблица? Данные привязаны к пользователю ну у них другой формат, они могут понадобиться выбирая из базы данных без пользователя, так учили ... нормализация базы данных типа ...
Отлегают, в смысле не нужны. Другой формат, таблица имеет поля от-до "утром", от-до "днем", рабочий день или нет ... вклеить их в ту же что содержит главные данные слишком не красиво, я в таком случае предпочитаю создавать еще одну и связывать по id, и работать с первой по одной модел, а с другой по другой модел, методы что нужны для главных данных одни, а методы чтоб работать с временем другии, вот и организую как могу.
Полей должно быть столько, сколько нужно. Если в таблице с временем работы делается больше одной записи для пользователя одного пользователя - тогда она оправдана. Но если это просто вынесение пары полей в другую таблицу - смысла нет. Ладно, в любом случае сериализованный массив решает проблему. Только с картинками надо будет повозиться.
FanatPHP: Понятно, спасибо за пояснения :) про массив согласен. А картинки уже со статусом, еще два статуса придумаю чтоб только нам и обладателю были видны
можно внедрить механизм ревизий.
в текущий момент активна одна ревизия, при изменении данных создается новая ревизия со статусом аля "требует модерации". соответственно ее модератор может сделать активной.
1. добавить поле revision_id во все таблицы в которых хранятся пользовательские данные.
2. добавить таблицу user_revisions, в которой будет: user_id, revision_id, approved (плюс опционально timestamp создания ревизии, етц.).
3. изменить механизм загрузки данных юзера - в случае если просматривает сам юзер - грузить последнюю ревизию, если посетители - последнюю ревизию у которой approved = 1
4. изменить механизм сохранения данных при редактировании - каждый раз должна создаваться новая ревизия (запись в user_revisions), и с ее id добавляться записи в таблицы данных.
тут возможны варианты - дабы не плодить лишние ревизии, то вплоть до положительной модерации можно все изменения сохранять в одну ревизию.
5. ну и само собой запилить механизм модерации, при котором админ может просматривать ревизию, и менять ее approved на 1.
6. если задействована EAV модель, то возможно делать будет сложнее, но суть та же.
Алексей Яхненко: Спасибо очень хорошо описаны все моменты, я к етому добавлю то что на стаковерфлове мне подсказали и выйдет супер на мой взгляд, а подсказали хранить объект данных в json вместо дублирования.