Добавлен: 03.07.2023
Просмотров: 623
Скачиваний: 22
СОДЕРЖАНИЕ
1.1. Описание предметной области
1.2. Проектирование с помощью нормальных форм.
2.1. Выявление связи между сущностями
2.2 Построение диаграммы в нотации Чена
3. Описание возможных запросов.
3.1. Построение модели данных с помощью Erwin (логический уровень)
3.2. Описание модели данных с помощью Erwin (физический уровень)
4.2.Примеры запросов, текст SQL запросов
4.3. Триггеры, SQL тексты триггеров
обладает
1
М
Cоциальное положение
посетитель
2.3. Разбиение связей М:М
Таких связей нет.
3. Описание возможных запросов.
Время от времени пользователям нужно запрашивать данные из базы, чтобы отвечать на вопросы, идентифицировать проблемы или обнаруживать определенные ситуации. Создадим запросы для предметной области фитнес клуб.
7.1 Узнать расписание работы тренеров в залах.
7.2 Узнать должников по оплате.
7.3 Узнать классификационные категории тренеров.
7.4 Просмотреть сумму, которую должен оплачивать посетитель и обладает ли он какими-нибудь льготами.
7.5 Просмотреть в каких клубах работают каждый из тренеров.
7.6 Узнать кто из посетителей не обладает льготами.
7.7 Узнать кто из посетителей старше среднего возраста
3.1. Построение модели данных с помощью Erwin (логический уровень)
Erwin имеет два уровня представления модели – логический и физический.
Логический уровень – это абстрактный взгляд на данные, на нем данные представляются так, как выглядят в реальном мире, и могут называться так, как они называются в реальном мире. Логическая модель данных является универсальной и никак не связана с конкретной реализацией СУБД.[1]
Диаграмма Erwin строится из трех основных блоков: сущностей, атрибутов и связей.
Основная информация, описывающая сущность, включает:
- Атрибуты, составляющие первичный ключ;
- Неключевые атрибуты;
- Тип сущности (независимая/зависимая).
Первичный ключ – атрибут, который однозначно характеризует объект.
Рассмотрим сущности
Посетитель(ФИО посетителя*, домашний адрес, год рождения, оплата, телефон)
Социальное положение(наименование социального положения*, льгота)
Тренер (ФИО тренера*, домашний адрес тренера, телефон, № паспорта, разряд)
В качестве альтернативного ключа сущности Посетитель выбрана ФИО посетителя, но так как могут встречаться однофамильцы можно взять в качестве первичного ключа – код посетителя. Аналогичная ситуация и с сущностями Тренер и Социальное положение, в качестве первичного ключа тоже возьмем коды тренера и соц. Положения соответственно.
Типы связи
Связь называется идентифицирующей, если экземпляр дочерней сущности идентифицируется через ее связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в первичный ключ дочерней сущности. Дочерняя сущность при идентифицирующей связи всегда является зависимой.
Связь называется неидентифицирующей, если экземпляр дочерней сущности идентифицируется иначе, чем через связь с родительской сущностью. Атрибуты, составляющие первичный ключ родительской сущности, при этом входят в состав неключевых атрибутов дочерней сущности.
- Неидентифицирующая связь;
- Идентифицирующая связь;
Модель данных на логическом уровне представлена на рисунке 2.
Логическая модель с атрибутами и связями
3.2. Описание модели данных с помощью Erwin (физический уровень)
Физическая модель данных зависит от конкретной СУБД (в данном случае InterBase), фактически являясь отображением системного каталога. В физической модели содержится информация о всех объектах БД. Поскольку стандартов на объекты БД не существует, физическая модель зависит от конкретной реализации СУБД. Следовательно, одной и той же модели могут соответствовать несколько разных физических моделей. Если в логической модели не имеет значение, какой конкретно тип данных имеет атрибут, то в физической модели важно описать всю информацию о конкретных физических объектах – таблицах, колонках, индексах, процедурах и т.д. Разделение модели данных на логический и физический уровни позволяет решить множество важных задач.[1]
На рисунке 3 представлена схема физической модели, а в таблице 3 приведено соответствие между объектами и атрибутами логического и физического уровней.
Таблица 3
Название сущности на логическом уровне. |
Название таблиц на физическом уровне |
Название атрибутов на логич. уровне |
Название полей на физическом уровне |
Тип данных |
||
Фитнес клуб |
Fitnes_club |
Название |
club_s_number |
CHAR(18) |
||
Директор |
Director |
VARCHAR(20) |
||||
Телефон |
Telephone |
VARCHAR(20) |
||||
Адрес |
Adress |
VARCHAR(20) |
||||
Залы |
Halls |
Название |
Hall_s_name |
CHAR(18) |
||
Номер |
Namber |
VARCHAR(20) |
||||
Внутренний телефон |
Inner_telephone namber |
VARCHAR(20) |
||||
Группы |
Groups |
Номер группы |
Group_s_namber |
INTEGER |
||
Уровень группы |
Group_s_level |
VARCHAR(20) |
||||
Помесячная оплата |
Monthly_pay |
INTEGER |
||||
Посетитель |
Visitor |
ФИО |
sername_and_name |
CHAR(18) |
||
Адрес |
Adress |
VARCHAR(20) |
||||
Год рождения |
Year_of_berthday |
VARCHAR(20) |
||||
Оплата |
Pay |
VARCHAR(20) |
||||
Социальное положение |
Social_Condition |
Наименование |
Denomination |
VARCHAR(20) |
||
Льгота |
Lgotes |
INTEGER |
||||
Тренер |
Trainer |
ФИО |
sername_and_name |
VARCHAR(20) |
||
Адрес |
Adress |
VARCHAR(20) |
||||
Телефон |
Telephone |
INTEGER |
||||
№ паспорта |
Npasport |
INTEGER |
||||
Разряд |
Category |
VARCHAR(20) |
||||
День недели |
Day_s_of_week |
название |
Name |
VARCHAR(20) |
||
Начало работы |
Beginning_of_work |
VARCHAR(20) |
||||
Конец работы |
End_of_work |
VARCHAR(20) |
Запросы
1 Узнать расписание работы тренеров в залах.
Запрос MILA2 таблиц trainer (SURNAME_AND_NAME, HALL_S_NAME),
day_of_week( NAME, BEGINNING_OF_WORK, END_OF_WORK)
2 Узнать должников по оплате.
Запрос MILA3 таблицы visitor( SURNAME_AND_NAME, PAY)
3 Узнать классификационные категории тренеров.
Запрос MILA5таблицы trainer(SURNAME_AND_NAME, CATEGORY)
4 Просмотреть сумму, которую должен оплачивать посетитель и обладает ли он какими-нибудь льготами.
Запрос MILA6 таблиц visitor (SURNAME_AND_NAME), groups (HALL_S_NAME, MOHTHLY_PAY ), social_condition (LGOTES)
5 Просмотреть в каких клубах работают каждый из тренеров.
Запрос MILA9 таблиц halls ( CLUB_S_NUMBER), trainer (SURNAME_AND_NAME)
6 Узнать кто из посетителей не обладает льготами.
Запрос MILA7 запроса mila6 ( SURNAME_AND_NAME, MOHTHLY_PAY, LGOTES)
7 Узнать кто из посетителей старше среднего возраста
Запрос MILA8 таблицы visitor(SURNAME_AND_NAME, YEAR_OF_BERTHDAY)
Рисунок 3
Физическая модель.
Возможные триггеры.
1. Триггер на изменение данных о льготах, размер которых не может превышать 100. При этом, введение большей цифры, чем 100, не будет разрешено и появится окно сообщения, с информацией о том, что льготы, большей чем 100 не бывает
2. . Триггер на изменение данных о категории тренеров, которые могут быть только высшей первой либо второй. Тренера с другими категориями не могут работать в клубе. При вводе иной категории выдается окно сообщения о неправильности ввода категории и ввод информации не происходит
Процедуры.
1.Процедура, в которой по названию клуба выводятся все относящиеся к нему залы.
2.Процедура, в которой по фамилии посетителя можно узнать сумму, которую он должен заплатить за занятия с учетом льгот.
4.Реализация.
4.1. Примеры таблиц
Фитнес клуб
Залы
Группа
Посетитель
Социальное положение
Тренер
День недели
4.2.Примеры запросов, текст SQL запросов
1 Узнать расписание работы тренеров в залах.
CREATE VIEW MILA2(
SURNAME_AND_NAME,
HALL_S_NAME,
NAME,
BEGINNING_OF_WORK,
END_OF_WORK)
AS
select trainer.sername_and_name,trainer.hall_s_name,
day_of_week.name,day_of_week.beginning_of_work,day_of_week.end_of_work
from trainer,day_of_week
where trainer.code_trainer=day_of_week.code_trainer;
2 Узнать должников по оплате.
CREATE VIEW MILA3(
SURNAME_AND_NAME,
PAY)
AS
select visitor.surname_and_name,visitor.pay from visitor
where pay='нет';
;
3 Узнать классификационные категории тренеров.
CREATE VIEW MILA5(
SURNAME_AND_NAME,
CATEGORY)
AS
select trainer.sername_and_name,trainer.category from trainer
4 Просмотреть сумму, которую должен оплачивать посетитель и обладает ли он какими-нибудь льготами.
CREATE VIEW MILA6(
SURNAME_AND_NAME,
HALLS_NAME,
MOHTHLY_PAY,
LGOTES)
AS
select visitor.surname_and_name, groups.hall_s_name,groups.monthly_pay,social_condition.lgotes
from visitor,groups,social_condition
where visitor.group_s_number=groups.group_s_number and visitor.code_social_condition=social_condition.code_social_condition;
5 Просмотреть в каких клубах работают каждый из тренеров.
CREATE VIEW MILA9(
CLUB_S_NUMBER,
SURNAME_AND_NAME)
AS
select halls.club_s_number,trainer.sername_and_name
from halls, trainer
where halls.hall_s_name=trainer.hall_s_name;
6 Узнать кто из посетителей не обладает льготами.
CREATE VIEW MILA7(
SURNAME_AND_NAME,
MOHTHLY_PAY,
LGOTES)
AS
select mila6.surname_and_name, mila6.mohthly_pay,mila6.lgotes
from mila6
where mila6.lgotes='0' ;
7 Узнать кто из посетителей старше среднего возраста
CREATE VIEW MILA8(
SURNAME_AND_NAME,
YEAR_OF_BERTHDAY)
AS
select visitor.surname_and_name,visitor.year_of_berthday from visitor
where year_of_berthday<1960;
4.3. Триггеры, SQL тексты триггеров
1.Триггер на запрещение изменение данных о льготах.
CREATE TRIGGER SOCIAL_CONDITION_BU0 FOR SOCIAL_CONDITION
ACTIVE AFTER UPDATE POSITION 0
as
begin
if (social_condition.lgotes>100) then
exception new_exception1;
end
2. Тригер на запрещение изменения данных о категории тренеров
CREATE TRIGGER TRAINER_BU0 FOR TRAINER
ACTIVE AFTER UPDATE POSITION 0
as
begin
if ( (trainer.category<>'Высшая')and(trainer.category<>'Первая')and(trainer.category<>'Вторая')) then
/* Trigger Text */ exception new_exception;
end
4.4. Примеры процедур, SQL текст процедур
1. По названию клуба вывести все относящиеся к нему залы.
CREATE PROCEDURE CLUB_NAME (
CLUB_NAME CHAR(18))
RETURNS (
CLUB_S_NUMBER CHAR(18),
HALL_S_NAME CHAR(18))
AS
begin
For select club_s_number,hall_s_name
from halls where (halls.club_s_number=:club_name)
Into :club_s_number, hall_s_name
do
suspend;