0

我在试图解决数据库问题时遇到了问题。入学制度的情况如下。

表 1:学校 CREATE TABLE 学校(schoolID auto_increment、school_name varchar 等)

表 2:学生 CREATE TABLE 学生(studentID auto_increment、student_name varchar 等)

表 3:注册(我相信问题就在这里) CREATE TABLE 注册(enrolID,...)

问题是,以前系统的范围是允许注册来自任意数量的位置,在任何时候,并且只插入到数据库中,这很好,一切都是自动递增的。

范围发生了变化,因为他们不喜欢这样一个事实,即当报告完成时,当他们检索注册时,注册的数字是分散的。他们希望每个学校的注册 ID 是连续的。

我的一个想法是,选项(a)

为每所学校创建一个注册表(查看大约 1000-1500 所学校),这样每个插入的注册都将按顺序存储。

选项 (B)

有另一个表来记录为该学校插入的“lastrecord”。

CREATE TABLE lastrecord (schoolname varchar, nextrecord int)

这样,每次插入之前,它必须检查数据库以查找该学校使用的最后一个 ID,检索该值,对其 +1,然后将其插入到招生表中。

使用这种方法,我会在注册 ID 前面加上学校 ID,例如 schoolID : 100

第 45 名学生的新注册 ID:10045。

然后在每次插入后,使用使用的记录更新该表。这似乎效率极低,但我正在努力寻找更好的解决方案。

预先感谢您的任何帮助。

4

2 回答 2

0

数据库表中的主键没有实际意义。它只是在那里识别行。因此,您应该将表的学生 ID(有意义)和主键(没有意义)拆分为 2 个字段。

主键是自动生成的,对于学生 ID 的生成,您可以使用有意义的算法,例如 year.number。制作一个单独的表格来跟踪要提供的 ID。

于 2012-09-05T12:20:08.237 回答
0

您可以在两个字段上进行自动增量

喜欢: ADD PRIMARY KEY (school_id ,enrolID) 并将 enrolID 设置为 autoincrement

然后每个学校都会有自己的自动增量

于 2012-09-05T12:22:32.247 回答