2

Задача звучит так: Вашими клиентами являются различные лица, о которых вы собираете определенную информацию (паспорт,Фио,телефон).Кроме того в зависимости от вида клиента (частное лицо, представитель компании, постоянный арендатор) и т.д.(список может расширятся). Вы собираете дополнительную информацию (например для представителя компании :название, адрес; для постоянного арендатора : день рождение), которая может отличатся для каждого конкретного вида клиента. Как я делаю:

Есть таблицы:

  • клиенты { id_паспорт, фио, телефон }
  • вид клиента {id_вид_клиента, наименование}
  • дополнительная информация {id_паспорт, дополнительная информация}

Я думаю это не совсем правильно, но не могу придумать как должно быть. Пожалуйста, поделитесь идеями?

MihailPw
  • 6,384
All888
  • 55
  • 2
  • Сколько доп филдов для каждого из типов может быть? – MihailPw May 25 '17 at 09:27
  • Таблица клиентов. Таблицы для значений статических атрибутов (словари). Плюс EAV-таблица для динамических атрибутов. Возможно, таблица с шаблоном наборов EAV-атрибутов в зависимости от вида клиента. – Akina May 25 '17 at 09:29
  • @AGS17, для каждого типа может быть разное кол-во , например можно взять такие данные : представитель компании {название компании , адрес }, постоянный арендатор {место работы, семейное положение, дата рождения} – All888 May 25 '17 at 09:37
  • Как вариант, использовать XML/JSON для дополнительной информации. Зависит от СУБД. – Alexander Petrov May 26 '17 at 07:24

1 Answers1

1

Как я вижу структуру базы:

  • Clients { Id, TypeId, Name, Phone }
  • ClientTypes { Id, Title }
  • AdditionalFields { Id, ClientTypeId, FieldTitle, FieldType }
  • AdditionalInfo { Id, ClientId, FieldId, FieldValue }

Где в AdditionalFields:

  • FieldTitle - имя доп филда (например, День Рождения)
  • FieldType - тип доп филда (например, DateTime)

В AdditionalInfo:

  • FieldValue - значение доп филда (например, 2012-08-08)

И потом на основе этих значений получать, собственно, эти филды.

database scheme

MihailPw
  • 6,384
  • вариант понравился, но в этом случаи пользователю нужно будет где-то узнавать какие же доп поля вводить для выбранного типа клиента, т.е. получается для разных типов клиентов могут быть одинаковые доп поля – All888 May 26 '17 at 07:10
  • @All888 действительно, ваша правда. Обновил ответ. – MihailPw May 26 '17 at 07:17
  • спасибо большое, помогли, появилась потребность вести архив с информацией об изменениях данных о клиенте, опять наткнулась на трудности в построении схемы, был такой вариант Архив{id, data, idAdditianalField, Old value , New value }, но получается что поля name и phane из клиента не попадают туда, может быть будут идеи ? – All888 May 31 '17 at 17:40
  • @All888 задайте новый вопрос и опишите проблему подробнее (задать вопрос) – MihailPw May 31 '17 at 18:18