Пример выполнения

Пусть поставлена задача: разработать базу данных студентов, хранящую следующую информацию: Ф.И.О. студента, телефон, год поступления, номер зачетки, специальность, код специальности.

Сначала определим набор атрибутов будущей базы. В основном набор и содержание полей будут соответствовать тому списку, который сформулирован в требованиях к базе. Единственная сложность - требование о том, что в базе должны храниться Ф.И.О. студента. Необходимо решить, будут ли они все записываться в одной поле, или фамилия, имя и отчество должных хранится раздельно: т.е. мы должны обеспечить требование атомарности атрибутов базы. Можно предположить, что, как правило, при формировании каких-либо выходных форм и запросов пользователю часто будет удобнее видеть только фамилию и инициалы студента. Если мы будем использовать для ФИО одно поле, то в таком случае потребуется достаточно сложная обработка его содержимого, с выделением в текстовой строке фрагментов, соответствующих составным частями имени. Таким образом, получится, что в одном поле мы пытаемся хранить целую структуру и данный реквизит будет неатомарным. Поэтому следует завести 3 поля: для раздельного хранения фамилии, имени и отчества. Таким образом, набор атрибутов базы будет выглядеть следующим образом (таблица 1.1)


Таблица 1.1 – Атрибуты базы данных «Студенты»

Наименование атрибута Содержание Тип Длина
Fam Фамилия Строка  
Imya Имя Строка  
Otch Отчество Строка  
Tel Контактный телефон Строка  
GodPostup Год поступления Дата -
NomZach Номер зачетки Строка  
Spec Название специальности Строка  
SpecKod Код специальности Строка  

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

Таким образом, получившаяся таблица

Students (Fam, Imya, Otch, Tel, GodPostup, NomZach*, Spec, SpecKod)

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

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

Это требование выполняется для Fam, Imya, Otch, GodPostup, Spec, SpecKod, но не выполняется для поля Tel, поскольку у одного студента, однозначно определяемого его номером зачетки, может быть несколько контактных телефонов (домашний, мобильный, рабочий телефон родителей и так далее) (рисунок 1.4).

Students

Fam Imya Otch Tel GodPostup NomZach* Spec SpecKod

Рисунок 1.4 – Атрибуты таблицы Students, находящиеся в полной функциональной зависимости от первичного ключа

Следовательно, для того, чтобы выполнялись условия соответствия таблицы Students второй нормальной форме, ее нужно разделить на две:

Students (Fam,Imya,Otch,GodPostup, NomZach*, Spec,SpecKod)

и

Telefon (Tel*, Students_NomZach **)

Для таблицы Students первичным ключом будет, естественно, являться поле NomZach.

В таблице Telefon всего два поля: первичным ключом этой таблицы является само поле Tel, а поле Students_NomZach добавлено дополнительно: оно является внешним ключом иобеспечивает возможность установить связь данных таблицы Telefon с таблицей Students (рисунок 1.5).

Рисунок 1.5 – Связь между таблицами Telefon и Students

Получившиеся таблицы Telefon и Students удовлетворяют требованиям 2НФ.

В таблице Telefon нет транзитивных зависимостей. Следовательно, она удовлетворяет и 3НФ.

Проверим на соответствие требованиям третьей нормальной формы таблицы Students.

В этой таблице есть поля, нарушающие требование 3НФ о том, что ни одно из неключевых полей не должно однозначно идентифицироваться другим неключевым полем: такими полями являются Spec и SpecKod. Действительно, каждая специальность однозначно идентифицируется своим кодом (например, I-53 01 02) и каждому коду соответствует одно официальное наименование специальности (в нашем случае I-53 01 02 «Автоматизированные системы обработки информации»).

В существующем состоянии таблица Students кажется достаточно удобной для хранения данных, однако наличие транзитивной зависимости Spec -> SpecKod приводит к следующим проблемам:

- при добавлении данных о студентах одной и той же специальности в каждой записи будет дублироваться и код, и наименование специальности;

- в случае, если кроме наименования, специальность понадобиться охарактеризовать еще какими-либо атрибутами (например, наименование квалификации, получаемой выпускниками данной специальности), дублирование данных еще больше возрастет;

