从多对多表中引用主键

时间:2016-11-18 03:56:44

标签: sql sql-server database database-design

我有2个表:StudentClass many-to-manyStudent_Class(StudentID, ClassID) table.的关系

我还需要表Payment(StudentID, ClassID, Fee...)Request(StudentID, ClassID, Request,...).

我应该像上面那样创建Student_Class表,或者像这样:(StudentClassID,StudentID, ClassID)然后删除PaymentRequest中的2个PK和新PK:StudentClassID?哪一个更好,为什么?

1 个答案:

答案 0 :(得分:2)

在这个答案中可能需要考虑两件事,一个是技术数据库方面(诸如性能,存储和完整性之类的东西),另一个是业务问题。

所以,重申一下,给出以下内容:

Student (StudentID, ...)
Class (ClassID, ...)

目前其他表有两种选择:

A

Student_Class (StudentID, ClassID, ...)
Payment (StudentID, ClassID, Fee, ...)
Request (StudentID, ClassID, Request, ...)

Student_Class (Student_ClassID, StudentID, ClassID, ...)
Payment (Student_ClassID, Fee, ...)
Request (Student_ClassID, Request, ...)

第二种方案使用较少的存储空间(+),查询( - )的性能可能略低,而且更复杂( - )。

如果企业想跟踪学生的付款或与班级( - )无关的请求,则选项B会使事情变得棘手。

在大多数情况下,我可能会推荐选项A.