Что нам стоит…
На форумах по Access практически каждый второй вопрос возникает из-за неудобной структуры базы данных. Ведь, кажется, нет ничего проще, чем сделать базу данных на Access. Надо лишь создать таблицу, в которую будем всё записывать. И всё! На самом же деле Access представляет собой систему управления реляционными базами данных. Ключевое слово здесь «реляционная». Слово «реляционный» означает отношение. В нашем случае – это отношения таблиц между собой, по-другому связи.
С чего начинается…
Базу данных можно строить и с одной большой таблицы. Как один из методов, такой встречается в литературе для начинающих. К примеру, возьмём базу данных «Телефонная книга». Просто перечислим, что будет храниться в этой базе данных. Тут, позвольте, небольшое лирическое отступление. Основная задача баз данных – это хранение информации в структурированном виде. Такой вид хранения позволяет минимизировать объём хранимых данных. А также упростить поиск и произвольный доступ к данным. Итак, в телефонной книге будем хранить: фамилию, имя, номер домашнего телефона и (или) номер сотового телефона, и (или) номер рабочего телефона, и (или) номер факса (домашнего или рабочего). Можно всё это записать в виде одной таблицы (некоторые поля):
Фамилия
| Имя
| Домашний телефон
| Рабочий телефон
| Факс
|
|
|
|
|
|
Ничего не забыли? А как же поздравить друга с днём рождения?! Конечно, добавляем столбец для даты рождения в эту таблицу: Имя
| Дата рождения
| Домашний телефон
| Рабочий телефон
| Факс
| Андрей
| 12.04.1990
| 1798273
|
|
| Макс
| 05.10.1988
| 7398211
| 1892798
| 1782277
| Алекс
| 27.05.1985
| 7312112
| 1822311
|
|
Как-то не рационально заполняется таблица, остаются пустые поля. И ещё появляется Виктор и хвастается новым сотовым телефоном, а домашнего телефона у него нет. Телефоны бывают разные (домашние, сотовые, рабочие). И у каждого друга их по разному количеству (один, два, три, четыре). Можно завести отдельную таблицу для телефонов: Имя
| Телефон
| Номер
| Андрей
| Домашний
| 1798273
| Макс
| Домашний
| 7398211
| Макс
| Рабочий
| 1892798
| Макс
| Факс
| 1782277
| Алекс
| Домашний
| 7312112
| Алекс
| Рабочий
| 1822311
|
Тогда первая таблица сократится до трёх-четырёх столбцов (или по-другому, полей) с личной информацией: Фамилия, Имя, Дата рождения. Кажется, получается громоздко, а не компактно, т.к. данные повторяются. Повторяются имена в таблице со списком друзей и в таблице с номерами телефонов. А также повторяются типы телефонов. Так Домашний телефон есть почти у каждого!
Ключ
Ключ – это важное понятие в реляционных базах данных. Ещё он называется «первичный ключ» или «ключевое поле». Это такой специальный столбец (поле) таблицы, значение которого не повторяется, а, значит, позволяет однозначно отличать одну запись в таблице от другой. Например, для того чтобы отличать тёзок среди наших друзей мы можем придумать для них (необидные) прозвища. Также и в базе данных: в таблице надо создать первичный ключ. Если в качестве первичного ключа будем использовать какое-либо уникальное свойство записи, то такой ключ называется «естественным». Например, таким ключом может быть серия и номер паспорта. Но в нашем примере мы не будем спрашивать у всех паспортные данные, а просто будем использовать счётчик: кого первого записали, у того номер один, у следующего – два и так далее. В Access (как и в других СУБД) для этого есть специальный тип данных поля, который так и называется «Счётчик». Ключ не всегда состоит из одного поля. Бывают случаи, что для однозначного определения записи необходимо сочетание значений нескольких атрибутов. Такие ключи называются «составными».
Связь
Сначала мы создали одну таблицу, затем её разбили на две. У этих таблиц есть общее поле – это имя человека. Другими словами таблица со списком друзей и личной информацией о них связана с таблицей телефонов друзей по полю Имя. Но это связь не однозначная, так как могут быть тёзки. Следовательно, для связи этих таблиц надо использовать нечто уникальное. Ответ напрашивается сам собой – это должен быть ключ из таблицы со списком друзей.
Ключ
| Имя
| Дата рождения
| 1
| Андрей
| 12.04.1990
| 2
| Макс
| 05.10.1988
| 3
| Алекс
| 27.05.1985
| 4
| Макс
| 17.12.1991
|
Теперь заменим поле связи ключом из первой таблицы. Ключ списка
| Телефон
| Номер
| 1
| Домашний
| 1798273
| 2
| Домашний
| 7398211
| 3
| Домашний
| 7312112
| 3
| Рабочий
| 1822311
| 4
| Рабочий
| 1892798
| 4
| Факс
| 1782277
|
В таблице с телефонами мы ввели так называемый внешний ключ, который и помог нам однозначно определить связь между записями двух таблиц. Такая связь называется «один ко многим», когда значение ключа одной таблицы может повторяться много раз в другой. Бывают связи и «один к одному», при этом одной записи одной таблицы может соответствовать только одна запись в другой таблице.
Справочник
В базах данных часто используются справочники. Это такие таблицы, которые содержат часто повторяющиеся и редко меняющиеся (постоянные) данные. Справочники обычно состоят из одного ключевого поля и поля со значениями данных. Иногда в справочник добавляют служебные поля с описанием или другой справочной информацией. Значения из справочников подставляются в другие таблицы с помощью внешних ключей. В нашем примере к редко меняющимся (постоянным) данным можно отнести значения поля «Телефон» в таблице с телефонами. В качестве домашнего задания создайте справочник типов телефонов и установите связь этого справочника с таблицей телефонов.
Целостность данных
Под целостностью данных будем понимать отсутствие несвязанных записей в таблицах. Несвязанные записи – это, когда в таблице с номерами телефонов присутствует запись со значением ключа списка, которого нет в таблице со списком друзей.
Ключ
| Имя
| Дата рождения
|
| Андрей
| 12.04.1990
|
| Макс
| 05.10.1988
|
| Алекс
| 27.05.1985
|
Убрали из друзей второго Макса. Действительно, зачем нам два? А в таблице с телефонами записи остались.
Ключ списка
| Телефон
| Номер
| 1
| Домашний
| 1798273
| 2
| Домашний
| 7398211
| 3
| Домашний
| 7312112
| 3
| Рабочий
| 1822311
| 4
| Рабочий
| 1892798
| 4
| Факс
| 1782277
|
Есть в Access инструмент для поддержания целостности данных с помощью внешних связей. Для этого надо открыть схему данных, добавить таблицы, нарисовать связь, т.е. с помощью мыши перетащить ключ одной таблицы на внешний ключ другой, а в свойствах связи указать, что требуется обеспечение целостности данных и как это поддерживается системой. Если указать, что требуется каскадное удаление записей, то, удалив запись про второго Макса, система уже сама бы удалила все связанные записи. Таким образом поддерживается целостность данных. Надеюсь, данная статья станет хотя бы небольшой помощью в освоении баз данных. Пишите комментарии.
|