我有3个实体:导师,学生,课程
导师教授许多课程
学生可以被分配到许多导师教授的许多课程
导师和学生需要能够登录系统
我想使用下表来表示此设计:
users
- id
- username
- password
- first_name
- last_name
- email
- password
- phone
- role_id (Student or Tutor or Admin)
- created
- modified
roles (Student, Tutor)
- id
- name
- created
- modified
courses (The courses that Tutors can teach and that Students can be assigned to)
- id
- name
- created
- modified
users_courses
- id
- user_id
- course_id
- created
- modified
我对上述设计(users_courses表)的问题在于,假设我们有导师A和导师B来教授数学。如果学生X注册了该数学课程,我们无法知道学生X是否由导师A或导师B辅导。
我真的希望能够使用单个用户表来让所有用户都能让事情变得简单。
有什么建议吗?
答案 0 :(得分:1)
问题是你想以不同的方式处理学生和老师(学生参加由特定老师教授的课程),但你对他们进行了相同的模拟(他们只是用户)。
而不是roles
,创建users
的子类型。为teachers
和students
创建表格 - 您可以重用users
中的主键,但您将能够处理特定于子类型的属性和关系。
虽然可以只使用那些实体集,但我建议你也添加一个部分的概念。它在不同的系统或世界的某些地方有不同的名称,但我见过的大多数学校系统都有类似的东西来表示课程学生与相关教师的分区。
users
- id PK
- username
- password
- first_name
- last_name
- email
- password
- phone
- created
- modified
students
- user_id PK FK
teachers
- user_id PK FK
courses
- id PK
- name
- created
- modified
sections
- section_id PK
- teacher_id FK
- course_id FK
- created
- modified
students_sections
- student_id PK FK
- section_id PK FK
- created
- modified
在现实世界系统中,您还需要花时间考虑 - 学生和教师通常会在不同年份或学期参加不同的课程。
答案 1 :(得分:0)
我只是将“导师”添加到课程表中,因为它是课程的基本要素,可以知道谁在教授/导师。
然后使用users表或user_courses加入/匹配并提取所需的信息。
filter_var($email, FILTER_VALIDATE_EMAIL)