假设我在一个网站上有两个不同的实体.
师生.
**Users**
- id
- email
- password
**Students**
- GPA
- SAT
- ACT
- user_id references Users ID
**Teachers**
- user_id references Users ID
- classroom_no
- salary
- average_class_size
因此,当学生注册时,我在“用户”和“教师”表中都添加了一行.
**Users:**
- id
- ACT
- GPA
- SAT
- average_class_size
- salary
- classroom_no
- role (0 = teacher 1 = student)
即使某些行将引用教师(因此不使用ACT,SAT,GPA字段)
??
谢谢!
解决方法:
除非性能是一个严重的问题,否则我不会考虑在此结构中使用单个表.随着项目的进行,您很有可能会向每个角色添加更多字段,并且可能还会添加更多角色.维持这一点将变得越来越困难.
我实际上将更进一步,并在应用程序中引入另一个称为角色的概念,以及用于持久化它的适当数据模型.
您的表格应为:
users:
- id
- email
- password
roles:
- id
- type
user_roles:
- user_id
- role_id
role_teacher:
- user_id
- classroom_no
- salary
- average_class_size
role_student:
- user_id
- GPA
- SAT
- ACT
拥有单独的角色表将使您可以将身份验证表(用户)与其余数据分开.如果用户既可以是老师又可以是学生,这可能变得很重要.
这应该使您对如何构建数据库有基本的了解.
您可能会发现您将开始对系统中的其他概念(例如类)建模.因此,添加适当的表可能类似于:
role_teacher:
- user_id
- salary
classroom:
- id
- capacity
class:
- id
- name
- teacher_id
- classroom_id
- start_date
- end_date
class_enrollment:
- class_id
- student_id
- enrollment_date
- grade
诸如教师教室之类的项目现在移至该班级,允许教师教授多个班级(也许您需要重新添加“家庭教室”的概念).然后,教师的平均班级人数只是一个计算(尽管出于效率考虑,您可能仍要存储它).
希望这有助于指导您正确的方向!