2012-03-25 6 views
1

Я создаю сайт, на котором пользователи будут включать клиентов и разных уровней админов. Какова рекомендуемая практика или что было бы правильным способом настройки таблиц БД для этого?DB Design for Admins & Customers

У обоих заказчиков и админов будет имя пользователя и пароль. Клиенты, тем не менее, также будут иметь CustomerCode и Location, а администраторы будут иметь разные уровни/роли.

Должны ли они быть отдельными объектами? Если да, то как мне относиться к этим двум?

Благодарим вас за вход.

+0

Аналогичный вопрос задается здесь: http://stackoverflow.com/questions/3511782/user-customer-admin-account-in-3-different-tables Я бы порекомендовал сделать несколько поисков здесь и Google. Существует много примеров, которые должны обеспечить адекватное решение для того, что вы ищете. Я лично разделил их на отдельные таблицы. Любая книга по СУБД и дизайну предоставит вам адекватное решение. –

+0

Когда вы говорите разные уровни админов, что вы имеете в виду? Существуют ли определенные привилегии, например. «установить время», «удалить планету», ...? Существуют ли ограничения в отношении их действий, например. пользователь, отдел, подразделение, корпорация, растения в горшках? – HABO

+0

@ user92546 Похоже на последнее (но, возможно, особое преимущество для будущего) - например: продавец может просматривать/редактировать только сообщения своих клиентов, Дизайнер может просматривать/редактировать все заявки клиентов. – Rivka

ответ

1

Существует три основных способа решения таких логических требований, как ваши, в таблицы БД: (1) использование единой таблицы для пользователей и администраторов, (2) использование двух отдельных таблиц и (3) использование трех таблиц, один из которых содержит общие данные среди двух категорий пользователей.

Первый и третий способы хороши для случаев, когда клиенты и администраторы должны иногда использоваться взаимозаменяемо; второй путь лучше, когда это не вызывает беспокойства. Я предпочитаю # 3, потому что это самый нормализованный способ моделирования двух видов пользователей.

+0

Итак, это будет что-то вроде учетной записи (accountid, username, password), Users (userid, accountid), клиентов (customerid, customercode, location, accountid). Тогда, я думаю, мне нужна таблица ролей и учетных записей (accountid, roleid) и, возможно, RolesPermissions. Теперь мой вопрос будет состоять в том, как я знаю, является ли пользователь клиентом или нет - будет ли у меня другое поле в таблице учетных записей, определяющих тип, или клиент будет другой ролью. Спасибо за ваш вклад. – Rivka

+0

Кроме того, это похоже на 3 таблицы, это, по крайней мере, 2 шага, чтобы получить информацию о пользователе - сначала проверьте, какой тип пользователя (или роль или другой столбец), и на основе этого, выберите из любой из таблиц? – Rivka

+0

@ Becky вы получили дизайн стола правильно. Вы знаете, какой тип учетной записи существует, запустив внешнее соединение таблицы 'account' с двумя другими. Если вы видите ненулевой 'customerid', это клиент; если вы видите ненулевой 'userid', это пользователь. – dasblinkenlight