Дизайн базы данных: 3 типа пользователей, отдельная или одна таблица? - PullRequest
49 голосов
/ 12 декабря 2011

У меня есть 3 типа пользователей:

  • Администраторы
  • Поставщики
  • Сотрудники

Каждый тип пользователя будет иметь разных пользователейинтерфейс и доступ к различным типам данных.Их единственное сходство в том, что они используют одно веб-приложение, но имеют доступ к совершенно разным вещам.Лучше ли поместить их все в одну пользовательскую таблицу, такую ​​как tbl_users, или лучше создавать tbl_admins, tbl_suppliers, tbl_employees?

Ответы [ 5 ]

61 голосов
/ 12 декабря 2011

При разработке таблиц необходимо учитывать не обязательно то, к чему у них будет доступ и как они похожи / не похожи, а то, как сами уровни пользователей похожи / не похожи.

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

Это также облегчает изменение уровней привилегий для пользователя,посредством чего вы можете превратить обычного сотрудника в администратора, например, просто обновив запись в пользовательской таблице.

Если поставщики - это объект другого типа с атрибутами, отличными от двух других, поставщики могут принадлежатьих собственная таблица.

Или еще одна вещь, которую следует учитывать: вы можете использовать таблицу users, которая содержит только очень ограниченную информацию о пользователях всех трех типов, и если типы имеют расширенные атрибуты, которые нехорошо связаны друг с другом, вы можете хранить их в других таблицах с переднимключ зажигания возвращается к основной таблице users.

11 голосов
/ 12 декабря 2011

Существует также третий вариант: поместить столбцы, общие для всех пользователей, в tbl_users и создать три таблицы для tbl_admins, tbl_suppliers и tbl_employees, соединяющихся с tbl_users, от 1 до 0. 0,1. Этот вариант следует рассматривать как альтернативу, когда число общих столбцов является значительным.

2 голосов
/ 12 декабря 2011

Это зависит от того, насколько похожи их структуры данных.Если они похожи, то, возможно, вы могли бы положить их все в одну таблицу.Но если у них много разных полей, и в итоге вы получите множество значений NULL ... и тогда лучше, чтобы они были в отдельных таблицах.

0 голосов
/ 24 января 2017

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

Проще, если вы централизовали это таким образом.

Забота о том, как / к чему они получают доступ, будет связана с разработанным вами программным обеспечением. Вы можете извлекать / сжимать пользовательский интерфейс [или любой другой объект, к которому они обращаются в программной системе], исходя из типа вашего пользователя.

Я обычно просто прячу и показываю вещи в соответствии с типом пользователя, которого я имею

Надеюсь, это поможет ..

0 голосов
/ 12 декабря 2011

Лучше всего хранить все свои данные для входа в одном месте.Если бы вы когда-либо вносили изменения в процесс входа в систему, наличие 3 разных таблиц означало бы необходимость изменения кода в 3 разных местах.

Если пользователь может принадлежать к нескольким ролям, рассмотрите возможность создания UserRolesТаблица.В противном случае добавление дополнительного поля в существующую таблицу, например RoleType, поможет дифференцировать пользователей разных типов.

...