5.3. Проектирование базы данных

В соответствие с процедурой проектирования (п. 4.4) каждая из полученных сущностей должна быть представлена базовой таблицей. Первый вариант этих таблиц описывается так:

СОЗДАТЬ ТАБЛИЦУ Создатели *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_создат )
           ПОЛЯ ( Код_создат Целое, Фам_ИО Текст 30 );
СОЗДАТЬ ТАБЛИЦУ Издательства *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_издательства )
           ПОЛЯ ( Код_издательства Целое, Название
                  Текст 40, Город Текст 25 );
СОЗДАТЬ ТАБЛИЦУ Заглавия *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_заглавия )
           ПОЛЯ ( Код_заглавия Целое, Заглавие Запись );
СОЗДАТЬ ТАБЛИЦУ Вид_издания *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Вид_издания )
           ПОЛЯ ( Вид_издания Целое, Название_вида Текст 16);
СОЗДАТЬ ТАБЛИЦУ Характеры *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_характера )
           ПОЛЯ ( Код_характера Целое, Характер_переиздания Текст 16 );
СОЗДАТЬ ТАБЛИЦУ Языки *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_языка )
           ПОЛЯ ( Код_языка Целое, Язык Текст 16, Сокращение Текст 6 );
СОЗДАТЬ ТАБЛИЦУ Места *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_места )
           ПОЛЯ ( Код_места Целое, Номер_комнаты Целое,
                  Номер_стелажа Целое, Номер_полки Целое );
СОЗДАТЬ ТАБЛИЦУ Читатели *( Стержневая сущность )
 ПЕРВИЧНЫЙ КЛЮЧ ( Ном_билета )
           ПОЛЯ ( Ном_билета Целое, Фамилия Текст 20, Имя Текст 16,
                  Отчество Текст 20, Адрес Текст 60, Телефон Текст 9 );
СОЗДАТЬ ТАБЛИЦУ Издание *( Обозначение )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_издания )
   ВНЕШНИЙ КЛЮЧ ( Код_заглавия ИЗ Заглавия
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Заглавия ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Заглавия.Код_заглавия ОГРАНИЧИВАЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Вид_издания ИЗ Вид_издания
                  NULL-значения ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Вид_издания ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Вид_издания.Вид_издания КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Код_издательства ИЗ Издательства
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Издательства ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Издательства.Код_издательства КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Код_издания Целое, Код_заглавия Целое,
                  Вид_издания Текст 16, Номер_тома Целое,
                  Авторский_знак Текст 3, Библиотечн_шифр Текст 12,
                  Повторность Целое, Код_издательст- ва Целое,
                  Год_издания Целое )
    ОГРАНИЧЕНИЯ ( 1. Значения полей Код_заглавия, Вид_издания
                  и Код_издательства должны принадлежать набору значений
                  соответствующих полей таблиц Заглавия, Вид_издания
                  и Издательства; при нарушении вывод сообщения "Такого
                  заглавия нет", "Такого вида издания нет" или "Такого
                  издательства нет". );
СОЗДАТЬ ТАБЛИЦУ Переплеты *( Обозначение )
 ПЕРВИЧНЫЙ КЛЮЧ ( Номер_переплета )
   ВНЕШНИЙ КЛЮЧ ( Код_издания ИЗ Издания
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Номер_переплета Целое, Код_издания Целое, Цена Деньги,
                  Дата_приобретения Дата )
    ОГРАНИЧЕНИЯ ( Значения поля Код_издания должны принадлежать набору
                  значений соответствующего поля таблицы Издания;
                  при нарушении вывод сообщения "Такого издания нет" );
СОЗДАТЬ ТАБЛИЦУ Аннотации *( Характеризует Издания )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_издания )
   ВНЕШНИЙ КЛЮЧ ( Код_издания ИЗ Издания
                  NULL-значения ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Код_издания Целое, Аннотация Запись )
    ОГРАНИЧЕНИЯ ( Значения поля Код_издания должны принадлежать набору
                  значений соответствующего поля таблицы Издания;
                  при нарушении вывод сообщения "Такого издания нет" );
СОЗДАТЬ ТАБЛИЦУ Авторы *( Связывает Создатели и Издания )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_создателя, Код_издания )
   ВНЕШНИЙ КЛЮЧ ( Код_создателя ИЗ Создатели
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Создатели ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Создатели.Код_создателя КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Код_издания ИЗ Издания
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Код_создателя Целое, Код_издания Целое )
    ОГРАНИЧЕНИЯ ( Значения полей Код_создателя и Код_издания должны
                  принадлежать набору значений соответствующих полей
                  таблиц Создатели и Издание; при нарушении вывод
                  сообщения "Такого автора нет" или "Такого издания нет" );

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

