Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовые-задачи

.pdf
Скачиваний:
24
Добавлен:
26.05.2014
Размер:
93.61 Кб
Скачать

Задание 1. Задача пенсионного фонда. Рассмотрим таблицу следующей структуры

CREATE TABLE пенсии (

 

инн

CHAR(10)

NOT NULL,

пен_год

INTEGER

NOT NULL,

раб_мес

INTEGER

NOT NULL DEFAULT 0

 

CHECK (раб_мес BETWEEN 0 AND 12),

заработано

DECIMAL(16,2) NOT NULL DEFAULT 0.00,

PRIMARY KEY

(инн,пен_год));

В этой таблице инн — это индивидуальный номер налогоплательщика, служащий для однозначной идентификации последнего. Столбец пен_год — календарный год, например 1999, 2000, 2001 и т.д. Столбец раб_мес — это количество месяцев, которые данный налогоплательщик отработал в соответствующем году. В столбце заработано находится суммарный заработок налогоплательщика в данном году.

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

Задание 2. Рассмотрим длинный ряд пронумерованных подряд корзин, в каждой из которых может лежать по одному шару. Состояние корзин в данный момент времени содержится в таблице

корзины (номер_корзины INTEGER NOT NULL UNIQUE,

состояние CHAR(1) NOT NULL

CHECK (состояние = ’0’ OR состояние = ’1’)),

где значение поля состояние, равное «0» означает, что корзина с данным номером пуста, а «1» — что в корзине есть шар.

Задача состоит в том, чтобы написать запрос, определяющий множество всех серий из n подряд идущих пустых корзин.

Задание 3. Транспортная компания, занимающаяся грузоперевозками, ведет ежемесячный учет рабочего времени своих водителей в таблице

рабочее_время ( водитель

CHAR(25) NOT NULL,

месяц

INTEGER NOT NULL,

часы

INTEGER));

Таблица заполняется по мере того, как водители сдают листы учета рабочего времени, в которых каждый указывает свою фамилию, календарный месяц и количество часов, которые он уже отработал в этом месяце.

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

Задание 4. Рассмотрим базу данных сотрудников, состоящую из следующих двух таблиц:

сотрудники

(номер_сотрудника INTEGER PRIMARY KEY, фамилия CHAR(20),

...)

подчиненные (

 

 

номер_сотрудника

INTEGER

NOT NULL,

номер_подчиненного

INTEGER

NOT NULL,

фамилия_подчиненного

CHAR(20) NOT NULL,

...

PRIMARY KEY (номер_сотрудника,номер_подчиненного), FOREIGN KEY номер_сотрудника REFERENCES

сотрудники(номер_сотрудника))

Задача состоит в том, чтобы написать запрос, показывающий сколько подчиненных у каждого сотрудника. Точнее, запрос должен выдавать номер сотрудника, фамилию сотрудника, количество подчиненных у этого сотрудника.

Задание 5. В таблице

 

дни_рождения (

 

 

фамилия

CHAR(20) NOT NULL,

дата

DATE

NOT NULL)

задан список фамилий и дат рождения сотрудников некоторой организации. Задача стоит в том, чтобы написать запрос, возвращающий список всех сотрудников, дни рождения которых наступят в течение предстоящих 45 дней, начиная с сегодняшнего.

Замечание. Решение может зависеть от конкретных функций работы с датами в Вашей СУБД.

Задание 6. В некотором ВУЗе ведется подсчет рейтинга каждого студента — суммы баллов, полученных студентом при выполнении всех контрольных мероприятий (тестов, зачетов, контрольных работ и пр.). Для этого в базе данных ВУЗа предназначена таблица

