1. Дано выражение реляционной алгебры или запрос реляционного исчисления кортежей (типа рассмотренного в лекциях «о поставщиках, которые поставляют все красные детали»).
Ø сформулировать его содержание на русском языке, т.е. задачу, которую решает заданное выражение или запрос;
Ø составить программу, соответствующую заданному реляционному выражению/запросу (которая решает ту же задачу).
2. Дана Паскаль-программа типа:
PROGRAM PP; VAR a,b,x,y,t,s:REAL;
BEGIN READ(a,b); IF sin(a)>b THENBEGIN x:=tg(a);y:=tg(b) ENDELSE
BEGIN x:=t; WHILE x>cos(x) DOBEGIN s:=sin(cos(x));x:=tg(s) END;
IF sin(x)>cos(x) THENBEGIN t:=x;y:=tg(t) ENDELSE y:=tg(x) END; WRITE(x,y) END. ...но более «громоздкая»...
Ø Нарисовать соответствующую потоковую диаграмму информационных связей (с хранилищами).
3. Дан фрагмент Паскаль-программы, который содержит описание структуры некоторого хранилища данных, например:
Файл содержит папку сведений о товарах на складах предприятия. Каждый компонент файла содержит сведения об одном виде товаров за один месяц:
· наименование товара, единица измерения;
· сведения о наличии и движении этого товара за этот месяц:
· год и месяц сведений;
· сведения на начало месяца о наличии этого товара на складах - для каждого из 15-ти складов: количество этого товара, имевшееся на начало месяца на этом складе, и его стоимость;
· сведения о движении этого товара на складах - для каждого из 15 складов:
· наименование склада и ФИО ответственного лица;
· движение этого товара на этом складе - для каждого из 31-го дней месяца для каждой из 10-ти возможных операций: вид операции (поступление или выбытие); количество и стоимость соответственно поступившего или выбывшего товара; наименование организации соответственно поставившей или получившей этот товар.
VAR TV:FILEOFRECORD naimt,edt:STRING; sved: RECORD god,mes:INTEGER;
OFARRAY[1..10] OF RECORD vidop:STRING; kold,stoimd:REAL;
naimorg: STRING ENDENDENDEND
Ø Нарисовать исходную структурную диаграмму состава данных, привести к третьей нормальной форме, нарисовать соответствующую схему базы данных, описать ее на SQL (включая межтабличные связи и первичные ключи).
Ø ... возможно будет вариант: нормализовать и привести к одной таблице, описать функциональные зависимости, замыкание которых полно для этой БД... в приемлемом смысле...
(*) Сегодня интенсивно развиваются компонентные технологии в целом, и в частности технологии доступа к данным, обеспечивающие независимость прикладных приложений от источников данных (не только SQL-ориентированных, но и WEB-ориентированных и других…). ODBC и BDE естественно не единственно возможные средства обеспечения доступа к данными... есть стандарт CORBA (Common Object Request Broker Architecture), ADO (Microsoft ActiveX Data Objects)...
(*) Кстати, NULL-значение (пустое, неопределенное) не обязательно совпадает с 0 (или пробел). Обычно NULL-значение можно ввести, выделив и удалив (Del) текущее значение поля, но реально этот вопрос зависит от некоторых настроек.
(*) Эта зависимость неизбежна - чтобы описать классы, предназначенные для работы с базой данных, нужно конкретно и достаточно много знать о том, как она устроена. Поэтому в основе всегда лежит подходящий формат представления базы данных, а конвертация одних форматов в другие и интерпретация одних форматов в терминах других - вопросы достаточно хорошо на сей день изученные и отработанные.
(*) Фактически эти средства тесно связаны с понятием «транзакция».
Средства управления транзакциями класса TDatabase:
procedure StartTransaction {стартует транзакцию};
procedure Commit {завершает подтверждением};
procedure Rollback {завершает «откатом»};
BDE поддерживает явное управление только неименованными транзакциями, причем с ограниченным набором уровней изолированности (property TransIsolation). Однако, аккуратно используя объекты типа TQuery, TStoredProc, TUpdateSQL(и TDatabase в Delphi 6) можно запросить выполнение SQL-сервером фактически (почти?) любого SQL-оператора.
(**)Посмотреть поля, их свойства и события можно после «двойного Click» мышкой на объекте TDataSet (TTable или TQuery). Если появившееся окно редактирования полей пустое, то нажав правую кнопку мыши в контекстном меню выбрать Add All Fields.
(*) View – виртуальная, но постоянная таблица базы данных. Использование View в качестве рабочей временной таблицы – плохая идея. Однако ж в данном конкретном случае мы воспользуемся этой возможностью, дабы не усложнять проблемы...
(*) Международный стандарт ISO/IEC 12207, Стандарты комплекса ГОСТ 34, фирменные методики – MSF (MicroSoft Solution Framework), Oracle CDM (Custom Development Metod)...
§ Зиндер Е.С. Соотнесение и использование стандартов организации жизненных циклов систем. Журнал СУБД N 3, 1997.
§ Вендеров А.М. CASE-технология. М.:ФиC, 1998.-176 с.
§ Принципы проектирования и разработки программного обеспечения. Учебный курс MCSD. С.Ф. Уилсон и др. М. 2002. –737 с.
(*) Не удается разработать приемлемо детальную (в определенном смысле) модель процессов предметной области... возникает слишком много вопросов о данных... Однако ж и разработка модели данных предметной области в определенный момент упирается в вопросы о модели процессов... Видимо, с этим объективным обстоятельством связано появление объектной методологии в проектировании программных систем.
§ Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. СПб.: Питер, 2002. –656 с.
§ Ларман К. Применение UML и шаблонов проектирования. М.: Издательский дом «Вильямс», 2002. –624 с.
§ Якобсон А., Буч Г., Рамбо Дж. Унифицированный процесс разработки программного обеспечения. СПб.: Питер, 2002. –496 с.
§ http://www.rational.com , http://www.omg.org
(*) Наименование поставщика могло измениться. Но это уже другая проблема – хранить или не хранить хронологию таких изменений, в какой мере хранить и для каких реквизитов... это вопрос о хронологических базах данных. В эти проблемы мы пока не станем втягиваться...
...кстати, в нашем примере БД «замят» вопрос о поле «N счета», чей это реквизит – поставщика или конкретной сделки с поставщиком или...
(*) Базовый набор зависимостей F можно трактовать как набор базовых задач предметной области, F* - как набор всех задач. На этих соображениях можно построить соответствующий язык запросов для решения задач предметной области.
§ Тыугу Э.Х. Концептуальное программирование. М.:Наука,1984. –256 с.
§ Канович М.И. Логические методы синтеза программ. Калинин. 1986.
(**) Джексон Г. Проектирование реляционных баз данных для использования на микроэвм. М.:Мир,1991. –252 с.