【发布时间】:2010-10-08 14:00:28
【问题描述】:
我有一个学生表和一个课程表,它们通过中间表连接以创建多对多关系(即,一个学生可以注册多个课程,一个课程可以有多个学生)。问题是客户希望每门课程都有一个唯一的学生 ID。例如:
rowid Course Student ID (calculated)
1 A Ben 1
2 A Alex 2
3 A Luis 3
4 B Alex 1
5 B Gail 2
6 B Steve 3
ID 应该从 1 开始编号,并且学生可以为不同的课程使用不同的 ID(例如,Alex 的 ID=2 用于课程 A,但 ID=1 用于课程 B)。一旦分配了 ID,它就是固定的,不能更改。我通过对通过表“SELECT Student from table WHERE Course=A ORDER BY rowid”的rowid进行排序来实现一个解决方案,然后根据结果的顺序返回一个数字。
这个解决方案的问题是,如果一个学生离开课程(从表中删除),其他学生的人数将会改变。有人可以推荐更好的方法吗?如果重要的话,我正在使用 PostgreSQL 和 Django。以下是我的想法:
- 为 ID 创建一列而不是计算它。创建新关系时,根据课程中学生的 max(id)+1 分配 ID
- 在学生离开课程时添加“禁用”列并将其设置为 True。这将涉及更改我的所有代码以确保只使用活跃的学生
我认为第一个解决方案更好,但有没有更“以数据库为中心的方式”,数据库可以自动为我计算?
【问题讨论】:
-
不。我在工作中遇到的真正问题。 :)
-
真正的问题实际上更复杂,但我在这里简化了它,这确实使它看起来像一个家庭作业问题......
-
不确定我是否已经完全理解了这一点,但是您可以在连接学生和课程的中间表中添加一个 IDENTITY 列吗?
标签: database django database-design postgresql