Разработка базы данных нескольких типов пользователей CakePHP - PullRequest
0 голосов
/ 18 июля 2011

Из-за ограничения CakePHP использовать только пользователя в качестве пути для входа в Auth, я должен изменить настройки типа пользователя. Я попробовал какой-то причудливый код для перезаписи метода identifier () в компоненте Auth, но это не решило проблему. Я использую поле Роль, чтобы различать премиум-пользователей и обычных пользователей.

У меня есть пользователи и компании, которым необходимо войти в систему и выполнять действия отдельно. Почему бы не 1 пользовательская таблица с полем usertype? Потому что они имеют 75% различных полей внутри таблицы.

В моей новой настройке у меня есть 1 таблица пользователей и отношение HasOne с компанией или участником (бывшая таблица пользователей). Внутри таблицы User находятся общие поля, в том числе адрес электронной почты и пароль для входа в систему (для проверки подлинности принудительно использовать пользователя).

Это выглядит так:

Пользователи таблицы:

  • ID
  • имя
  • Адрес электронной почты
  • пароль
  • member_id, NULL (FK)
  • company_id, NUll (FK)
  • role_id (FK)

Член таблицы

  • ID
  • конкретное поле х
  • конкретное поле у ​​
  • ...

Таблица компаний

  • ID
  • конкретное поле а
  • конкретное поле b
  • ...

Ужасно то, что таблица User всегда будет иметь значение Null, поскольку пользователь является членом или компанией

ДРУГОЕ решение может быть направить ФК на другую сторону. Таким образом, user_id будет внешним ключом в таблице Member and Companies.

Пользователи таблицы:

  • id
  • имя
  • Адрес электронной почты
  • пароль
  • role_id (FK)

Член таблицы

  • user_id (FK / PK)
  • конкретное поле х
  • конкретное поле у ​​
  • ...

Стол компании

  • user_id (FK / PK)
  • конкретное поле а
  • специфическое поле b
  • ...

Я застрял, и у меня нет опыта нормализации и проектирования баз данных, чтобы выбирать между вариантами. Или, может быть, оба решения ужасны, и другое решение должно быть. Спасибо!

1 Ответ

0 голосов
/ 20 июля 2011

хорошо, вы должны использовать таблицу групп для обработки пользовательских типов, то есть одна пользовательская таблица с общими полями, такими как имя пользователя и пароль, и внешний ключ, принадлежащий таблице групп, и одна таблица для таблицы групп групп может иметь разные типы групп, напримерnormal_user или компания.Таким образом, вы сможете обрабатывать столько разных типов пользователей, сколько захотите.И даже если у вас есть много разных полей для каждого типа пользователей, вы можете создать для них отдельные таблицы (если у вас есть только 2-3 типа пользователей, которые абсолютно разные), например, company_details user_details, и добавить в них поля, относящиеся к этому типу пользователей,и включить один внешний ключ вместе с полем типа в таблице групп.Теперь таблица групп будет иметь details_id из любой таблицы подробностей.Вы можете выбрать конкретные данные на основе поля типа в группах, т. Е. Если типом является Normal_user, объедините его с таблицей user_detail, если это объединение компании с таблицей компании.Но вам придется сделать некоторую ручную работу, потому что торт не сможет правильно присоединиться к таблице групп.

Таблица: groups id, details_id (Не уникально), тип, имя, other_fields...

Таблица: пользователи id, group_id, имя пользователя, пароль, другие_поля ...

Таблица company_detail id, конкретные поля ... Таблицы других групп

...