- при изменении, например, наименования специальности, придется пересмотреть все записи о студентах и исправить значение поля Spec.

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

Рисунок 1.6 – Схема базы данных «Студенты»

Все получившиеся таблицы удовлетворяют требованиям 3НФ. Эта степень нормализации вполне достаточна для разрабатываемой базы данных, поэтому будем считать, что процесс проектирования заданной БД завершен.


Варианты заданий

1 Каталог моделей оружия

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

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

2 Бюро путешествий

База данных содержит описания путевок в Крым: наименование санатория, нас.пункт расположения санатория, стоимость проезда в одну строну, тип проживания, стоимость проживания в сутки без питания, вариант питания, стоимость питания за сутки, длительность путевки.

Примечание: считать, что для каждого санатория может существовать несколько типов проживания (нпр., номера-люкс, частный сектор и т.п.), причем стоимость проживания в сутки и вариант питания (завтрак+ужин, только обед, без питания и т.п.) зависят от типа проживания. Стоимость питания зависит от варианта питания и отличается в каждом санатории.

3 Гаражный кооператив

Для каждого гаража должны храниться следующие данные: Ф.И.О., адрес и телефон владельца, марка и номер автомобиля.

Примечание: за одним гаражом может быть зарегистрировано от 0 до N автомобилей.

4 Учет драгметаллов в основных фондах

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

Примечание: к ОФ относятся: здания; сооружения; передаточные устройства; машины и оборудование; транспортные средства; инструмент и производственно-хозяйственный инвентарь и т.д. сроком службы более года и стоимостью более 30 мин.з/п.

В настоящее время учитываются следующие драгметаллы: золото, серебро, платина, платиновые металлы. Каждый ОФ может содержать некоторые из драгметаллов, либо не содержать их вообще.

5 Склад компьютерных товаров

На складе фирмы хранятся CD-ROM’ы, HDD, FDD, материнские платы, корпусы и пр. товары. Каждый вид товара характеризуется моделью, фирмой-производителем, стоимостью, количеством на складе. Кроме того, для каждого вида товара существует не менее двух характеристик, специфичных для него (нпр., скорость и наличие кнопок управления для CD-ROM, тип и размеры для корпуса системного блока и пр.)

Примечание: предусмотреть не менее трех видов товара и не менее 2х специфических признаков для каждого из них. Считать, что у всех товаров, относящихся к одному виду и изготовленных одной фирмой, есть только одна цена.

6 Склад оптовой базы

Оптовая база занимается закупками и реализацией морепродуктов (свежемороженная и обработанная рыба, морская капуста, рыбные консервы и пр.) и, кроме того, часть закупленной продукции перерабатывается самой базой (посол и копчение свежемор.рыбы, приготовление капустных салатов и т.д.). В базе данных должны храниться данные о закупленных партиях: наименование морепродукта, дата получения складом, допустимый срок хранения и объем партии. Кроме того, для приобретенных на стороне продуктов должны быть данные о цене покупки (включая НДС), сумме уплаченного НДС и поставщике. А для произведенных самой базой товаров – себестоимость и норма рентабельности (%).

Примечание:

для приобретенных товаров: УчетнаяЦена = ЦенаПокупки – Сумма НДС для произведенных базой: УчетнаяЦена = Себестоимость*(100 + Норма Рентабельности)/100

7 Склад сырья

О хранящемся сырье должны быть следующие данные: наименование, единица измерения, стоимость за единицу измерения, количество на складе, норма естественной убыли для данного сырья (%).

Примечание: партии сырья с одним и тем же наименованием могут приобретаться по разным ценам. Считать, что для каждого сырья существует одна установленная единица измерения.

8 Штатный состав фирмы

Сотрудники фирмы работают на условиях сдельной оплаты труда. Для сдельщиков устанавливается ставка оплаты за единицу выполненных работ. Кроме того, согласно трудовому законодательству, для сдельщиков должен быть установлен фиксированный минимальный размер месячной оплаты. База данных должна содержать данные о каждом сотруднике (ФИО, дата рождения, паспорт, домашний адрес и телефон, дата приема на работу) и данные о количестве выполненной работы («выработка») за текущий месяц.

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

