Несколько ключей в Access? - PullRequest
0 голосов
/ 04 февраля 2009

Несколько лет назад я создал базу данных в MS Excel, чтобы отслеживать мои фотографии. Способ, которым я проектировал это, был следующим. У меня был мастер-лист с первичным ключом и порядковым номером для каждой фотографии. Затем у меня было несколько листов в рабочей тетради, которые содержали конкретные фотографии на ту же тему, например, пейзажи (LS), морские пейзажи (SC), закаты (SS) и т. д. Каждый из этих листов также имел первичный ключ, который упорядочивал идентификацию фотографии в этом объекте. Я запрограммировал форму для открытия, когда мне нужно было ввести новую фотографию. Когда форма открывается, она определяет последнюю запись в мастер-листе и увеличивает первичный ключ до следующего числа в последовательности. Затем я выбрал бы какой лист (тип фотографии - LS, SC, SS и т. Д.), И он определил бы номер последней записи на этом конкретном листе с приращением к следующему номеру и также ввел его в форму. Затем я мог бы ввести данные об этой фотографии, такие как настройки экспозиции, местоположение, дата съемки, ключевые слова и т. Д. Затем он записал бы всю эту информацию как в основной лист, так и в конкретный предметный лист. Не самый элегантный, но у меня это сработало.

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

В MS Access я создал мастер-таблицу со всеми полями, которые существовали на мастер-листе в книге Excel. Единственное различие между основным и тематическим листами состоит в том, что у главного есть два дополнительных столбца, один для первичного ключа (номер основной фотографии) и один для темы конкретной фотографии. В следующем столбце указан конкретный номер фотографии объекта. Так, например, две последовательные записи в мастер-листе могут выглядеть следующим образом: slideID = 1245 subject = LS subjectID = 245, затем slideID = 1246 subject = SS subjectID = 127. В предметных листах subjectID является единственным уникальным идентификатором. Вся другая соответствующая информация о фотографии дублируется как в основной, так и в тематической ведомостях.

Итак, в MS Access у меня есть одна мастер-таблица. У меня есть форма, которую я использую для ввода информации о фотографии. Как я могу заставить его увеличивать как идентификационный номер главной фотографии, в настоящее время первичный ключ таблицы, так и увеличивать идентификационный номер субъекта, как только я выберу предмет из формы?

Ответы [ 3 ]

2 голосов
/ 04 февраля 2009

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

=DMax("[slideID]","TableNameHere")+1

Если вы собираетесь изучать проектирование базы данных, нужно сделать еще кое-что, поскольку ваша таблица должна быть нормализована, вы можете прочитать Основы проектирования реляционных баз данных, Пол Литвин, 2003

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

Ваша главная таблица фотографий должна содержать всю информацию, необходимую для любой данной фотографии. Если вы хотите просто увидеть «Ландшафты», просто создайте запрос, который фильтрует основную таблицу по темам. Это устраняет дубликат записи. Любые поля / данные о фотографии в предметных таблицах можно перенести в основную таблицу.

Если вы хотите, чтобы ваши фотографии имели более одной темы, вам нужна таблица Photo_Subject. Нужны только следующие поля: Photo_Subject_ID (автоматический номер), PhotoID (из основной таблицы), SubjectID (или просто введите название субъекта) Таким образом, вы можете вводить одну и ту же фотографию столько раз, сколько хотите, и ассоциировать ее с любым количеством объектов. Вы можете добавить индекс на PhotoID & SubjectID, который позволяет избежать повторяющихся записей. (Да, я предлагаю избегать составного первичного ключа).

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

Рассматривали ли вы различные типы отношений, которые вы можете создать? Например, отношения один ко многим. Какие отношения вы установили в настоящее время в Access?

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