Последовательная нумерация в базе данных (MSACCESS) - PullRequest
2 голосов
/ 05 февраля 2009

Резюме:

У меня есть таблица с первичным ключом, идентифицирующим каждую запись. У меня также есть еще три поля, которые могут идентифицировать запись:

  • Категория
  • CategoryNumber
  • DuplicateNumber

Когда я добавляю новую запись и выбираю категорию, как я могу получить, чтобы CategoryNumber корректно увеличивался в зависимости от того, является ли он дубликатом или нет.

Обратите внимание, что это одна большая таблица. Это просто обновление от Excel до доступа.

tldr:

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

Вот что я пытаюсь сделать и где я застреваю.

Я создаю базу данных для отслеживания моих пленочных фотографий, снятых на различных пленках и в разных форматах с разных камер (всего 18 разных независимых фрагментов информации для каждой фотографии), которые охватывают почти 15 лет. Несколько лет назад я сохранил данные в MS Excel и запрограммировал форму ввода, чтобы сделать то, что я собираюсь объяснить.

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

Но я также хотел подать слайды, негативы и прозрачные пленки в соответствии с общими группами или категориями, чтобы я мог быстро вытащить их, если мне нужно было сделать фото или я искал что-то конкретное. Поэтому я также добавил идентификатор категории (например, к «Ландшафтам» добавлено имя «LS» или «Закаты» как «SS» и т. Д.). Я также хотел сохранить порядковый номер для каждого слайда в каждой категории. Так, например одна из моих первых фотографий в моей базе данных имеет PhotoID = 3, его Category = LS и его CategoryID = 1. Далее у меня есть PhotoID = 14, Category = LS и CategoryID = 2.

Теперь, в дополнение к этому, у меня есть еще один номер, который мне нужно отслеживать, и это было, если я делал дубликаты экспозиции одной и той же сцены. Для работы я просто добавил DuplicateNumber к каждой фотографии. Если у него не было дубликатов, то DuplicatNumber был равен 0, если у него было одно дублирование, а DuplicateNumber составлял 1, 2 дублирования, DuplicateNumber был равен 2 и т. Д.

Так что у меня было два способа найти любую фотографию в моих файлах. Либо по PhotoID, который был последовательным в Базе данных, но не в моих физических файлах, либо по комбинации Category, CategoryID и DuplicateNumber, которые являются тем, как я физически подаю фотографии.

Теперь в Excel, когда я открывал свою форму, мне сначала нужно было выбрать категорию для добавления фотографии с помощью переключателей на форме. Затем я бы заполнил все необходимые данные для фотографии. Когда я выполнил форму, она нашла бы последний номер в мастер-листе, увеличила его и добавила все данные в новую запись. Затем он активирует лист категории для выбранной категории, определит последний номер на этом листе, увеличит его и добавит новые данные.

Важным примечанием является то, что DuplicateNumber всегда равен 0 по умолчанию, если я не сделал его 1, 2 и т. Д. Он никогда не вычислялся, но я ввел его.

Когда я создавал метки слайдов («отчет»), я включал основной PhotoID, CategoryName, CategoryID и DuplicateNumber в этом формате (1LS1.0, 14LS45.0, 15LS45.1) и, кроме того, местоположение и дату. принимаются.

Но теперь я больше не хочу использовать Excel и пытался перенести базу данных в MS Access. Итак, у меня есть одна главная таблица под названием PhotoDetails.

PhotoID является первичным ключом в этой таблице. У этого есть поле PhotoCategory, которое является числом, которое имеет отношение к другой таблице под названием Категория. Его первичный ключ - PhotoCategoryID, и это также внешний ключ в PhotoDetails. PhotoCategoryID - это число, которое идентифицирует каждую категорию. В списке всех моих категорий LS номер 11. Но вот где я застреваю.

У меня есть CategoryNumber, который является номером, идентифицирующим фотографию в каждой категории, и DuplicateNumber, определяющий количество дубликатов, в таблице PhotoDetal. Что я не могу понять, так это когда я добавляю новую фотографию, как мне увеличить CategoryNumber? Форма, которую я сейчас имею, позволяет мне вводить все данные, и когда я нажимаю, чтобы ввести следующую, она автоматически вводит ключ PhotoID, но как насчет CategoryNumber? Я не могу вспомнить, какой последний номер для каждой категории, чтобы я мог ввести этот номер в себя. Если только я не подражаю тому, что сделал в Excel, сохраняя все данные дважды, один раз в PhotoDetails (он же главный лист в Excel) и снова в нескольких таблицах категорий. Я надеялся, что Access сможет дать мне обходной путь.

В настоящее время у меня есть отношения, которые связаны с таблицей PhotoDetails в категории 1-M. У меня также есть несколько других таблиц, все связанные в соотношении 1-M (например, таблица Film хранит различные пленки, которые я использовал, а отношение 1-M позволяет мне связать, какой фильм с каждым слайдом, и большинство других данных хранятся в этом способ).

У меня есть 31 разных категорий. У каждой фотографии есть номер категории и номера категории, а также дубликат. Я выберу категорию при вводе данных и DuplicateNumber, но я хочу, чтобы номер CategoryID, а также PhotoID увеличивались автоматически для меня. Как правильно поступить, если мне нужно сохранить только одну таблицу PhotoDetail, которая не дублируется для каждой категории, как я делал в Excel.

Ответы [ 2 ]

1 голос
/ 05 февраля 2009

ОК, так что в основном вы хотите "нормализовать" ваши данные

Обычно у вас есть две таблицы

Фото
PhotoID (тип данных: Autonumber - обычно не виден пользователю - первичный ключ)
PhotoRefID (DT: возможно, число или текст - ссылка на физический номер)
CategoryID (DT: число - длинное целое - ключ к таблице категории)
Дубликат (DT: Number - возможно, также long - если это всего лишь счет)
-- или же -- DuplicateOf (DT: Number - Long Integer - для ссылки на дубликат)

Категория
CategoryID (DT: AutoNumber - первичный ключ)
Описание (DT: Text)

Вы будете использовать отношения (Инструменты-> Отношения), чтобы объединить два идентификатора категории.

После этого вы сможете использовать таблицы для построения форм и запросов, которые вы ищете.

Примечание. Если у вас могут быть фотографии, относящиеся к нескольким категориям, вам потребуется третья промежуточная таблица, чтобы объединить их. Что-то вроде:

PhotoCategories
PhotoCategoryID (DT: Autonumber, Primary Key)
PhotoID (DT: число длинное целое)
CategoryID (DT: число длинное целое)

0 голосов
/ 05 февраля 2009

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

Нет простого способа автоматически получить эту функцию в Access, если вы не разбили свою таблицу на несколько таблиц.

-Adam

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...