Модель базы данных MySQL для регистраций с адресами и без - PullRequest
0 голосов
/ 09 июня 2011

Я думал об этом весь вечер (по Гринвичу), но не могу найти хорошее решение для этого. Вот случай ...

Я должен создать систему регистрации, которая различает 4 вида «пользователей»:

  • Индивидуальные регистрации (требуется информация об адресе)
  • Регистрация в группах (не требуется информация об адресе)
  • Групповой контакт (требуется информация об адресе)
  • Пользователи приложения (не требуется информация об адресе)

Я действительно не могу придумать достойный способ смоделировать это во что-то, что имеет смысл. Я был бы очень признателен, если бы вы поделились своими идеями.

Заранее спасибо!

Ответы [ 5 ]

0 голосов
/ 09 июня 2011

Я решил пойти на конструкцию, где члены группы в любом случае отделены от пула пользователей.Члены группы в конечном итоге не имеют никакого отношения к пользователю, поскольку им не требуется доступ к изменению их личных данных, для этого и нужен контактный человек группы.В конце концов я мог бы добавить для групп возможность иметь несколько контактных лиц, даже различать людей, которым разрешено или запрещено редактировать какие-либо данные участника.

Это мой ответ на этот вопрос.

0 голосов
/ 09 июня 2011

Вот предложение от моего конца после взвешивания за и против на этой модели. Поскольку я считаю, что идеальной настройкой является то, чтобы все пользователи были пользовательским объектом, который принадлежит к группе, не отделяя группы от отдельных лиц (за исключением, конечно, пометки контактного лица группы и создания ссылки с таблицей групп), мы предложили альтернативу при создании группы скопируйте данные пользователя контакта группы для членов группы.

Таким образом, все сущности, которые на самом деле являются человеком, получат свой собственный стол.

Может быть, это хорошая идея? Жду ваших комментариев:)

0 голосов
/ 09 июня 2011

Требование определенных данных больше зависит от логики вашего приложения, чем от вашей базы данных. Вы можете определенно определить столбцы базы данных, которые не допускают значений NULL, но они могут быть установлены в «» (пустая строка) без каких-либо ошибок.

Что касается структурирования вашей базы данных, есть две отдельные таблицы:

  • Пользователь
  • UserAddress

Если у вас есть новая регистрация, требующая контактную информацию, ваше приложение будет создавать записи в обеих таблицах. Если для новой регистрации не требуется информация об адресе, ваше приложение будет создавать запись только в таблице «Пользователь».

0 голосов
/ 09 июня 2011

Здесь есть пара соображений: во-первых, мне нравится смотреть на пользователя / группу как на случай составного шаблона. Это четко соответствует требованию: вам часто приходится обращаться с совокупной и индивидуальной версиями сущности взаимозаменяемо (как вы заметили). Реализация составного в базе данных не так сложно. Если вы используете ORM, это довольно просто (наследование).

С другой стороны, у вас всегда есть возможность создавать структуры данных, которые в основном пусты. Вообще, это плохая идея. Таким образом, вы можете сказать: «Ну, в начале, у нас нет никакой информации о Пользователе, поэтому мы просто оставим все остальные поля пустыми». Лучше всего попытаться смоделировать фазы, как если бы они были частью FSM. Один из самых ясных способов сделать это в этом конкретном случае состоит в том, чтобы различать пользователей, учетные записи и некоторые другие более специфичные для домена объекты, например, Подписчик или Клиент. Затем я могу зайти и просмотреть с помощью пользователя, зарегистрироваться и создать учетную запись, а затем, когда вы захотите адрес и другую личную информацию, стать подписчиком. Это также подразумевает наследование, и у вас есть дополнительное преимущество, заключающееся в том, что вы можете иметь точное представление о населении в любое время, которое не требует глупых махинаций, таких как «SELECT COUNT (*) WHERE _ not null и т. д.

0 голосов
/ 09 июня 2011

Звучит как хороший случай для наследования одной таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...