СОЗДАТЬ ТАБЛИЦУ Переводчики *( Связывает Создатели, Издания и Языки)
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_создателя, Код_издания )
   ВНЕШНИЙ КЛЮЧ ( Код_создателя ИЗ Создатели
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Создатели ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Создатели.Код_создателя КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Код_издания ИЗ Издания
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Код_языка ИЗ Языки
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Языки ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Языки.Код_языка КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Код_создателя Целое, Код_издания Целое )
    ОГРАНИЧЕНИЯ ( Значения полей Код_создателя, Код_издания и
                  Код_языка должны принадлежать набору значений
                  соответствующих полей таблиц Создатели, Издание
                  и Языки; при нарушении вывод сообщения "Такого
                  автора нет" или "Такого издания нет" или "Такого
                  языка нет");
СОЗДАТЬ ТАБЛИЦУ Размещение *( Связывает Места и Переплеты )
 ПЕРВИЧНЫЙ КЛЮЧ ( Код_места, Номер_переплета )
   ВНЕШНИЙ КЛЮЧ ( Код_места ИЗ Места
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Места ОГРАНИЧИВАЕТСЯ
                  ОБНОВЛЕНИЕ Места.Код_места КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Номер_переплета ИЗ Переплеты
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Переплеты КАСКАДИРУЕТСЯ
                  ОБНОВЛЕНИЕ Переплеты.Ном_переплета КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Код_места Целое, Номер_переплета Целое,
                  Дата_размещения Дата, Дата_изъятия Дата )
    ОГРАНИЧЕНИЯ ( Значения полей Код_места и Номер_переплета
                  должны принадлежать набору значений соответствующих
                  полей таблиц Переплеты и Места; при нарушении вывод
                  сообщения "Такого переплета нет" или "Такого места нет" );
СОЗДАТЬ ТАБЛИЦУ Выдача *( Связывает Читатели и Переплеты )
 ПЕРВИЧНЫЙ КЛЮЧ ( Ном_билета, Ном_переплета )
   ВНЕШНИЙ КЛЮЧ ( Ном_билета ИЗ Читатели
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Читатели КАСКАДИРУЕТСЯ
                  ОБНОВЛЕНИЕ Читатели.Ном_билета КАСКАДИРУЕТСЯ)
   ВНЕШНИЙ КЛЮЧ ( Ном_переплета ИЗ Переплеты
                  NULL-значения НЕ ДОПУСТИМЫ
                  УДАЛЕНИЕ ИЗ Переплеты КАСКАДИРУЕТСЯ
                  ОБНОВЛЕНИЕ Переплеты.Ном_переплета КАСКАДИРУЕТСЯ)
           ПОЛЯ ( Ном_билета Целое, Ном_переплета Целое, Дата_выдачи Дата,
                  Срок Целое, Дата_возврата Дата )
    ОГРАНИЧЕНИЯ ( Значения полей Ном_билета и Ном_переплета должны
                  принадлежать набору значений соответствующих полей таблиц
                  Читатели и Переплеты; при нарушении вывод сообщения
                  "Такого читателя нет" или  "Такого переплета нет" );

Теперь следует проверить, не нарушены ли в данном прокете какие-либо принципы нормализации (п. 4.6), т.е. что любое неключевое поле каждой таблицы:

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

Наконец, анализ сущностей Издания, Переплеты, Места, Читатели и Языки, показал, что единственной "подозрительной" сущностью является стержень Языки, имеющий два функционально связанных неключевых поля: Язык и Сокращение.

Поле Язык стало неключевым из-за ввода цифрового первичного ключа Код_языка, заменяющего текстовый возможный ключ Язык. Это позволило уменьшить объем хранимых данных в таблице Переводчики, затраты труда на ввод множества текстовых значений и возможной противоречивости, которая часто возникает из-за ввода в разные поля ошибочных дубликатов (например, "Английский", "Англиский", "Анлийский", "Англйский" и т.п.). Если мы вспомним рекомендации п. 4.5 о замене на время нормализации цифровыз заменителей первичных ключей (Код_языка) на исходный ключ (Язык) или воспользуемся формулировкой НФБК, то окажется, что таблица Языки – нормализована.

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

[Назад] [Содержание] [Литература]

 
 

Знаете ли Вы, как разрешается парадокс Ольберса?
(Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды.
Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution