1

我在关系模型中有以下关系(表)

Person
  person_id, first_name, last_name, address

Student
  person_id, matr_nr

Teacher
  person_id, salary

Lecture
  lecture_id, lect_name, lect_description

Attendees
  lecture_id, person_id, date

我想知道学生和教师的功能依赖关系。

这些表是否尊重第三范式?哪些应该是这些表的主键?

4

4 回答 4

3

使用“表继承”(松散地)和连接表之类的概念,我会以这种方式进行设置:

 Person
  person_id, first_name, last_name, address

Student
  student_id, person_id, matr_nr

Teacher
  teacher_id, person_id, salary

Lecture
  lecture_id, teacher_id, lect_name, lect_description, date

Attendees
  lecture_id, student_id

其中 Student 和 Teacher 表从 Person 和 Attendees 表“继承”是 Lecture 和 Student 之间的 Join 表(teacher_id 在 Lecture 表中用于指定谁在教课。并且通过 Join table best practice 该表实际上应该命名为 Lecture_Student或类似的)

替代设计:(允许一个班级的多名教师)

Person
person_id, first_name, last_name, address

Student
student_id, person_id, matr_nr

Teacher
teacher_id, person_id, salary

Lecture
lecture_id, lect_name, lect_description, date

Lecture_Student
lecture_id, student_id

Lecture_Teacher
lecture_id, teacher_id
于 2010-06-10T17:24:51.317 回答
0

据我们所知,我认为它是 3NF 规范化的(密钥、整个密钥,只有密钥),但它可能无法解决您的问题域问题。

您的主键将是 _id 列 - 与会者除外。两个_id列都在哪里-但这不适合在不同日期参加同一堂课(或者从技术上讲,这会是不同的lecture_id吗?)因为这可能比你给的要大得多。

学生和老师的问题已经被提出——他们都是与会者,这就是你所知道的——所有的老师都可能在教,也可能只有其中一些在教,或者他们可能是同龄人(比如研讨会)

我认为这首先是一个领域建模问题,然后是规范化......

于 2010-06-10T17:15:32.850 回答
0

“这些表是否尊重第三范式?”

这个问题只有在你告诉我们键是什么以及完整的功能依赖集是什么时才能回答。

否则,任何人给出的任何答案都只能是回答者非零猜测的结果,并且您无法保证该猜测与您的业务现实相符。

也就是说,您可以查看与会者。很可能那里有什么烂东西。

(嘿,你声称自己不想被喂食。)

于 2010-06-10T19:13:38.383 回答
0

这绝对不是3NF。上述问题的一个简单、规范化的设计(假设 person_id 唯一标识教师和学生,并且每堂课有一位教师)如下:

Person
  person_id (PK), first_name, last_name, address, Student_matr_nr, Teacher_salary

Lecture
  lecture_id (PK), teacher_person_id (FK), lect_name, lect_description

Attendees
  lecture_id (PK), student_person_id (PK), date

具有相同键的关系是相同的关系

于 2010-06-11T10:46:20.650 回答