Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VisualFoxPro.doc
Скачиваний:
15
Добавлен:
01.07.2025
Размер:
11 Мб
Скачать
☆

Реализация изделий

Вид

Тип

Количество

Цена

Сумма

НДС 20%

Всего

Диод

АД110

2

100

200

40

240

Микросхема

К122

3

150

450

90

540

Кроме того, данные столбца "НДС 20%" вычисляются, как Сумма / 5.

Таким образом, столбец "Сумма" повторяет данные столбцов "Количество" и "Цена". Аналогичное мнение справедливо и относительно столбцов "Всего" и "НДС 20%". В реляционной модели такая избыточность не приветствуется.

Описанная избыточность данных устраняется после ликвидации трех последних столбцов табл. 14.6.

Чтобы привести табл. 14.5 в 1НФ, необходимо разбить ее на две таблицы – табл. 14.7 и 14.8.

Таблица 14.7

Изделия

ID изделия

Вид

Тип

1

Диод

АД110

2

Диод

ГД508

3

Микросхема

К122

4

Микросхема

К245

Таблица 14.8

Поставщики изделий

ID изделия

Наименование поставщика

Факс

1

Циклон

3-68-01

1

Трио

4-69-02

2

Аист

5-70-03

2

Трио

4-69-02

3

Циклон

3-68-01

4

Сириус

7-81-04

Табл. 14.8 обладает очевидной избыточностью. Так, в ней дважды присутствует название поставщика "Трио" и номер его факса. Кроме того, в ней наблюдаются 3 аномалии: обновления, вставки и удаления. Более того, для нее в общем случае не может быть сформирован первичный ключ.

Переход к 2НФ состоит в устранении перечисленных проблем.

Обсудим прежде обозначенные проблемы.

Понятие первичного ключа выводится из понятий суперключа и кандидатного ключа.

Суперключ таблицы – это выражение, операндами которого являются имена столбцов таблицы, уникальным образом определяющее запись таблицы. Так, для табл. 14.7 можно указать по крайней мере 4 суперключа:

  • ID_изделия;

  • Тип;

  • STR(ID_изделия) + Тип;

  • STR(ID_изделия) + Вид + Тип.

Кандидатный ключ – это часть суперключа, которая также является суперключом и не может быть сокращена до другого суперключа.

Так, для табл. 14.7 можно задать 2 кандидатных ключа:

  • ID_изделия;

  • Тип.

Любой кандидатный ключ может быть выбран в качестве первичного ключа.

В случае табл. 14.8 ("Поставщики") в общем случае не могут быть указаны суперключ и, следовательно, первичный ключ. Действительно, самое общее выражение

STR(ID_изделия) + Наименование_поставщика + Факс

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

5 Сириус –

5 Сириус –

не удастся различить при помощи ключа STR(ID_изделия) + Наименование_поставщика + Факс. Очевидно, что в этой таблице нет и иного уникального ключа.

Аномалия обновления наблюдается, когда при изменении одного экземпляра данных приходится корректировать несколько записей. Так, если у поставщика, например "Трио", изменился номер факса, то в табл. 14.8 придется корректировать все записи с этим поставщиком. Аналогичная проблема возникает и при изменении имени поставщика. Замена одного поставщика на иного также выглядит неуклюже: приходится корректировать не одно, что логично, а два поля – "Поставщик" и "Факс". Кроме того, такая замена может вдобавок повлечь аномалию удаления.

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

Аномалия удаления наблюдается, когда удаление записи влечет существенную потерю данных. Так, при удалении из табл. 14.8 записи

2 Аист 5-70-03

полностью теряются сведения о поставщике: в других строках таблицы указанный поставщик не упоминается. Эта потеря существенна, так как нашей целью было лишь указать, что "Аист" не является более поставщиком изделия 2; удаление сведений о поставщике – это явная аномалия.

В рассматриваемом примере эти проблемы снимает разбиение табл. 14.8 на две таблицы – табл. 14.9 и 14.10.

Таблица 14.9

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