ü Функциональная зависимость. Каждое поле таблицы содержит информацию относящуюся к общей теме таблицы. Поле, которое содержит информацию не относящуюся к общей теме таблицы лучше поместить в другую таблицу
ü Уникальность полей. Наличие одинаковых полей в разных таблицах является признаком того, что некоторые таблицы содержат лишние поля.
ü Независимость полей. Должна иметься возможность изменять значение любого поля без воздействия на данные другого поля.
ü Каждая таблица должна иметь уникальный идентификатор или первичный ключ. По возможности в качестве ключа необходимо использовать самые простые данные. Если в таблице нет поля, которое содержит уникальное значение для каждой записи, то в нее можно добавлять поле счетчик (каждой новой записи автоматически присваивается новое число)
ü В большинстве случаев не возникает необходимости хранить в таблице результаты вычислений.
ü Хранить данные лучше в виде минимально возможных элементов. Наличие в одном поле нескольких элементов затрудняет их извлечение из этого поля.(Например поле ФИО следует разбить на три отдельных поля : Имя, Отчество, Фамилия)
Примеры выделения ключевых полей
В MS Access можно выделить три типа ключевых полей: простой ключ, составной ключ и счетчик. Обычно в качестве ключевого поля выбирается поле с неповторяющимися значениями (простой ключ) или комбинация из нескольких полей (составной ключ). Если такие поля не найдены или получается слишком сложный составной ключ используется специальный тип данных – счетчик. Счетчик содержит номера строк и будет последовательно увеличиваться на 1 при создании новой записи. Если Вы забыли самостоятельно определить ключевое поле MS Access предложит Вам задать ключевое поле сам. Не отказывайтесь от этого сразу, а лучше подумайте какое поле с не повторяющими значениями можно выбрать в качестве ключевого или согласитесь на счетчик.
Совет! Не забывайте создавать ключевые поля, не даром ключ является символом MS Access
Рассмотрим примеры выделения ключевых полей.
Пусть в базе необходимо хранить данные об объекте Сотрудники, имеющим следующие атрибуты: фамилия, имя, адрес, телефон, табельный №, должность. Рассмотрим по порядку эти атрибуты
1. Фамилия не может быть ключевым атрибутами, так как даже если сейчас нет однофамильцев нет никакой гарантии , что они не могут появиться в дальнейшем
2. Те же причины заставляют отказаться от использования ключевого атрибута Имя
3. К сожалению по тем же причинам нельзя использовать и составной ключ Фамилия + Имя
4. Адрес и телефон не могут использоваться в качестве ключевых, так как возможно проживание нескольких сотрудников в одной квартире.
5. Всегда существует несколько сотрудников , занимающих одну должность
6. Табельный № -не содержит совпадений . Следовательно именно он может быть выбран в качестве ключевого поля
Графически это отображается следующим образом
В первой строке прямоугольника указывается имя таблицы и отделяется чертой от атрибутов (полей) таблицы
Жирным начертанием выделяется ключевое поле
Объект Клиент имеет следующие атрибуты : фамилия, имя, адрес, телефон, город. Ни один из этих атрибутов не может быть выбран в качестве ключевого. В качестве ключа будем использовать дополнительное поле счетчик Код Клиента
Объект Товары имеет следующие атрибуты: наименование, фирма, цена ,вес. Ни один из этих атрибутов не может быть выбран в качестве ключевого. В качестве ключа будем использовать дополнительное поле счетчик Код Товара
Следующий пример – объект Студенты имеет следующие атрибуты: №группы, №студента, фамилия, имя, год рождения, адрес. По известным причинам ни фамилия, ни имя, ни адрес, ни год рождения не могут быть выбраны в качестве ключевых. №группы также не может быть выбранным в качестве ключевого , так как в одной группе обучается больше одного студента. Атрибут №студента содержит порядковый номер студента в группе и в каждой группе имеется студент с номером 1, 2 и т.д. Следовательно ни один из этих атрибутов не может быть ключевым. Конечно можно добавить поле Код Студента, а можно воспользоваться составным ключом . В качестве составного ключа используем поля №группы и №студента, так как эта комбинация не содержит повторяющихся значений.
Типы связей между таблицами.
Одним из важнейших достоинств реляционных баз данных состоит в том , что можно хранить логически сгруппированные данные в разных таблицах и задавать связи между ними, объединяя в единую базу. Для задания связи таблицы должны иметь поля с одинаковым типом данных. Связь между таблицами устанавливает отношение между совпадающими значениями в этих полях. Такая организация позволяет уменьшить избыточность хранимых данных , упрощает их ввод , удаление, поиск
Отношение (связь) один - ко – многим (1: M или M:1)является наиболее часто используемым типом связи. В такой связи каждой записи в таблице А (первичный ключ)соответствует несколько записей в таблице В (внешний ключ), а запись в таблице В не может иметь более одной соответствующей ей записи в таблице А. Таблица А называется главной ,а таблица В подчиненной таблицей. Или иногда таблицу А называют родительской таблицей, а В – дочерней .
Примеры
Одной записи в таблице Клиенты может соответствовать много записей в таблице Заказы .
Одной записи в таблице Товары может соответствовать много записей в таблице Заказы .
Связь один ко многим создается в том случае, когда поле одной из таблиц является ключевым
Отношение ( связь) один - к – одному (1:1) .Запись в таблице А может иметь не более одной связанной записи в таблице В и наоборот. Содержимое таких таблиц как правило можно объединить в одну. Этот тип связи используется довольно редко Такие связи имеет смысл устанавливать для разделения таблиц с очень большим количеством полей, для отделения части таблицы по соображениям защиты или если не все данные из одной таблицы используются в другой .
В данном случае только незначительная часть сотрудников занимаются серьезно спортом и имеют спортивные разряды, поэтому данные о сотрудниках спортсменах выделены в отдельную таблицу.
Связь один к одному создается только в том случае когда оба поля являются ключевыми
Отношение ( связь) многие ко многим (N:M) . Одной записи в таблице А может соответствовать несколько записей в таблице В , а одной записи в таблице В может соответствовать много записей в таблице А.
У одной книги может быть несколько авторов , а каждого автора может быть несколько книг.
Такую связь в MS Access реализовать невозможно. Такая связь реализуется только при помощи третьей таблицы – таблицы связки, имеющей составной ключ
Внимание! Связь многие ко многим преобразуется в две связи один ко многим при помощи таблицы связки.
Установление связи между таблицами возможно
ü Связываемые поля имеют одинаковый тип данных. Исключение составляет поле счетчик, так как поле счетчик не может быть использовано в качестве вторичного ключа. Поле счетчик может быть связано с числовым полем, имеющим размер длинное целое.
ü Таблицы хранятся внутри одной БД.
ü Главная таблица связывается с подчиненной по ключу
При создании связи между таблицами устанавливается параметр целостности данных, а также параметры каскадного обновления и удаления связанных записей.