Главная страница

Физическая организация данных


Скачать 487.44 Kb.
НазваниеФизическая организация данных
Дата23.02.2018
Размер487.44 Kb.
Формат файлаdocx
Имя файлаdb.docx
ТипДокументы
#37060
страница13 из 16
1   ...   8   9   10   11   12   13   14   15   16

Для коротких символьных значений и символьных строк

фиксированной длины следует выбирать тип CHAR. Например, для поля "единица измерения” со значениями 'кг', 'шт.', 'уп.' (char(3)), для поля "пол" (char(1)) и т.п.

  1. Для символьных строк переменной длины нужно выбирать тип VARCHAR с указанием максимально возможной длины хранимого значения. Если при добавлении данных длина строки превысит указанное ограничение, система не сможет добавить данные и вернёт сообщение об ошибке.

  2. Для числовых атрибутов, не участвующих в сложных расчётах, нужно использовать основной числовой тип реляционных СУБД - тип NUMBER, указывая реально необходимое количество разрядов. Например, для атрибута Номер сотрудника это может быть NUMBER(4) (до 10000 человек), а для зарплаты - NUMBER(8, 2) (до 999999.99 рублей).

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

  4. Для числовых атрибутов, имеющих ведущие нули, следует выбирать тип CHAR, а не числовой тип, иначе ведущие нули будут потеряны. Например, для серии и номера паспорта (char(10)).

  5. Для хранения дат нужно выбирать тип DATE или его варианты (DATETIME, например). Это позволит использовать арифметику дат и не заботиться о правильности вводимых данных: СУБД сама проверит допустимость даты.

  6. Для хранения больших объектов (графических, звуковых и т.п.) следует выбирать специальные типы данных, перечень которых зависит от выбранной СУБД. Это могут быть типы LONG, CLOB (character large object), BLOB (binary large object) и другие.

  7. Для семантически одинаковых полей разных таблиц нужно выбирать одинаковые типы данных. Например, ФИО сотрудника и ФИО клиента. Во многих СУБД для упрощения типизации данных можно создать специальные типы данных (create type) и использовать их в качестве типов полей таблиц.

  1. Описание ограничений целостности

На этапе логического проектирования необходимо описать все ограничения целостности, обусловленные предметной областью. Типы ограничений целостности и ключевые слова SQL, которые позволяют описывать эти ограничения, приведены в п.6.1.

Если какое-либо ограничение целостности может быть включено в структуру БД (на языке DCL), то его надо реализовать именно так.

СУБД проверяет выполнение ограничений целостности при каждой операции модификации данных, если эта операция может нарушить целостность данных. Если ограничения целостности включены в схему

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

Необходимо обратить особое внимание на поля таблиц, для которых домен определён как список возможных значений. Это ограничение целостности можно реализовать в виде: СНЕСК(<поле> IN (<список значений>)). Но такой подход имеет следующий недостаток: добавление нового значения в список потребует изменения схемы отношения (команда ALTER TABLE). Можно поступить до-другому: вынести этот список значений в отдельное от-ношение. Например, список типов образования (начальное, неполное среднее, среднее, средне-специальное, незаконченное высшее, высшее) для таблицы СОТРУДНИКИ.

Таблица ТИПЫ ОБРАЗОВАНИЯ будет состоять из одного поля Название

типа, определённого как первичный ключ. Тогда

поле Офазованиетаблицы СОТРУДНИКИ станет внешним ключом.

Определение списка значений позволяет гарантировать правильность вводимых данных и правильность поиска. Если не ограничивать значения поля, то оператор может ввести данные произвольным образом, например: 'незаконченное высшее', 'незаконч. высшее', 'н. высш.' и т.д. Человек понимает, что это одно и то же, а для СУБД это разные значения, и учесть все возможные комбинации в условии поиска очень сложно.

Если какое-либо ограничение целостности (ОЦ) нельзя реализовать средствами DCL, то возможны следующие способы его реализации:

  1. С помощью процедурных объектов БД. Чаще всего для этой цели используются триггеры (trigger). Триггер - это процедура БД, которая привязана к конкретной таблице и вызывается автоматически при наступлении определённого события (добавления, удаления или модификации данных этой таблицы). Процедура триггера пишется на том языке, который поддерживается выбранной СУБД (например, PL/SQL для Oracle, Visual Basic для MS SQL Server). Триггер пишется программистом и выполняет те действия, которые обусловлены предметной областью. Например, триггер может осуществлять проверку "возраст принимаемого на работу сотрудника не может быть менее 16-и лет" или присваивать полю "Дата заказа" текущую дату при добавлении нового заказа. Если триггер диагностирует нарушение ограничений целостности, он выдаст сообщение об ошибке и команда модификации данных не будет выполнена (произойдёт автоматический откат, rollback).

  2. Программно (т.е. через приложение). Для большей гарантии соблюдения ОЦ желательно проектировать программу так, чтобы

