Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BD_2001_uch.doc
Скачиваний:
1
Добавлен:
16.08.2019
Размер:
381.44 Кб
Скачать

2.2. Логические связи в рбд

Приведенную выше таблицу ПЕРЕВОЗКИ (рис. 1) можно рассматривать как БД состоящую из одного отношения. Анализ таблицы показывает, что в столбцах {Водитель}, {Пункт_назначения}, {Марка_АМ}, {Гос_номер}, {Расстояние} одни и те же значения часто повторяются, т.е. БД накапливает дублирующую информацию. Кроме того, при вводе одних и тех же значений оператор может допустить незначительную на первый взгляд ошибку - например, набрать лишний пробел или запятую вместо точки и т.п. В этом случае, при автоматизированной обработке, эти значения будут рассматриваться как несовпадающие.

Для устранения указанных недостатков БД можно преобразовать к другому варианту, включающему не одно, а несколько отношений (рис.3):

  • ПУНКТ_НАЗНАЧЕНИЯ = {КОД_ПН, Наименование, Расстояние}

  • ВОДИТЕЛИ = {КОД_ВОД, Фамиля_И_О}

  • АВТОТРАНСПОРТ = {КОД_АТ, КОД_МАРКИ, Госномер}

  • МАРКА_АТ = {КОД_МАРКИ, Марка}

  • ПЕРЕВОЗКИ = {Nр, Дата, КОД_ПН, КОД_ВОД, КОД_АТ, Вес}

При таком преобразовании необходимо установить соответствие между информацией размещаемой в разных таблицах (отношениях).

Для установления логической связи между двумя отношениями в РБД, одно из отношений должно содержать первичный ключ, а другое внешний (вторичный) ключ. Отношение, содержащее первичный ключ называется главным, отношение содержащее внешний ключ - подчиненным. Т.о., внешний ключ подчиненного отношения является его вторичным ключом, который в то же время является первичным для главного отношения. По этим ключевым полям устанавливается связь между отношениями. Одна подчиненная таблица может содержать несколько вторичных (внешних) ключей и быть связана с несколькими главными таблицами. Если одной строке в главном отношении можно поставить в соответствие несколько строк (более одной) в подчиненном отношении, между ними устанавливается связь ОДИН-ко-МНОГИМ.

Если одной строке в одном отношении можно поставить в соответствие только одну строку в другом отношении, они являются отношениями одного уровня и между ними устанавливается связь ОДИН-к-ОДНОМУ.

В рассматриваемом примере, в таблицы АВТОТРАНСПОРТ, ПУНКТ_НАЗНАЧЕНИЯ, ВОДИТЕЛИ, МАРКА_АТ в качестве первичных ключей соответственно введены поля КОД_АТ, КОД_ПН, КОД_ВОД, КОД_АТ, КОД_МАРКИ. Кроме того, в качестве вторичных ключей, в таблицу АВТОТРАНСПОРТ введено поле КОД_МАРКИ, а таблицу ПЕРЕВОЗКИ введены поля КОД_ПН, КОД_ВОД, КОД_АТ.

Такое увеличение количества таблиц в БД приводит к уменьшению требуемого объема памяти для хранения той же информации и снижению вероятности ошибок при ведении БД.

Рассмотрим это на примере двух вышеприведенных вариантов БД. Как правило, предприятие на протяжении некоторого периода имеет постоянные штат водителей, парк автомобилей и маршруты, а количество выполненных за это время рейсов значительно превышает указанное в таблицах ПЕРЕВОЗКИ (рис. 1 и 3). Предположим, что количество выполненных рейсов равно 100.

В следующих разделах будут рассматриваться различные свойства таблиц и их полей, которые устанавливаются на стадии разработки БД. Одним из таких свойств является размер поля (столбца) таблицы. Это свойство задает максимальный размер данных, для хранения которых предназначено данное поле.

Для простоты пока условимся, что в рассматриваемом примере все данные являются текстовыми (в т.ч. коды, вес, расстояние). Допустим, что установлены следующие размеры: полей для хранения кодов и поля “Расстояние” - 3 символа; полей “Фамиля_И_О” и “Наименование” – 15; для хранения данных о марках и номерах госрегистрации автомобилей - по 6 символов. Для остальных полей размер не оговаривается, т.к. и в первом и во втором вариантах БД эта часть информации занимает одинаковый объем.

Таким образом, для регистрации одного рейса в первом варианте для одной записи потребуется выделить объем памяти для хранения

Пункт_назначения Водитель Марка_АМ Госномер Расстояние

15 + 15 + 6 + 6 + 3 = 45 символов,

при регистрации 100 рейсов - 45 * 100 = 4500 символов.

ПУНКТ_НАЗНАЧЕНИЯ

ВОДИТЕЛИ

КОД_ПН

Наименование

Расстояние

КОД_ВОД

Фамиля_И_О

1

с. Еловое

16

1

Антонов Р.Т.

2

г. Киселев

254

2

Ермаков Ф.Г.

