База данных для нескольких типов пользователей

#mysql #database

#mysql #База данных

Вопрос:

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

Я разрабатываю базу данных для нескольких типов пользователей. У меня есть одна основная таблица пользователей, которая включает ID, имя пользователя, пароль, PasswordSalt, AccountType (перечисление) и lastLoginDate. Мне нужно иметь несколько типов учетных записей: ученик, родитель, школьный администратор, системный администратор, координатор и учитель. Изначально я думал о создании отдельной таблицы для каждого из этих типов учетных записей, но я понял, что SchoolAdmin, Coordinator, SystemAdmin и Teacher используют одни и те же данные. Однако все эти типы учетных записей имеют разные разрешения. Учетные записи учащихся и родителей содержат дополнительную информацию, которую они должны хранить.

Затем я подумал о добавлении информации, которую разделяют 4 идентичные таблицы, в таблицу User, а затем об удалении этих таблиц, но я столкнулся с другой проблемой. Мне нужно ссылаться на разные типы учетных записей в других таблицах. Например, у меня был внешний ключ для TeacherID в таблице Club, чтобы показать, кто является спонсором клуба. Если я добавлю информацию в таблицу User и избавлюсь от этих других таблиц, то как мне ссылаться на определенный тип учетной записи в другой таблице?

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

Комментарии:

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

2. @Velcromancer Спасибо за ответ. Если бы я это сделал, то как бы я обрабатывал ссылки на определенные учетные записи в других таблицах? В примере, который я использовал выше с учителем и клубом, спонсором может быть только учитель. Никаких других типов учетных записей.

Ответ №1:

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

Наследование одной таблицы

Наследование таблицы классов

Наследование конкретной таблицы

Каждый из различных подходов имеет свои плюсы и минусы, поэтому выбирайте с умом.

Комментарии:

1. Какую из них вы бы предложили? Я думаю, что я застрял между бетоном и классом. Я бы хотел избежать использования одной таблицы @jandresrodriguez

2. @dabecks Чтобы найти решение, вы должны увидеть плюсы и минусы, например. Таблица классов требует большого количества соединений между таблицами, конкретная таблица затрудняет управление идентификаторами. Повторяю, лучше всего для вас увидеть оба и проанализировать их.

3. Поскольку мне не нравится проверять несколько таблиц на наличие одних и тех же данных, я бы, вероятно, использовал метод наследования одной таблицы. Если вы можете (и, пожалуйста, имейте в виду, что это займет очень много времени, особенно если вы новичок в PHP / MySQL), найдите систему разрешений phpBB3. Это очень интересный набор разрешений с расширяемыми наборами для пользовательских действий и плагинов. Очень разнообразная. Я несколько раз модифицировал ее для разных проектов. Я уверен, что WordPress или другое популярное программное обеспечение на базе PHP / MySQL было бы так же интересно.