2

В настоящее время я работаю над проектом, в котором вы сохраняете детали лектора и ученика. Я не уверен, что я должен использовать одну таблицу User или две таблицы Lecturer и Student.Должен ли я сделать 1 или 2 таблицы для лекторов и студентов в MySql?

Когда вы входите в систему как лектор, у вас есть особые привилегии в качестве страницы управления группой для проектов, на странице группы, когда она загружается, что у ученика не будет. В User tbl появится столбец status, где на странице регистрации вы можете выбрать студент или лектор и ввести специальный код преподавателя . Я использую PHP с mySql.

В целом, следует ли использовать таблицу 1 User как для ученика, так и для преподавателя или иметь 2 отдельных стола Student и Lecturer.

Дополнительная информация: 1 курс может иметь много преподавателей и студентов, но 1 студент будет иметь 1 курс, где у лектора есть много курсов.

+0

Это зависит от ваших данных. Если все пользователь имеет одни и те же основные данные, и только их тип меняется, используйте 1 таблицу с полем флага. – vaso123

+2

Да, очень зависит от данных. Возможно ли, чтобы лектор был студентом в классе другого преподавателя? Если это так, у вас будет один человек, который будет сохранен как два объекта, если вы идете на две разные таблицы, что обычно плохое. Я, конечно, склоняюсь к одному столу, но это будет зависеть от деталей вашей модели и вашей реальности. Предложение @ ctrahey добавить идею «роли» к одной таблице пользователей - это очень традиционное и хорошо проверенное решение проблемы. –

+0

Некоторые данные различаются в таблице Студентов, поскольку у Студента есть CourseID как иностранный, поэтому я предполагаю, что мне нужно будет удерживать Студента и Лектора в отдельных таблицах. У студента много преподавателей, и у лекторов много учеников, и в настоящее время я использую таблицу ссылок в базе данных, чтобы соединить их. Я предположил, что могу разместить оба в одной таблице пользователей. – drapu

ответ

7

Большой вопрос!

Это может показаться сложным, но если вы хотите масштабировать эту систему, я настоятельно рекомендую моделировать это немного более «нормализованное». Вы уже на правильном пути, понимая, что и преподаватели, и студенты - это одно и то же лицо (люди/пользователи). Хитрость заключается в том, что вы должны моделировать «роли», а затем моделировать роли пользователя. Это составляет 3 таблицы для этой небольшой части вашей модели.

USERS    USER_ROLES   ROLES 
+------------+  +----------+   +--------+ 
| id   | <--> | user_id |  /-->| id  | 
| login_name |  | role_id | <--/ | name | 
| etc  |  +----------+   +--------+ 
+------------+ 

users 
====== 
id 
login_name 
etc 

roles 
======= 
id 
name 

user_roles 
=========== 
user_id 
role_id 
since 

Примеры данных

USERS 
+----+------------+ 
| id | login_name | 
+----+------------+ 
| 1 | Chris  | 
+----+------------+ 
| 2 | Cherri  | 
+----+------------+ 


ROLES 
+----+------------+ 
| id | name  | 
+----+------------+ 
| 1 | Lecturer | 
+----+------------+ 
| 2 | Student | 
+----+------------+ 

USER_ROLES 
+---------+---------+ 
| user_id | role_id | 
+---------+---------+ 
| 1 |  1 | <-- Chris is a Lecturer 
+---------+---------+ 
| 2 |  2 | <-- Cherri is a student 
+---------+---------+ 
| 2 |  1 | <-- Cherri is also a lecturer 
+---------+---------+ 
+1

@minboost это не сложно. Это очень гибкое решение, которое также очень однозначно. – binnyb

+0

Это решение требует 3 таблиц и, предположительно, интерфейс для управления ролями. Он не содержит NO ADVANTAGE поверх моего решения с одним столбцом (что также допускает несколько ролей, если вы рассматриваете его как поразрядное).Единственный раз, когда это имело бы значение, было бы, если бы у вас была дополнительная таблица для управления разрешениями для ролей, но в этом случае вы просто создаете две дополнительные таблицы для размещения метки в роли. – minboost

+1

@minboost. Это хороший контраст, но я хочу отстаивать прочные шаблоны программного обеспечения, особенно. на SO, где многие будущие посетители найдут этот пост, и у них могут быть несколько разные потребности. Хорошее моделирование данных - одна из самых прочных частей в программном пакете. Я думаю, что это стоит инвестиций. –

-2

Используйте одну таблицу с полем, которое указывает, если это студент или преподаватель. Это может быть простое целое имя столбца «роль», где role = 0 означает, что учащийся и роль = 1 означает лектора.

Это просто, быстро реализовать и соответствует требованиям.

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

  • Нет связанных вопросов^_^