3

п. Ливневка

123

3

Иванов С.П.

4

п. Стасово

45

4

Локтев И.Д.

1

1

ПЕРЕВОЗКИ

М

М

Дата

КОД_ПН

КОД_ВОД

КОД_АТ

Вес

1

15.01.99

3

2

1

3,5

Рис. 3.

Схема БД

2

15.01.99

4

3

2

1,5

3

16.01.99

2

4

3

4,2

4

16.01.99

1

2

1

2,1

5

16.01.99

4

1

4

0,8

6

17.01.99

2

3

3

3,7

7

22.01.99

3

3

5

5,2

М

1

АВТОТРАНСПОРТ

МАРКА_АТ

КОД_АТ

КОД_МАРКИ

Госномер

КОД_МАРКИ

Марка

1

3

А567УК

1

ГАЗ-53

2

1

В354УО

2

КАМАЗ

3

2

Д129УК

3

МАЗ

4

2

С311УО

1

5

3

Х711УК

Во втором варианте, данные хранятся в разных таблицах описывающих однотипные объекты. Для регистрации данных о водителях, работающих в настоящее время, необходим объем памяти для хранения

КОД_ВОД Фамиля_И_О

(3 + 15) * 4 = 72 символов.

Аналогично подсчитаем объем для остальных таблиц второго варианта БД. Таблица МАРКА_АТ - (3 + 6)*3 = 54. Таблица АВТОТРАНСПОРТ (3 + 3 + 6) * 5 =60. Таблица ПУНКТ_НАЗНАЧЕНИЯ - (3 + 15 + 3) * 4 = 84. В таблице ПЕРЕВОЗКИ учитываются только те поля, которых нет в первом варианте:

КОД_ПН КОД_ВОД КОД_АТ

(3 + 3 + 3) * 100 = 900.

Суммарный объем во втором варианте составит:

72 + 54 + 60 + 84 + 900 = 1170 символов.

Таким образом, даже при незначительном количестве зарегистрированных рейсов, очевидно, что второй вариант БД гораздо экономичней.

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

3. ОПРЕДЕЛЕНИЕ ДАННЫХ

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

Учитывая, что ТАБЛИЦА (отношение) это объект, который создается и используется для хранения некоторого набора данных определенного типа, при ее конструировании необходимо:

  • присвоить таблице имя;

  • задать имена полей (атрибутов);

  • задать типы данных, хранимых в этих полях;

  • описать назначение полей;

  • задать свойства полей.

При задании имен таблиц необходимо помнить, что они д.б. уникальны (не должны повторяться) в пределах одной БД.

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

Тип данных задается для каждого поля таблицы.

Например, в одной из распространенных СУБД MS Access поддерживается восемь типов данных:

  1. текстовый - алфавитно-цифровые данные;

  2. МЕМО - алфавитно-цифровые данные, предложения, абзацы, тексты);

  3. числовой - числовые данные;

  4. дата/время - дата и время;

  5. денежный - данные о денежных суммах;

  6. счетчик - уникальное длинное целое (генерируется СУБД MS Access автоматически при создании новой записи);

  7. логический - логические данные (да/нет);

  8. объект OLE - картинки, диаграммы, фото и др.

Свойства полей. В MS Access для каждого поля могут быть определены пользователем или действуют по умолчанию СВОЙСТВА, зависящие от выбранного пользователем типа данных. К основным свойствам полей относятся следующие.

РАЗМЕР_ПОЛЯ - этот параметр задает максимальный размер данных хранимых в этом поле. Для текстовых данных - от 1 до 255 символов (по умолчанию 50). Для числовых: целое - от -32768 до 32767; длинное целое - от -2147483648 до +2147483647. Для чисел с плавающей запятой (4 байта) - от -3,4х1038 до 3,4х1038; для чисел с плавающей запятой (8 байт) от -1,797х10308 до 1,797х10308).

