Структура БД учета клиентов

485
02 января 2017, 22:33

Суть следующая, нужно сделать БД учета звонков клиентов и учета заказов.Манипулирования с БД будет происходить через PHP. Клиенты звонят и спрашивают цену на выполнения строительных работ.
Менеджер фиксирует все эти заявки(звонки) от клиента в таблицу слудующей стуктуры.

--Таблица заявки --
-id
-Имя
-Фамилия
-Телефон
-адрес
-тип работы (id_type - внешний ключ с таблици типы)
-Статус(Принято,отказано,заказано,дорого,клиент думает)
-Дата заявки

Нужно сделать так, когда статус будет "Заказано" то создавать, нового клиента (в таблице клиентов) на основе данных из таблици заявки (ФИО, телефон, адресс, и еще пару данных). Пока статус другой, нечего не делать. Проблема заключается в следующем, клиент через время может опять позвонить, и эту заявку нужно зафиксировать, соотвественно если статус клиента будет опять "Заказано" то мы его будем заносить в таблицу клиентов, и получится дублирования одного и того клиента.

Как это лучше всех с проектировать. И еще если статус заявки будет "Заказано", то еще будут вносится некоторые данные, вплоть до расчета стоимости работы. И я думаю нужно ли заносить их в таблицу заявки (по умолчанию заполнять нулями поля), или создать новую.

Answer 1

Вопрос лежит не столько в области дизайна, сколько в области администрирования. Поясню: таблица клиентов это т.н. мастер данные, которые критичны к дублям. Какую бы систему проверок ни организовывать, зловредные юзеры найдут способ завести что-нибудь типа:

  • ЧП Пупкин
  • ИЧП Пупкин
  • ПБОЮЛ Пупкин
  • Пупкин ЧП
  • ЧП Пупкинд
  • Ч.П. Пупкин
  • ну и.т.д.

Более-менее проверенный паттерн здесь такой:

  1. Кидаем новых клиентов в промежуточную таблицу, например tmp_customer
  2. Поручаем Светке Соколовой (в идеале в больших организациях имеется отдел Мастер Данных) ежедневно организовывать выгрузку новых записей из tmp_customer в customer с соответствующей проверкой на наличие дублей.
Answer 2

и получится дублирования одного и того клиента.

Эту проблему проще всего решить созданием клиента при первом обращении, как составную часть процедуры фиксации обращения. При этом по мере ввода информации оператором вводимые данные сверяются с существующей базой клиентов, и если введённой информации достаточно для отбора небольшого (навскидку - не более 4-5) количества записей о клиентах, то выводятся сведения о них с предложением выбрать из существующих (что не исключает продолжения заполнения формы и ввода клиента как нового). Возможно, что после выбора ещё придётся и корректировать (скажем, у клиента со времени прошлых заказов сменился номер телефона). Если же соответствий много - выводится только количество совпадений.

READ ALSO
Проблема с удаленным подключением к БД MySQL

Проблема с удаленным подключением к БД MySQL

Добрый день! Есть MySQL сервер, расположенный на хостингуК нему создается подключение из програмы написаной на Java + Hibernate

419
libGDX прорисовка объекта с сохранением

libGDX прорисовка объекта с сохранением

Ребят, нужно что бы объект передвигался и оставлял за собой след

452
Принцип open/closed при работе с контруктором

Принцип open/closed при работе с контруктором

Разбираясь с принципами SOLID возникли некоторые вопросы в пониманииА именно, нормально ли изменяеть конструктор класса, если появилась необходимость...

474
Рефактор метода onCreateView

Рефактор метода onCreateView

Есть фрагмент, в котором метод onCreateVew:

457