需要MySQL表关系设计方面的帮助吗

需要MySQL表关系设计方面的帮助吗,mysql,Mysql,我正在为我的朋友创建一个网络应用程序,一个家庭教师学校系统。现在,我在设计存储教师记录的表时遇到了一个问题。以下是场景…1。我们必须先创建课程2。然后我们将教师添加到课程中(假设我们已经在教师表中存储了教师记录),每个课程可以有多个教师,每个教师可以教授多个课程。3。每次老师来教书,我们都做记录。每位教师在一门课程上教授不止一次。4。到月底,我们把所有的教学记录都拿出来,计算出我们要付的钱。这是我目前的表格 // Course Table course_id (PK) ... ... // T

我正在为我的朋友创建一个网络应用程序,一个家庭教师学校系统。现在,我在设计存储教师记录的表时遇到了一个问题。以下是场景…

1。我们必须先创建课程
2。然后我们将教师添加到课程中(假设我们已经在教师表中存储了教师记录),每个课程可以有多个教师,每个教师可以教授多个课程。
3。每次老师来教书,我们都做记录。每位教师在一门课程上教授不止一次。
4。到月底,我们把所有的教学记录都拿出来,计算出我们要付的钱。这是我目前的表格

// Course Table
course_id (PK)
...
...

// Teacher Table
teacher_id (PK)
...
...

// Course_teacher
course_id (FK: course.course_id)
teacher_id (FK: teacher.teacher_id)
问题是我无法将费用添加到课程教师表中,因为在我将教师添加到该课程的第一刻,还没有发生任何教学。如果我在此表中添加“费用”和“日期”列,数据将如下所示

1,1,null,null(这条记录在课程开始之前添加,我不喜欢有null字段))
1,1,502011-06-12(这条记录在老师第一次教学时添加)
1,1,502011-06-19(这条记录在老师第二次教学时添加)


我正在考虑添加一个类似的表格

//Teaching_fee
course_id (FK: course.course_id)
teacher_id (FK: teacher.teacher_id)
fee
paid_status
date
如果我这样做,
1。课程\教师将保留与课程相关的教师信息
2。教学费将保留教学费信息

它应该有效。但是,我脑子里的某些东西告诉我这是不对的。这两个表彼此相似,即使它们的创建目的不同

有什么建议吗

编辑1: 我刚想到一个主意。如果你这样做怎么办

//Course_teacher Table
id (PK)
course_id (FK: course.course_id)
teacher_id (FK: teacher.teacher_id)

//Teaching_fee Table
id (FK: course_teacher.id)
fee
paid_status
date
最终解决方案: 我决定按照b的建议去做

// Course Table
course_id (PK)
...
...

// Teacher Table
teacher_id (PK)
...
...

// Course Teacher Table
course_teacher_id (PK) // synthetic
teacher_id (FK)
course_id (FK)
...
...

// Teacher Fee Table
course_teacher_id (PK)
date_paid (PK)
fee
paid_status
...
...

这可能更正常

表费率卡 液体 费用 有偿身份 日期

表1教师卡 液体 拉特卡德
TeacherId

如果您使用的是“教学费”表而不是“课程费”,只要应用程序中的业务逻辑知道如何解释null(即费用尚未支付),我就不会担心费用值为null

然而,根据你的描述,这听起来像是一份记录,记录了老师每次为一门课程付费的时间,以及需要保留付款的日期?如果是这样的话,您肯定需要一个“教学费”表,其中教师id、课程id和支付日期的组合构成一个唯一的键。如果需要单独了解所有独特的教师/课程组合,可以查询“教学费”表。但是,如果在支付教师工资之前,在“教学费”中没有创建教师/课程组合,则可以使用单独的“课程教师”表

为了避免您对非规范化(重复)课程/教师组合的不满,另一种选择是如下构造表:

// Course Table
course_id (PK)
...
...

// Teacher Table
teacher_id (PK)
...
...

// Course Teacher Table
course_teacher_id (PK) // synthetic
teacher_id (FK)
course_id (FK)
...
...

// Teacher Fee Table
course_teacher_id (PK)
date_paid (PK)
fee
paid_status
...
...

谢谢你,伙计!!你完全知道我想说什么。是的,我正在考虑和你说的一样的解决方案。谢谢你,伙计,我会试试你的解决方案。会让你知道这是否有效。