Зарплата вычисляется следующим образом:

Если (Выработка * СтавкаОплаты > Мин.РазмерМесячнойОплаты) тогда

(Зарплата = Выработка * СтавкаОплаты), иначе (Зарплата = Мин.РазмерМесячнойОплаты).

9 Работа с субподрядчиками

Фирма для выполнения некоторых работ нанимает субподрядчиков, являющихся индивидуальными предпринимателями. О каждом ИП необходимы следующие данные: номер расчетного счета, наименование банка, УНН, ФИО, № паспорта, № лицензии, № договора, дата подписания договора, сроки (конечная дата) выполнения договора, сумма договора, процент суммы договора, который будет выплачен субподрядчику, оплачен ли договор клиентом, выплаченная фирмой индив.предпринимателю сумма.

Примечание: один ИП может быть привлечен для работы по нескольким договорам (в том числе и одновременно), расчет с субподрядчиком производится только после полной оплаты договора клиентом, однако субподрядчику может оплачиваться не вся сумма сразу. Считать, что фирма сотрудничает с более-менее постоянным кругом ИП не менее 5 человек.

10 Обувной магазин

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

Примечание: считать, что каждому коду модели соответствует только один цвет (для той же модели другого цвета заводится другой код).

11 Конструкторское бюро

На предприятии существует конструкторское бюро из нескольких отделов. Для каждого отдела установлен размер оклада всех сотрудников (у всех в отделе одинаковый). Начальник отдела получает 50% надбавку к окладу. В БД должна храниться информация о ФИО, домашнем адресе и телефоне сотрудника, телефоне отдела, наименовании отдела.

Примечание: считать, что отделы имеют уникальные номера. Начальник отдела является сотрудником отдела.

12 Изделия мебельной фабрики

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

Примечание: считать, что каждое изделие однозначно идентифицируется своим ТУ (техническим условием), имеющим код длиной 16 символов, например: 123456789.123–12

13 Садоводческое товарищество

Необходимо хранить информацию о ФИО владельца, площади участка, площади дома, количестве этажей, материале строительства дома, повышающем коэффициенте оплаты за дом, последней дате оплаты за участок, последней дате оплаты за дом.

Примечание: считать, что все участки пронумерованы. Дома есть не на всех участках. Ставка оплаты за дом и за участок должна вводиться пользователем при начале расчетов.

14 Отгрузка металлолома

Контора по приему металлолома отправляет его затем в свои цеха на переработку. Отгрузка оформляется железнодорожной квитанцией, в которой указывается по каждому виду лома: наименование лома, код вида лома (8 цифр), количество (т.), цена за тонну.

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

Примечание: для каждого цеха установлено наименование станции-получателя и тариф оплаты за услуги ж/д. Цехов всего 5. Датой отгрузки считается дата квитанции.

15 Газоснабжение

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

Примечание: оплаты за 1 человека и за 1 кубометр газа задает пользователь перед началом расчета. Считать, что на льготников начисляется только 50% оплаты.

16 Домашняя видеотека

Для каждой кассеты должно быть известно: номер, общая длина ленты, фирма-производитель кассеты. На каждой кассете могут быть записаны фильмы и любительская съемка. Для каждой записи должна быть известна продолжительность записи, тайм-код начала. Кроме того, для любительской съемки нужно хранить: ФИО оператора, где снято, когда. Для фильма: название, режиссер, жанр.

Примечание: на одной кассете может быть несколько записей разного типа. Считать, что записи на ленте идут подряд, без «пробелов».


ТЕМА 2

DOS-ОРИЕНТИРОВАННЫЕ СУБД
(НА ПРИМЕРЕ FOXPRO 2.6)

1 Основы работы с СУБД FoxPro 2.6a.

2 Типы данных, файлов и расширения.

3.Редактирование и просмотр данных.

4 Создание и модификация структуры таблиц, их индексирование и связывание.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: