Обратное проектирование
Теперь проведем обратное проектирование из Oracele в ERwin.

Рисунок 26 – обратное проектирование
Запросы
С помощью средств запросов SQL построим выражения для 10 вариантов запросов и проверим их работоспособность.
Список студентов, проживающих в общежитии с указанием комнаты, в которой он живет, и произведенной оплаты.
SELECT Личн_дан.Фамилия,Личн_дан.Имя,Студ_комн.Ном_ком,Тарифы.Стоимость
FROM Студ_комн INNER JOIN Личн_дан
ON Студ_комн.Ном_сб=Личн_дан.Ном_сб
INNER JOIN Студент
ON Личн_дан.Ном_сб=Студент.Ном_сб
INNER JOIN Тарифы
ON Студент.Ном_тарифа=Тарифы.Ном_тарифа
WHERE Личн_дан.Место_жит='Общежитие';

Рисунок 27 – итог 1-го запроса
Список студентов, проживающих в той же комнате, что и определенный студент.
SELECT Личн_дан.Фамилия,Личн_дан.Имя
FROM "ЛИЧН_ДАН" INNER JOIN "СТУД_КОМН"
ON "ЛИЧН_ДАН"."НОМ_СБ"="СТУД_КОМН"."НОМ_СБ"
WHERE "СТУД_КОМН"."НОМ_КОМ"=( SELECT "СТУД_КОМН"."НОМ_КОМ"
FROM "СТУД_КОМН" INNER JOIN "ЛИЧН_ДАН"
ON "СТУД_КОМН"."НОМ_СБ"="ЛИЧН_ДАН"."НОМ_СБ"
WHERE "ЛИЧН_ДАН"."НОМ_СБ"=5555);

Рисунок 28 - итог 2-го запроса
Списка комнат, в которых есть свободные места, с указанием количества свободных мест.
SELECT Ном_ком, Кол_св_м
FROM Комната
WHERE Кол_св_м > 0;

Рисунок 29 - итог 3-го запроса
Списка студентов, отчисленных и вновь восстановленных.
SELECT Личн_дан.Фамилия, Личн_дан.Имя
FROM "ЛИЧН_ДАН" JOIN "СТУДЕНТ"
ON "ЛИЧН_ДАН"."НОМ_СБ"="СТУДЕНТ"."НОМ_СБ"
JOIN "СТУД_ГРУП"
ON "СТУДЕНТ"."НОМ_СБ"="СТУД_ГРУП"."НОМ_СБ"
WHERE"СТУД_ГРУП"."ОТЧИСЛ_ВОССТ"='да';

Рисунок 30 - итог 4-го запроса
Списка студентов, переводившихся с одного факультета на другой, с указанием даты перевода и факультета.
SELECT Личн_дан.Фамилия, Личн_дан.Имя, "ИЗМЕНЕНИЯ"."ФАКУЛЬТЕТ", "СТУД_ИЗМЕН"."ДАТА"
FROM "ЛИЧН_ДАН" JOIN "СТУДЕНТ"
ON "ЛИЧН_ДАН"."НОМ_СБ"="СТУДЕНТ"."НОМ_СБ"
JOIN "СТУД_ИЗМЕН"
ON "СТУДЕНТ"."НОМ_СБ"="СТУД_ИЗМЕН"."НОМ_СБ"
JOIN "ИЗМЕНЕНИЯ"
ON "СТУД_ИЗМЕН"."НОМ_ИЗМЕН"="ИЗМЕНЕНИЯ"."НОМ_ИЗМЕН"
WHERE "ИЗМЕНЕНИЯ"."ФАКУЛЬТЕТ" IS NOT NULL;

Рисунок 31 - итог 5-го запроса
Списка студентов, оплачивающих проживание, но не живущих в общежитии.
SELECT Фамилия
FROM "ЛИЧН_ДАН"
WHERE "МЕСТО_ПРОП" = 'Общежитие' AND "МЕСТО_ЖИТ" != 'Общежитие';

Рисунок 32 - итог 6-го запроса
Истории переселения студента из комнаты в комнату.
SELECT Личн_дан.Фамилия,Личн_дан.Имя,Студ_комн.Ном_ком
FROM "ЛИЧН_ДАН" INNER JOIN "СТУД_КОМН"
ON "ЛИЧН_ДАН"."НОМ_СБ"="СТУД_КОМН"."НОМ_СБ"
WHERE "ЛИЧН_ДАН"."НОМ_СБ"=4444
ORDER BY "СТУД_КОМН"."ДАТА_ЗАСЕЛ" ASC;

Рисунок 33 - итог 7-го запроса
Списка месяцев, не оплаченных определенным студентом.
SELECT Неупл_мес
FROM "НЕУПЛАТА" INNER JOIN "ЛИЧН_ДАН"
ON "НЕУПЛАТА"."НОМ_СБ"="ЛИЧН_ДАН"."НОМ_СБ"
WHERE "ЛИЧН_ДАН"."НОМ_СБ"=1111;

Рисунок 34 – итог 8-го запроса
Списка месяцев с максимальной задолженностью студентов по оплате.
SELECT Неупл_мес, count(Неупл_мес)
FROM"НЕУПЛАТА"
WHERE "ГОД"=2014
GROUP BY Неупл_мес;

Рисунок 35 - итог 9-го запроса
Список различных тарифов по оплате за общежитие.
SELECT Ном_тарифа, Стоимость
FROM ТАРИФЫ;

Рисунок 36 - итог 10-го запроса
