问题描述
|
我正在为我的朋友(辅导学校系统)创建Web应用程序。现在,我在设计表以存储教师记录时遇到问题。这是场景... 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)
问题是我无法向Course_teacher表添加费用,因为在第一时间我将老师添加到该课程中,但是还没有任何教学活动。如果我将“ \ fee \”和“ \ date \”列添加到此表中,数据将类似于...
1,1,null,null(此记录在课程开始之前添加,我不喜欢包含null字段)1,1,50,2011-06-12(此记录在第一次添加1,2011-06-19(此记录是第二次在老师教学中添加)...我正在考虑再添加一张表格,例如
//Teaching_fee
course_id (FK: course.course_id)
teacher_id (FK: teacher.teacher_id)
fee
paid_status
date
如果我这样做1。 course_teacher将保留与Course2相关的教师信息。 Teaching_fee将保留教学费用信息
它应该工作。但是,我的想法告诉我这是不对的。这两个表彼此相似,即使它们的创建目的不同。
有什么建议吗?
编辑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
最终解决方案:
我决定按照建议做
// 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
...
...
解决方法
这可能更正常。
表格价目表
uid
费用
paid_status
日期
表Teacher_RateCards
uid
RateCardId
教师编号
, 如果您使用\'teaching_fee \'表而不是\'course_teacher \',则只要应用程序中的业务逻辑知道如何解释null(即费用),我就不会担心费用是否为null值尚未付款)。
但是,根据您的描述,这听起来像是每次为某门课程的老师付款的记录,以及付款的日期需要保留的记录?如果是这样,您肯定会需要一个\'teaching_fee \'表,该表中的Teacher_id,course_id和date_paid的组合构成一个唯一键。如果是单独的,则需要了解所有独特的教师/课程组合,可以查询\'teaching_fee \'表。但是,如果直到教师获得薪水才在“ teaching_fee”中创建教师/课程组合,最好有一个单独的“ course_teacher”表。
为了避免您对非正规化(重复)课程/教师组合不满意,另一种替代方法是按以下方式构建表格:
// 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
...
...