|
|
Проектирование реляционных баз данных средствами СУБД visual dbase 7.0 «Прокат видеокассет»СОДЕРЖАНИЕ ПОСТАНОВКА ЗАДАЧИ 3 1. ПОСТРОЕНИЕ ЛОГИЧЕСКОЙ МОДЕЛИ БАЗЫ ДАННЫХ 4 2. ПОСТРОЕНИЕ ER-ДИАГРАММЫ 6 3. СОЗДАНИЕ СТРУКТУР ТАБЛИЦ 7 4. ВВОД И РЕДАКТИРОВАНИЕ ДАННЫХ В ТАБЛИЦЫ 9 5. ФОРМИРОВАНИЕ ЗАПРОСОВ 11 6. ПРОЕКТИРОВАНИЕ ОТЧЁТОВ 15 ЛИТЕРАТУРА 20 ПОСТАНОВКА ЗАДАЧИ База данных предназначена для использования в прокате видеокассет, с целью учёта прокатной деятельности и должна предоставлять по запросу следующую информацию: Список кассет по жанрам. Список кассет, взятых одним клиентом. Список клиентов-должников за текущий месяц с телефоном и адресом. Каждый клиент может взять несколько видеокассет. За каждый просроченный день штраф 50 руб. Требуется: определить состав информации для хранения в базе данных; спроектировать логическую структуру базы данных методом пошаговой нормализации; обосновать выбор ключевых полей; сформулировать семантические ограничения; построить ER-диаграмму для рассматриваемой предметной области; на основе списка клиентов подготовить к рассылке уведомления о необходимости возврата кассет. 1. ПОСТРОЕНИЕ ЛОГИЧЕСКОЙ МОДЕЛИ БАЗЫ ДАННЫХ В базе данных требуется хранить все сведения о выдаче определённой кассеты в прокат определённому клиенту с занесением его индивидуальных данных. Перечислим все возможные элементы данных (поля), составляющие запись о сдаче экзамена: КЛИЕНТ ( ФИО, адрес, телефон, код клиента, код кассеты, дата выдачи кассеты, название фильма, жанр, год выпуска, главные актёры, дата возврата) Первичным ключом может быть код клиента, так как его значение уникально. Выделим элементы данных, которые могут повторяться для одного клиента, то есть они составляют повторяющуюся группу. Обозначим её RG: КЛИЕНТ ( ФИО, адрес, телефон, код клиента, RG(код кассеты, дата выдачи кассеты, название фильма, жанр, год выпуска, главные актёры, дата возврата)). Приводим запись к первой нормальной форме, выделив повторяющуюся группу в отдельное отношение под именем ПРОКАТ: 1NF КЛИЕНТ ( ФИО, адрес, телефон, код клиента) ПРОКАТ (код клиента, код кассеты, дата выдачи кассеты, название фильма, жанр, год выпуска, главные актёры, дата возврата) Первичный ключ для нового отношения будет составным: код клиента&код кассеты Приводим это отношение ко 2-й нормальной форме, то есть проверяем, существует ли зависимость между неключевыми элементами и частью составного ключа). Такая зависимость есть: поля название фильма, жанр, год выпуска, главные актёры не зависят от второй части составного ключа - кода клиента). Выделим названные поля в отдельное отношение под названием КАССЕТА: 2NF КЛИЕНТ ( ФИО, адрес, телефон, код клиента) ПРОКАТ (код клиента, код кассеты, дата выдачи кассеты, дата возврата) КАССЕТА ( код кассеты, название фильма, жанр, год выпуска, главные актёры ) Проверяем все отношения на предмет соответствия 3-й нормальной форме, то есть на предмет отсутствия зависимостей между неключевыми элементами. В данном случае таких зависимостей нет: 3NF = 2NF Нормализованная база данных будет содержать 3 таблицы: Клиенты (Clients) Прокат (Rolling) Кассеты (Cassette) 2. ПОСТРОЕНИЕ ER-ДИАГРАММЫ 3. СОЗДАНИЕ СТРУКТУРЫ ТАБЛИЦ Изначально предполагаем, что программа Visual dBase запущена и готова к работе, то есть новому проекту присвоено имя и он сохранён в соответствующей папке (каталоге). Для создания таблиц необходимо реализовать проектирование их структуры, для чего в контекстном меню выбираем New - Table и выбираем ручной режим конструирования Designer. Названия (Name) полей (Field) вводим в английском эквиваленте, указываем тип данных (Type), содержащихся в каждом поле (числовые - Numeric, текстовые - Character, календарные - Date и т.п.), а также ограничения на количество знаков в поле (Width). Сохраняем готовую таблицу командой Save As... Таблица соответствия полей № Обозначение Значение 1 CLIENT_CODE код клиента 2 NAME ф.и.о. клиента 3 ADDRESS адрес клиента 4 PHONE телефон клиента 5 ON_DATE дата взятия кассеты 6 OFF_DATE дата возврата кассеты 7 CASSETTE_CODE код кассеты 8 FILM_NAME название фильма 9 GENRE жанр 10 RELEASE год выпуска 11 ACTORS главный актёр В результате проектирования структуры таблиц для решения поставленной задачи получено: Структура таблицы Клиенты (Clients) Clients.dbf - Table Designer Поле Field Имя Name Тип Type Длина Width Свойства Decimal Примечание Index 1 CLIENT_CODE Numeric 6 0 Ascend 2 NAME Character 30 0 None 3 ADDRESS Character 50 0 None 4 PHONE Character 10 0 None В качестве ключевого назначаем поле CLIENT_CODE (код клиента), так значения его в данной таблице должно оставаться уникальным. Структура таблицы Прокат (Rolling) Rolling.dbf - Table Designer Поле Field Имя Name Тип Type Длина Width Свойства Decimal Примечание Index 1 CLIENT_CODE Numeric 6 0 None 2 CASSETTE_CODE Numeric 6 0 Ascend 3 ON_DATE Date 0 None 4 OFF_DATE Date 0 None В качестве ключевого назначаем поле CASSETTE_CODE (код кассеты), так значения его в данной таблице должно оставаться уникальным для каждой кассеты. Структура таблицы Кассеты (Cassette) Cassette.dbf - Table Designer Поле Field Имя Name Тип Type Длина Width Свойства Decimal Примечание Index 1 CASSETTE_CODE Numeric 5 0 Ascend 2 FILM_NAME Character 30 0 None 3 GENRE Character 10 0 None 4 RELEASE Character 4 0 None 5 ACTORS Character 20 0 None В качестве ключевого назначаем поле CASSETTE_CODE (код кассеты), так значения его в данной таблице должно оставаться уникальным для каждой кассеты. Следует отметить также дополнительные условия: Каждая копия одного и того же фильма физически является отдельной кассетой с индивидуальным номером. Поля, содержащие календарные данные должны заполняться с соблюдением формата даты по установленной маске. Дата возврата кассеты не может предшествовать дате её выдачи в прокат. 4. ВВОД И РЕДАКТИРОВАНИЕ ДАННЫХ В ТАБЛИЦЫ Для наполнения таблиц данными необходимо перейти из режима проектирования (Table Design) в режим выполнения (Run) и нажать кнопку Добавить записи. При обнаружении ошибок в проектировании структуры таблицы допустимо возвратиться в режим проектирования и осуществить "горячую" корректировку структуры или ограничений. После заполнения таблиц получим следующее: Содержание таблицы Клиенты (Clients) Client.dbf - Table CLIENT_CODE NAME ADDRESS PHONE 1 Семёнов А.Г. ул. Горького, 39, кв. 56 184-57-31 2 Васильев С.Е. ул. Камышина, 14, кв. 18 156-85-17 3 Карноухов М.Н. ул. Вяземская, 84, кв. 25 172-15-74 4 Ступников А.В. ул. Горная, 45, кв. 2 5 Федосеев С.А. ул. Можайская, 17, кв. 8 172-15-89 6 Крылов А.А. ул. Танкистов, 59, кв. 86 402-15-96 7 Скобелев И.А. 1-й Прокатный пр-зд, 56, кв. 19 405-64-59 8 Климов С.И. ул. Молодёжная, 117, кв. 14 405-79-63 9 Маляков А.В. ул. Крайняя, 109, кв. 109 405-18-10 10 Евплов В.Т. 3-й Молодёжный п-к, 169, кв. 69 Содержание таблицы Прокат (Rolling) Rolling.dbf - Table CLIENT_CODE CASSETTE_CODE ON_DATE OFF_DATE 3 1 11.12.2000 14.12.2000 4 2 13.12.2000 14.12.2000 2 3 10.12.2000 12.12.2000 1 4 07.12.2000 09.12.2000 2 5 10.12.2000 12.12.2000 1 6 07.12.2000 09.12.2000 6 7 12.12.2000 15.12.2000 5 8 08.12.2000 10.12.2000 9 9 11.12.2000 13.12.2000 10 10 12.12.2000 15.12.2000 10 11 12.12.2000 15.12.2000 8 13 10.12.2000 13.12.2000 7 14 09.12.2000 11.12.2000 Содержание таблицы Кассеты (Cassette) Cassette.dbf - Table CASSETTE_CODE FILM_NAME GENRE RELEASE ACTORS 1 Правдивая ложь Боевик 1992 A. Шварценеггер 2 Тупой и еще тупее Комедия 1993 Дж. Кэрри 3 Без лица Триллер 1997 Н. Кэйджс 4 Золотой ребёнок Комедия 1992 Э. Мерфи 5 Горячие головы I Комедия 1993 Ч. Шин 6 Горячие головы II Комедия 1993 Ч. Шин 7 Криминальное чтиво Трагикомедия 1996 Дж. Траволта 8 Брат 2 Боевик 1999 С. Бодров 9 Пятый элемент Фантастика 1997 Б. Уиллис 10 Беглец Фантастика 1992 Э. Эстевез 11 Армагеддон Боевик 1998 Б. Уиллис 12 Скала Боевик 1997 Ш. Коннери 13 Ну погоди (1-16) Мультфильм 1986 14 Том и Джерри Мультфильм 1980 15 Чужой IV Фантастика 1995 С. Уивер 5. ФОРМИРОВАНИЕ ЗАПРОСОВ Поиск нужной информации внутри таблиц базы данных и осуществление её выборки и представления по требуемом виде осуществляется посредством запросов, представляющих собой комплект условий отбора данных. Стандартным языком управления данными в реляционных СУБД является SQL, который мы и будем использовать при формировании запросов для выполнения задания. Для получения списка кассет, отсортированного по жанрам (CassetteList), необходимо выполнить запрос к одной таблице Cassette: SELECT Cassette.CASSETTE_CODE, Cassette.FILM_NAME, Cassette.GENRE, Cassette.RELEASE, Cassette.ACTORS FROM Cassette ORDER BY Cassette.GENRE; Результаты выполнения запроса представляют собой таблицу из данных обусловленных запросом полей, отсортированных по жанру (GENRE): CassetteList.sql - SQL Results CASSETTE_CODE FILM_NAME GENRE RELEASE ACTORS 12 Скала Боевик 1997 Ш. Коннери 11 Армагеддон Боевик 1998 Б. Уиллис 8 Брат 2 Боевик 1999 С. Бодров 1 Правдивая ложь Боевик 1992 A. Шварценеггер 6 Горячие головы II Комедия 1993 Ч. Шин 5 Горячие головы I Комедия 1993 Ч. Шин 4 Золотой ребёнок Комедия 1992 Э. Мерфи 2 Тупой и еще тупее Комедия 1993 Дж. Кэрри 14 Том и Джерри Мультфильм 1980 13 Ну погоди (1-16) Мультфильм 1986 7 Криминальное чтиво Трагикомедия 1996 Дж. Траволта 3 Без лица Триллер 1997 Н. Кэйджс 15 Чужой IV Фантастика 1995 С. Уивер 10 Беглец Фантастика 1992 Э. Эстевез 9 Пятый элемент Фантастика 1997 Б. Уиллис Получение списка кассет, взятых одним клиентом (RollingList), требует обращения сразу к трём таблицам Rolling, Cassette и Clients. Причём для таблиц Rolling и Clients необходимо установить связь по полю CLIENT_CODE, а для Rolling и Cassette по полю CASSETTE_CODE. Сортировку назначаем по алфавиту для фамилий клиентов: SELECT Clients.CLIENT_CODE, Clients.NAME, Clients.ADDRESS, Clients.PHONE, Rolling.CASSETTE_CODE, Cassette.FILM_NAME, Cassette.GENRE, Cassette.RELEASE, Cassette.ACTORS, Rolling.ON_DATE, Rolling.OFF_DATE FROM (Clients INNER JOIN Rolling ON Clients.CLIENT_CODE = Rolling.CLIENT_CODE) INNER JOIN Cassette ON Rolling.CASSETTE_CODE = Cassette.CASSETTE_CODE ORDER BY Clients.NAME; Установление связей между полями производиться с использованием визуальных возможностей Visual dBASE, для чего достаточно лишь "прочертить" линию, соединяющую эти поля, при помощи мыши. Результат объёдинения полей можно посмотреть на вкладке Join. Необходимо помнить об обязательности для связываемых полей в дочерней таблице статуса ключевого поля. Для родительских таблиц это необязательно. В данном случае родительской является таблица Rolling. Результат выполнения запроса на список кассет в прокате (RollingList): RollingList.sql - SQL Results CLIENT_CODE NAME ADDRESS PHONE CASSETTE_CODE FILM_NAME GENRE RELEASE ACTORS ON_DATE OFF_DATE 2 Васильев С.Е. ул. Камышина, 14, кв. 18 156-85-17 5 Горячие головы I Комедия 1993 Ч. Шин 10.12.2000 12.12.2000 2 Васильев С.Е. ул. Камышина, 14, кв. 18 156-85-17 3 Без лица Триллер 1997 Н. Кэйджс 10.12.2000 12.12.2000 10 Евплов В.Т. 3-й Молодёжный п-к, 169, кв. 69 10 Беглец Фантастика 1992 Э. Эстевез 12.12.2000 15.12.2000 10 Евплов В.Т. 3-й Молодёжный п-к, 169, кв. 69 11 Армагеддон Боевик 1998 Б. Уиллис 12.12.2000 15.12.2000 3 Карноухов М.Н. ул. Вяземская, 84, кв. 25 172-15-74 1 Правдивая ложь Боевик 1992 A. Шварценеггер 11.12.2000 14.12.2000 8 Климов С.И. ул. Молодёжная, 117, кв. 14 405-79-63 13 Ну погоди (1-16) Мультфильм 1986 10.12.2000 13.12.2000 6 Крылов А.А. ул. Танкистов, 59, кв. 86 402-15-96 7 Криминальное чтиво Трагикомедия 1996 Дж. Траволта 12.12.2000 15.12.2000 9 Маляков А.В. ул. Крайняя, 109, кв. 109 405-18-10 9 Пятый элемент Фантастика 1997 Б. Уиллис 11.12.2000 13.12.2000 1 Семёнов А.Г. ул. Горького, 39, кв. 56 184-57-31 6 Горячие головы II Комедия 1993 Ч. Шин 07.12.2000 09.12.2000 1 Семёнов А.Г. ул. Горького, 39, кв. 56 184-57-31 4 Золотой ребёнок Комедия 1992 Э. Мерфи 07.12.2000 09.12.2000 7 Скобелев И.А. 1-й Прокатный пр-зд, 56, кв. 19 405-64-59 14 Том и Джерри Мультфильм 1980 09.12.2000 11.12.2000 4 Ступников А.В. ул. Горная, 45, кв. 2 2 Тупой и еще тупее Комедия 1993 Дж. Кэрри 13.12.2000 14.12.2000 5 Федосеев С.А. ул. Можайская, 17, кв. 8 172-15-89 8 Брат 2 Боевик 1999 С. Бодров 08.12.2000 10.12.2000 Список клиентов должников (DutyClients) требует привлечения информации из двух таблиц Rolling и Clients, связанных по полю CLIENT_CODE: SELECT Rolling.CLIENT_CODE, Clients.NAME, Clients.ADDRESS, Clients.PHONE, Rolling.ON_DATE, Rolling.OFF_DATE, Date()-[OFF_DATE] AS Delay, Clients.NAME FROM Rolling INNER JOIN Clients ON Rolling.CLIENT_CODE = Clients.CLIENT_CODE GROUP BY Rolling.CLIENT_CODE, Clients.NAME, Clients.ADDRESS, Clients.PHONE, Rolling.ON_DATE, Rolling.OFF_DATE, Date()-[OFF_DATE], Clients.NAME HAVING (((Rolling.OFF_DATE) Результат выполнения запроса: DutyClients.sql - SQL Results CLIENT_CODE CLIENT_NAME ADDRESS PHONE ON_DATE OFF_DATE DELAY 1 Семёнов А.Г. ул. Горького, 39, кв. 56 184-57-31 07.12.2000 09.12.2000 4 2 Васильев С.Е. ул. Камышина, 14, кв. 18 156-85-17 10.12.2000 12.12.2000 1 5 Федосеев С.А. ул. Можайская, 17, кв. 8 172-15-89 08.12.2000 10.12.2000 3 7 Скобелев И.А. 1-й Прокатный пр-зд, 56, кв. 19 405-64-59 09.12.2000 11.12.2000 2 6. ПРОЕКТИРОВАНИЕ ОТЧЁТОВ Таблица, содержащая результаты выполнения запроса практически малоудобна для чтения, поэтому упорядочивание, оформление и подготовка документа к печати производиться посредством отчётов. Источником данных для отчётов могут служить как сами таблицы, так и выборки запросов. Например, список кассет должен содержать заголовок и таблицу, содержащую наименование жанра, код кассеты, название фильма, фамилию главного героя. Отчёт создаём в диалоговом режиме: Через окно Navigator по вкладке Reports выбираем пункт меню Untitled. Задаём режим диалогового создания отчёта Wizard. Выбираем источник данных - ранее сформированные таблицу или запрос. Подтверждаем необходимость занесения в отчёт детальных строк. Из списка доступных полей выбираем необходимые к включению в отчёт посредством специального транспортирующего меню. Для каждой группы указываем принцип формирования итоговых строк с указанием функций и выражений. Вычисляемое поле в частности потребуется в отчёте по просроченным датам возврата кассет при определении итоговой суммы штрафов для каждого клиента. Формируем общий заголовок отчёта и параметры печатного листа. В режиме проектирования отчёта указываем также необходимые типы и размеры шрифтов, пояснительные текстовые вставки и т.п. По заданию формируем отчёты для получения: списка кассет по жанрам; списка кассет, взятых одним клиентом; списка клиентов-должников за текущий месяц с телефоном и адресом; Результаты контрольных распечаток отчётов приводим ниже. Список кассет Жанр Код Название фильма Актёры Боевик 1 Правдивая ложь A. Шварценеггер 8 Брат 2 С. Бодров 11 Армагеддон Б. Уиллис 12 Скала Ш. Коннери Комедия 2 Тупой и еще тупее Дж. Кэрри 4 Золотой ребёнок Э. Мерфи 5 Горячие головы I Ч. Шин 6 Горячие головы II Ч. Шин Мультфильм 13 Ну погоди (1-16) 14 Том и Джерри Трагикомедия 7 Криминальное чтиво Дж. Траволта Триллер 3 Без лица Н. Кэйджс Фантастика 9 Пятый элемент Б. Уиллис 10 Беглец Э. Эстевез 15 Чужой IV С. Уивер 13 декабря 2000 г. Страница 1 из 1 Штрафы на 13.12.2000 Код Ф.И.О. Адрес Телефон Дни Сумма, руб. 7 Скобелев И.А. 1-й Прокатный пр-зд, 56, кв. 19 405-64-59 2 100 5 Федосеев С.А. ул. Можайская, 17, кв. 8 172-15-89 3 150 2 Васильев С.Е. ул. Камышина, 14, кв. 18 156-85-17 1 50 1 Семёнов А.Г. ул. Горького, 39, кв. 56 184-57-31 4 200 13 декабря 2000 г. Страница 1 из 1 В прокате Ф.И.О. Васильев С.Е. Телефон: 156-85-17 Адрес: ул. Камышина, 14, кв. Код Название фильма Дата выдачи Дата возврата 3 Без лица 10.12.2000 12.12.2000 5 Горячие головы I 10.12.2000 12.12.2000 Ф.И.О. Евплов В.Т. Телефон: Адрес: 3-й Молодёжный п-к, Код Название фильма Дата выдачи Дата возврата 10 Беглец 12.12.2000 15.12.2000 11 Армагеддон 12.12.2000 15.12.2000 Ф.И.О. Карноухов Телефон: 172-15-74 Адрес: ул. Вяземская, 84, кв. Код Название фильма Дата выдачи Дата возврата 1 Правдивая ложь 11.12.2000 14.12.2000 Ф.И.О. Климов С.И. Телефон: 405-79-63 Адрес: ул. Молодёжная, 117, Код Название фильма Дата выдачи Дата возврата 13 Ну погоди (1-16) 10.12.2000 13.12.2000 Ф.И.О. Крылов А.А. Телефон: 402-15-96 Адрес: ул. Танкистов, 59, кв. Код Название фильма Дата выдачи Дата возврата 7 Криминальное чтиво 12.12.2000 15.12.2000 Ф.И.О. Маляков А.В. Телефон: 405-18-10 Адрес: ул. Крайняя, 109, кв. Код Название фильма Дата выдачи Дата возврата 9 Пятый элемент 11.12.2000 13.12.2000 Ф.И.О. Семёнов А.Г. Телефон: 184-57-31 Адрес: ул. Горького, 39, кв. Код Название фильма Дата выдачи Дата возврата 4 Золотой ребёнок 07.12.2000 09.12.2000 6 Горячие головы II 07.12.2000 09.12.2000 Ф.И.О. Скобелев И.А. Телефон: 405-64-59 Адрес: 1-й Прокатный пр-зд, Код Название фильма Дата выдачи Дата возврата 14 Том и Джерри 09.12.2000 11.12.2000 Ф.И.О. Ступников Телефон: Адрес: ул. Горная, 45, кв. 2 Код Название фильма Дата выдачи Дата возврата 2 Тупой и еще тупее 13.12.2000 14.12.2000 Ф.И.О. Федосеев С.А. Телефон: 172-15-89 Адрес: ул. Можайская, 17, кв. Код Название фильма Дата выдачи Дата возврата 8 Брат 2 08.12.2000 10.12.2000 СПИСОК ЛИТЕРАТУРЫ Информатика: учебник / под. ред. проф. Н.В. Макаровой. - М.: Финансы и статистика, 1997. Хенсем Г., Камарга Б. Базы данных: реализация и управление. - М.: Финансы и статистика, 1995. Том Д. Эволюция документных баз данных. - М.: ЭлисКом, 1999. Закис А. Технология создания и кастомизации офисных информационных систем. М.: DataX/Florin, 1999. 2 Работа на этой странице представлена для Вашего ознакомления в текстовом (сокращенном) виде. Для того, чтобы получить полностью оформленную работу в формате Word, со всеми сносками, таблицами, рисунками, графиками, приложениями и т.д., достаточно просто её СКАЧАТЬ. |
|
Copyright © refbank.ru 2005-2024
Все права на представленные на сайте материалы принадлежат refbank.ru. Перепечатка, копирование материалов без разрешения администрации сайта запрещено. |
|