ФОРМАТ_ПОЛЯ устанавливается для информации выводимой на печать и для данных типа ДАТА/ВРЕМЯ (например, м.б. выбран один из следующих форматов: полный (16.08.99 16:25:15 АМ), длинный (Понедельник, 16 августа 1999), средний (16-авг-99) и др.

МАСКА_ВВОДА. Для типов: текстовый, денежный, числовой и дата/время можно задать маску ввода. Например, при вводе года рождения пользователя интересует все четыре цифры – маска имеет вид 0000 (где 0 - требует обязательного ввода цифры в этой позиции, т.е. 19786 - ошибка, 78 - ошибка и т.д.).

ПОДПИСЬ ПОЛЯ - имена полей (имена атрибутов) могут быть достаточно схематичными, не несущими подробной информации о назначении поля, что создает некоторые неудобства для пользователей не являющихся разработчиками БД. Поэтому, при работе с самой таблицей иногда полезно вместо заданного имени атрибута выводить более полное название, которое задается в свойстве "ПОДПИСЬ ПОЛЯ". Если свойство "ПОДПИСЬ ПОЛЯ" задано, то при работе с таблицей соответствующая подпись отображается вместо имени поля. Подпись поля, в отличие от имени может содержать пробелы. Однако в межобъектных связях БД используются только имена полей.

ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ - если при вводе очередной записи в таблицу, значение какого либо атрибута записи не указывается пользователем напрямую, значение м.б. задано по умолчанию на стадии конструирования таблицы. Для полей содержащих числовые данные, значением по умолчанию м.б. 0, для текстовых - NULL. NULL - специальное значение, используется для обозначения некоторого неизвестного значения. Значение NULL имеет особые свойства - оно не может быть равно никакому другому значению, в том числе и другому NULL. В то же время значение пустой строки ("") не является неизвестным.

УСЛОВИЕ НА ЗНАЧЕНИЕ - в этом свойстве можно задать ограничения на вводимое в поле значение, что предупреждает возможные ошибки при вводе данных. Например, в одном из полей таблицы вводится оценка за экзамен, которая не м.б. меньше 2 и больше 5. Ошибочно введенное значение, выходящее за пределы указанного интервала, не будет принято БД, а на экран будет выведено специальное предупреждение. Это предупреждение будет стандартным для MS Access, или может содержать текст определяемый разработчиком БД в свойстве поля - СООБЩЕНИЕ ОБ ОШИБКЕ.

ОБЯЗАТЕЛЬНОЕ ПОЛЕ - если разработчик БД не допускает, чтобы в поле хранилось значение NULL, то значение описываемого свойства поля д.б. "ДА", в противном случае - "НЕТ".

Задание простых условий на значение. Условие на значение задается выражением, которое в общем случае состоит из операторов сравнения и значений, используемых для сравнения. Допустимы следующие выражения. Для поля, значения которого должны быть не менее 50 и не более 100 условие имеет вид - Between 50 And 100. Если значение поля д.б. не менее 15, то условие имеет вид >15.

С помощью оператора In, можно выполнить множественное сравнение. Например, при вводе наименования области, оно должно соответствовать одному из значений списка. В этом случае условие имеет вид IN ("УЛЬЯНОВСКАЯ", "ГОРЬКОВСКАЯ", "МОСКОВСКАЯ").

Если в качестве операнда используется дата, то операнд заключается в символы #. Например Between #15.12.98# and #25.12.98#

Задание маски ввода. Для облегчения ввода форматированных данных в MS Access создаются маски ввода для любых полей, кроме полей с типом данных МЕМО, счетчик и ОLЕ. Маска позволяет преобразовать вводимые последовательности символов к определенному виду. Например, все вводимые символы преобразовать к верхнему регистру, или вставить разделительные знаки в определенных местах, или установить определенную длину вводимой строки и т.п.

Для задания масок используются следующие символы и их последовательности: 0 - в данную позицию ДОЛЖНА быть введена цифра (кроме символов “+” и “-“); 9 - может быть введена цифра, пробел или эта позиция м.б. пропущена (кроме “+” и “-“); # - может быть введена цифра, пробел или эта позиция м.б. пропущена (в т.ч. символы “+” и “-“); L - в данную позицию ДОЛЖНА быть введена произвольная буква; A - в данную позицию ДОЛЖНА быть введена произвольная буква или цифра; ? - в данную позицию может быть введена буква или позиция м.б. пропущена; . - место для десятичной точки; : или / - разделители для записи даты и времени, применение зависит от выбранного стандарта; < - преобразует все символы справа от этого символа к нижнему регистру; > - преобразует все символы справа к верхнему регистру; ! - указывает, что маску следует заполнять справа налево.

Маска ввода состоит из трех частей, разделенных символом (;). Первая часть представляет собственно маску ввода. Необязательная вторая часть указывает, сохранять ли постоянные символы маски в этом поле или нет. Если необходимо сохранить, то 0, если нет то 1. Необязательная третья часть содержит указание на символ позиции в маске ввода. По умолчанию используется подчеркивание (_).

Несколько примеров.

00,00;;_ - маска для ввода двух цифр до запятой и двух после;

>??????? - маска для ввода семи или менее символов, преобразуемых к верхнему регистру.

Таким образом, совокупность логически взаимосвязанных нормализованных отношений, отражающих некоторую предметную область, образует РЕЛЯЦИОННУЮ БАЗУ ДАННЫХ.

В ходе разработки РБД определяется набор взаимосвязанных отношений и состав атрибутов каждого отношения. Состав атрибутов должен отвечать требованиям нормализации. Описание логической организации РБД определяет ее структуру и включает описание отношений и связей между ними. Описание структуры каждого отношения включает:

  • уникальное в БД имя отношения;

  • состав и последовательность атрибутов каждого отношения;

  • уникальные имена атрибутов в пределах каждого отношения;

  • определение типа и размера данных для каждого атрибута;

  • указание первичного ключа (простого или составного);

  • определение внешних ключей (вторичных ключей для связи между отношениями);

  • установление и описание типа связей между отношениями.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]