2013-10-13 2 views
0

У меня есть база данных и обычно пользователи являются центральным объектом.
В базе данных у меня есть таблицы roles и users in roles, поэтому я могу предоставить пользователям разные разрешения на сайте.
Но теперь у меня есть одно сомнение.
я видел перед одной базой данных со структурой, как это (Пользователь в соотношении 1: 1 по отношению к другим таблицам):От 1 до 1 проекта базы данных

User{UserId, Username, Email etc.} 
Admin{UserId, some specific columns} 
Child{UserId, some specific columns} 
Admin{Parent, some specific columns} 

и другие таблицы подключены к пользователю не через таблицу пользователя, а через Admin, Child and admin.
Потому что теперь я дизайн моей базы данных У меня есть Пользователи и пользователи могут быть Admin, CompanyManager and Professor.
Интересно, должен ли я проектировать стол, как показано выше, или просто полагаться на роли?
Что является преимуществом первого подхода?
А также в моей бизнес-модели Пользователь не обязательно должен быть CompanyManager или Professor, так что это на самом деле от 1 до 0 или 1 дизайн.
Что такое хороший способ создать базу данных со сценарием вроде этого?

+1

Это не соотношение 1: 1, это 1: 0/1 –

ответ

1

Преимущество наличия конкретных таблиц для определенных типов пользователей - хранить информацию, относящуюся только к этому классу пользователя.

В вашем примере,

  • возможно все пользователи будут иметь менеджер - поэтому менеджер ID будет идти в колонке пользователей.
  • У менеджеров есть разрешения на просмотр определенной информации, поэтому это будет обрабатываться через роль.
  • только у профессоров был бы предмет или свойство HasTenure. Таким образом, эта информация попадет в таблицу профессоров. Используя этот подход, вы избегаете необходимости иметь столбец «Тема» в таблице пользователей, когда он применим только к определенному подмножеству пользователей. Таким образом, вы избегаете функциональной зависимости в таблице пользователей и нарушении 3-й нормальной формы.
+0

Хорошо, эта концепция очень важна для меня, потому что я вижу, что это не плохая практика. Вопрос. У меня есть таблица Users с общими столбцами пользователей. И мне нужно несколько других пользователей ARE, но вам нужны дополнительные столбцы. Из вашего ответа я понимаю, что лучший способ - создать таблицы с 1 по 1 с пользовательской таблицей. Но когда я регистрирую нового пользователя в системе, мне нужно добавить его во все эти таблицы 1: 1, или я могу каким-то образом сделать это необязательным? Например, после регистрации, чтобы сохранять данные только Пользователям, а затем по запросу пользователя, чтобы добавить их к Профессору, например? – 1110

+0

@ 1110 Вы только создаете записи в таблице Professors для пользователей, которые являются профессорами, - отношения между пользователями и профессорами обычно обозначаются как 1: 0. Если вы добавили всех пользователей в таблицу профессоров, будь то профессора или нет, тогда вообще не будет никакой пользы для этого проекта :) – podiluska

0

Я предпочитаю этот подход:

enter image description here

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

Смежные вопросы