2016-12-05 3 views
0

У меня есть 3 типа пользователей (пользователей, модератор, администратор). И конкретные данные для всех 3 (пользователи имеют имя, админы имеют телефонные номера ...)Моделирование базы данных, пользователь, модератор, администратор

Мое решение для ролей состоит из двух таблиц «Пользователи» (id, name ...), одной таблицы «Роли», (id role, name ...) и одна таблица xref usersXrefRoles (таблица соединений) (IDusers, IdRoles) , но это НЕ решение для части «все 3 таблицы имеют разные поля», другими словами, я должен иметь 3 отдельных таблицы (пользователи, модератор, администратор) или какое-то наследование?

Какова наилучшая практика для этого вопроса?

+0

Действительно ли поля действительно разные? Если они не такие разные, просто поместите их все в один стол и оставьте те, которые вам не нужны. «Лучшая практика» продиктована другими ограничениями, например, например, сколько других таблиц нужно ссылаться на таблицу пользователей? –

ответ

0

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

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

Кроме того, читайте о RBAC и ACLs как альтернативы статическим ролям. Многие популярные фреймворки поставляются со встроенной поддержкой или расширениями для такого решения.

+0

Thx для быстрого ответа, пользователи имеют имя, телефон, город, модераторы имеют последний знак. Дата, категория (fk) ... У админов есть продукты и т. Д., Поэтому поля совершенно разные. Я принял ваш совет, и подклассификация - это то, что мне нужно. thx again – TestAndSet

+0

@TestAndSet Я бы настоятельно рекомендовал вам иметь только одну таблицу пользователей и все описанные столбцы для всех пользователей. Продукты будут иметь только «user_id», принадлежащие администратору, и пользователи, которые не относятся к категории, будут иметь категорию «нуль». Подклассификация осложнит ваше приложение и значительно усложнит «продвижение» пользователя, чтобы стать администратором или модератором. – ddinchev

0

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