внесение изменений в данные и проверка ОЦ выполнялись в одном единственном месте.

  1. Вручную. Ручная процедура обязательно должна быть описана в документации (в руководстве пользователя).

  1. Аномалии модификации данных

После составления концептуальной (логической) схемы БД необходимо проверить её на отсутствие аномалий модификации данных. Дело в том, что при неправильно спроектированной схеме БД могут возникнуть аномалии выполнения операций модификации данных. Эти аномалии обусловлены ограниченностью структуры РМД (отсутствием агрегатов и проч.).

Рассмотрим эти аномалии на примере отношения со следующими атрибутами (атрибуты, входящие в ключ, выделены подчёркиванием):

ПОСТАВКИ (Номер поставки, Название товара, Цена

товара, Количество, Дата поставки,Название поставщика, Адрес

поставщика)

Различают три вида аномалий: аномалии обновления, удаления и добавления. Аномалия обновления может возникнуть в том случае, когда информация дублируется. Другие аномалии возникают тогда, когда две и более сущности объединены в одно отношение. Например:

  1. Аномалия обновления: в отношении ПОСТАВКИ она может возникнуть, если у какого-либо поставщика изменился адрес. Изменения должны быть внесены во все кортежи, соответствующие поставкам этого поставщика; в противном случае данные будут противоречивы.

  2. Аномалия удаления: при удалении записей обо всех поставках определённого поставщика все данные об этом поставщике будут утеряны.

52.

  1. Аномалия добавления: в нашем примере она возникнет, если с поставщиком заключен договор, но поставок от него ещё не было. Сведения о таком поставщике нельзя внести в таблицу ПОСТАВКИ, т.к. для него не определён ключ (номер поставки и название товара) и другие обязательные атрибуты.

Для решения проблемы аномалии модификации данных при проектировании реляционной БД проводится нормализация отношений.

8.9.7 Нормализация отношений

В рамках реляционной модели данных Э.Ф. Коддом был разработан аппарат нормализации отношений и предложен механизм, позволяющий любое отношение преобразовать к третьей нормальной форме. Нормализация схемы отношения выполняется путём декомпозиции схемы.

Декомпозицией схемы отношения R называется замена её совокупностью схем отношений Аыаких, что

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

Покажем нормализацию на примере отношения КНИГИ (табл. 8.1):


Id

Code

Theme

Title

Author

Editor

Type

Year

Pg
идентификатор (первичный ключ),

  • шифр рубрики (по ББК - библиотечно-библиографической классификации),

  • название рубрики (по ББК),

  • название книги,

  • автор(ы),

  • редактор(ы),

  • тип издания (учебник, учебное пособие, сборник и.т.п.),

  • год издания

  • количество страниц

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


Таблица 8.1. Исходное отношение КНИГИ

Id

Code

Theme

Author

Title

Editor

Type

Year

Pg

20

22.18

МК

Бочков С. Субботин

Д.

Язык

программирования

СИ

Садчиков

П.

Седов П.

учебник

1990

384








10

22.18

МК

Джехани

Н.

Язык АДА

Красилов

А.

Перминов

О.

учебник

1988

552

35

32.97

ВТ

Соловьев

Г.

Никитин

В.

Операционные системы ЭВМ




учебное

пособие

1992

208

11

32.81

Кибернетика

Попов

Э.В.

Общение с ЭВМ на естественном языке

Некрасов

А.

учебник

1982

360

44

32.97




ПУ для ПЭВМ




Витенберг

Э.

справочник

1992

208

89

32.973

ЭВМ

Коутс Р.Б Влейминк И.

Интерфейс

«человек-

компьютер»

Шаньгин

В.

учебник

1990

501







Первая нормальная форма (1НФ).

Отношение приведено к 1НФ, если все его атрибуты простые.

Отношение КНИГИ содержит сложные атрибуты Author ("Авторы") и Editor ("Редакторы"). Для приведения к 1НФ требуется сделать все атрибуты простыми и ввести составной ключ отношения (ID, Author и Editor) (табл. 8.2).

1   ...   8   9   10   11   12   13   14   15   16


написать администратору сайта