2

我被面试了一个问题,我不确定面试官是想迷惑我还是他是认真的。

问题是,我们有一张Student桌子:

Student
ID, Name

和一张Course桌子:

Course
ID, Name

现在我想要的是在 NN 关系中与学生映射课程。

我创建了一个新表StudentCourseRelationship

 StudentCourseRelationShip
 ID    StudentID    CourseID

他回答说我们没有创建新表的权限,我问我们可以添加一个新列,他说可以。

所以我回复他,这不是推荐的方式,但你可以在其中一个CourseStudent表中添加一列,并在其中放置逗号分隔的值。

喜欢

Student 
ID  Name
1   abc
2   def
3   ghi
4   hij
5   jkl

Course 
ID  Name      StudentIDs
 1  English   1,3,4
 2  Maths     3,5
 3  Geography 1,2,4

他说好,告诉我第三个解决方案。我被困在那里,他没有告诉我第三个解决方案,但我很好奇,是否存在任何第三个解决方案,因为最后当他说你想问什么时,我说是的,我想知道第三个解决方案,他想,还有第三个解决方案,去寻找它。

4

2 回答 2

1

从技术上讲,一个解决方案可能是您在两个表中存储一个列表(以便在两个方向上更快地检索)。

跳出框框思考,我会说要求 DBA 为您创建表也是一种解决方案 :o)

于 2013-05-23T15:48:57.743 回答
0

您始终可以删除ID任一表中列的唯一性约束,例如,在Course表中。然后,Course桌子变成了你所说的StudentCourseRelationship桌子。当然,这会破坏规范化,但它仍然没有添加逗号分隔的ID列那么“hacky”。

Course
ID Name    StudentID
 1 English 1
 1 English 3
 1 English 4
 2 Maths   3
 ...

我同意“询问 DBA”解决方案可能是最简洁的。您可能已经问过保持数据库规范化对面试官有多重要......

于 2013-05-24T13:03:49.380 回答