студенты (

студент# INTEGER, рейтинг NUMBER(9,2)),

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

оценки (

 

 

 

студент#

INTEGER NOT NULL,

работа#

INTEGER NOT NULL,

попытка#

INTEGER

NOT

NULL,

оценка

INTEGER

NOT

NULL)

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

работ студенту может быть дано несколько попыток.

Новый преподаватель полагал, что после завершения курса лекций для подсчета вклада результатов одной контрольной работы в рейтинг студента служит сумма баллов, полученных студентом за каждую попытку написать контрольную работу. Поэтому он написал такой запрос

UPDATE студенты

SET рейтинг = рейтинг + (SELECT SUM (оценка) FROM оценки s

WHERE студент# = s.студент#);

Однако, в деканате преподавателю объяснили, что в качестве итоговой оценки студента за контрольную работу, которая и должна вносить вклад в рейтинг следует брать среднее арифметическое оценок, полученных им за все попытки написать данную работу.

Сначала преподаватель хотел просто заменить в своем операторе SUM() на AVG(). Но после некоторого размышления, он понял, что это было бы ошибкой. Почему он так решил? Каково правильное решение?

Указание. Учесть ситуацию, когда студент по каким-либо причинам еще не писал контрольную работу.

Задание 7. Аминистратор WEB-сервера ведет учет его посещаемости в таблице

посещаемость (

час INTEGER NOT NULL, посетители INTEGER NOT NULL, PRIMARY KEY (час))

содержащей сведения за одни сутки о количестве посетителей WEBсервера в течение каждого часа, начиная с 0-го до 23-го. Написать запрос, возвращающий

а) все интервалы из t последовательных часов, в течение которых на WEB-сервер не заходил ни один посетитель. Величина t может изменяться и должна быть параметром запроса.

б) все интервалы из t последовательных часов, в течение каждого из которых на WEB-сервер заходило не менее n посетителей. Величины t и n должны быть параметрами запроса.

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

сводки ( дата

DATE NOT NULL,

количество

INTEGER NOT NULL

 

CHECK (количество <> 0))

Задача состоит в том, чтобы составить ежедневный баланс состояния склада, т.е. количества оборудования на складе в каждый день. Решение оформить как представление над таблицей сводки, добавив еще один столбец на_складе. Результат должен выглядеть примерно так:

ДАТА

КОЛИЧЕСТВО НА_СКЛАДЕ

-----------

---------- ---------

2001-НОЯ-01

100

100

2001-НОЯ-02

120

220

2001-НОЯ-03

-150

70

2001-НОЯ-04

50

120

2001-НОЯ-05

-35

85

Задание 9. В одном ресторане решили автоматизировать процесс учета занятых мест. Предполагается, что учет должен происходить следующим образом. Всего в ресторане 1000 мест. Все они должны быть пронумерованы. Как только посетителя усаживают за столик, распорядитель ресторана фиксирует это в электронной базе данных. Аналогично, когда посетитель заканчивает свою трапезу и освобождает место, распорядитель фиксирует это событие в базе данных. База данных должна находиться в карманном компьютере распорядителя. Поэтому Ваша задача состоит в том, чтобы спроектировать эту базу данных с таким расчетом, чтобы она занимала как можно меньше памяти карманного компьютера распорядителя. После этого, требуется написать SQL-запрос, показывающий распорядителю список свободных мест в текущий момент времени. Предполагается, что каждый номер места

— это целое число, занимающее 2 байта.

Задание 10. Вы — сотрудник службы безопасности некоторой корпорации. Каждый сотрудник корпорации снабжен жетоном, на котором проставлен номер его допуска. Некоторые сотрудники могут иметь несколько жетонов, в зависимости от того, в каких подразделениях они в настоящее время работают. Однако, согласно правилам корпорации,в течение одного дня действительным может быть только один жетон. Номера допуска выбираются случайно и равновероятно. Ваша задача состоит в том, чтобы составить список сотрудников и их активных на сегодня номеров допуска. Для обозначения состояния жетона использовать «А» если жетон активен и «Н», если неактивен.

Соседние файлы в предмете Системы управления базами данных