gpt4 book ai didi

php - 数据库设计模式帮助 2 个实体

转载 作者:可可西里 更新时间:2023-11-01 08:07:33 26 4
gpt4 key购买 nike

假设我在一个网站上有两个不同的实体。

老师和学生

他们都登录了网站。现在我有以下表格

**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 和 Teacher 表中添加一行。

当教师注册时,我在 Users 和 Teacher 表中添加一行。

只有一个表 Users 具有以下字段是否更好?

**Users:**

- id
- ACT
- GPA
- SAT
- average_class_size
- salary
- classroom_no
- role (0 = teacher 1 = student)

即使有些行会引用教师(因此不使用 ACT、SAT、GPA 字段)

??

谢谢!

最佳答案

如果您不熟悉数据库规范化,请阅读this .

除非性能是一个严重的问题,否则我不会考虑为这种结构使用单个表。随着项目的推进,您很可能会为每个角色添加更多字段,也可能会添加更多角色。维护这一点将变得越来越困难。

我实际上会更进一步,将另一个称为 role 的概念引入您的应用程序,以及适当的数据模型来持久化它。

你的表应该是:

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

拥有一个单独的角色表可以让您将身份验证表(用户)与其余数据分开。如果用户既可以是老师又可以是学生,这可能会变得很重要。 p>

这应该让您对如何构建数据库有一个基本的了解。

您可能会发现您将开始对其他一些概念(如系统中的类)进行建模。因此,添加适当的表可能类似于:

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

教师教室等项目现在移至类(class),允许教师教授多个类(class)(也许您需要重新添加“家庭房间”的概念)。然后,教师的平均类(class)人数就变成了一个计算(尽管为了提高效率,您可能仍想存储它)。

希望这有助于引导您朝着正确的方向前进!

关于php - 数据库设计模式帮助 2 个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8198861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com