Лучший способ структурировать таблицы базы данных mysql, чтобы они имели последовательные идентификаторы, но не могли использовать auto_increment

У меня проблема, пытаясь понять проблему с базой данных. Ситуация с системой приема в школу выглядит следующим образом.

Таблица 1: Школа CREATE TABLE school (schoolID auto_increment, school_name varchar и т. д. и т. д.)

Таблица 2: Студенты СОЗДАЮТ ТАБЛИЦУ студентов (studentID auto_increment, student_name varchar и т. д. и т. д.)

Таблица 3: Зачисления (проблема здесь, я думаю) CREATE TABLE enrollments (enrolID, ...)

Проблема в том, что раньше система позволяла зачислениям поступать из любого количества местоположений в любое время и просто вставлять их в базу данных, что было нормально, все автоматически увеличивалось.

Масштабы изменились, так как им не нравился тот факт, что при составлении отчетов, когда они извлекали данные о зачислениях, цифры для зачислений были разбросаны. Они хотели, чтобы идентификаторы зачисления в каждой школе были последовательными.

Одна мысль у меня была, вариант (а)

Создайте таблицу зачисления для каждой школы (всего около 1000–1500 школ), чтобы каждое вставленное зачисление сохранялось последовательно.

Вариант (Б)

Имейте другую таблицу, в которой будет записана «последняя запись», вставленная для этой школы.

CREATE TABLE lastrecord (название школы varchar, nextrecord int)

При этом перед каждой вставкой ему нужно будет проверять базу данных, чтобы найти последний идентификатор, использованный для этой школы, получить значение, +1 к нему, а затем ВСТАВИТЬ в таблицу регистрации.

используя этот метод, я бы добавил к идентификатору регистрации идентификатор школы, например, schoolID: 100.

новый идентификатор зачисления: 10045 для их 45-го ученика.

Затем после каждой вставки обновляйте эту таблицу используемой записью. Это кажется крайне неэффективным, но я изо всех сил пытаюсь найти лучшее решение.

Спасибо заранее за любую помощь.


person user1648968    schedule 05.09.2012    source источник
comment
Почему кто-то, просматривающий данные, заботится о последовательных идентификаторах? Идентификаторы не должны иметь отношения ко всему, кроме базы данных. Почему бы вам не хранить зачисления в виде пары SchoolId и StudentId, а затем группировать зачисления по SchoolId?   -  person tbddeveloper    schedule 05.09.2012


Ответы (2)


Вы можете сделать автоинкремент для двух полей

Например: ADD PRIMARY KEY (school_id,enrolID) и установите enrolID для автоматического увеличения

Тогда у каждой школы будет свой автоинкремент

person Nin    schedule 05.09.2012
comment
вот что получилось!! Я только что вернулся сюда, чтобы загрузить свой ответ, и я наткнулся на другой сайт, на котором говорилось о «сложных последовательностях», и их объяснение было в точности таким, как вы упомянули выше. Я потратил дни, думая об этом, спасибо всем за ваш вклад, наконец он работает так, как я предполагал. Сайт, на котором я нашел справку -› codediesel.com/mysql/multi-column-sequences-in-mysql - person user1648968; 05.09.2012

Первичный ключ в таблице базы данных не имеет реального значения. Это просто для идентификации строки. Таким образом, вы должны разделить свой идентификатор студента (который имеет значение) и первичный ключ (который не имеет значения) для таблицы на 2 поля.

Первичный ключ генерируется автоматически, для генерации идентификатора студента вы можете использовать алгоритм, который имеет значение, например, year.number. Сделайте отдельную таблицу, в которой отслеживается, какой ID давать.

person JvdBerg    schedule 05.09.2012