Допустим, у вас есть веб-приложение, которое управляет книгами для продавцов книг, и оно основано на многопользовательской базе данных с единой таблицей книг, которая содержит книги от нескольких продавцов книг.
Теперь предположим, чтокаждый продавец книг действительно хочет, чтобы с каждой книгой ассоциировался уникальный номер, чтобы они могли искать книги по этому номеру, но для них важно, чтобы число было для них примерно последовательным.(Это нормально, если в последовательности есть небольшие разрывы из-за удаленных книг и других событий, которые приводят к тому, что AutoNumber используется, но не используется).
Очевидно, что каждая книга уже имеет уникальный номер (первичный ключ), связанный сэто то, что генерируется через AutoNumber и является уникальным среди продавцов книг.Это не то, что я обсуждаю здесь.
Давайте просто предположим, что SQL-сервер с этого момента, но обсуждение в равной степени относится к Oracle (за исключением того, что Oracle использует последовательности, которые не зависят от таблиц, и текущей версии SQLСервер должен использовать таблицу, чтобы выполнить то же самое).
Мы хотим, чтобы число безопасно увеличивалось в контексте продавца книг.Мы хотим сохранить преимущества использования AutoNumber, но мы хотим, чтобы для продавца книг была одна последовательность.Кажется, что есть два варианта, и ни один из них не очень хорош:
Создайте одну таблицу из одного столбца на продавца книг.Это пугает меня, потому что я не могу вспомнить другой пример динамического изменения схемы (добавление новой таблицы всякий раз, когда новый продавец книг добавляется в систему через веб-приложение) в веб-запросе.Кроме того, кажется очень тяжелым иметь один стол на одного продавца книг.Я знаю, что будущая версия SQL-сервера будет поддерживать последовательности, но даже это все равно будет изменением схемы во время выполнения.
Сверните свое собственное поведение автоматической нумерации.Это кажется очень рискованным, потому что встроенные в базы данных функции AutoNumber позаботятся о многих вещах для вас, и отказаться от этого - большое дело.Попытки реализовать его самостоятельно, вероятно, подвержены ошибкам и могут привести к худшему параллелизму, чем встроенный AutoNumber.
Надеемся, что мне не хватает дополнительных опций.Кто-нибудь успешно справлялся с подобной ситуацией?Спасибо.