Объектно-ориентированный транслятор для программируемой реляционной системы. Евгений Григорьев 2012 Москва.

Презентация:



Advertisements
Похожие презентации
Базы данных Лекция 4 Базисные средства манипулирования реляционными данными: реляционная алгебра Кодда.
Advertisements

Учебная дисциплина «Базы данных» для студентов специальности Бизнес-информатика (бакалавриат) ЛЕКЦИЯ 3 ВВЕДЕНИЕ В РЕЛЯЦИОННУЮ МОДЕЛЬ ДАННЫХ Вопрос.
Модуль 1. Математические основы баз данных и знаний.
Лекция 16 Лекция 16 Основы SQL. Описание отношений, доменов, ограничений целостности, представлений данных. Реализация операций реляционной алгебры в SQL.
БАЗЫ ДАННЫХ ЛЕКЦИЯ 12. тема: ОСНОВЫ ЯЗЫКА SQL Общие сведения SQL структурированный язык запросов (Structured Query Language)
СУБД Access Запросы Автор: Тутыгин В.С.. Назначение запросов Запросы обеспечивают простой доступ к определенному подмножеству записей одной или нескольких.
Обеспечение целостности данных Процедурное. Хранимые процедуры Хранимые процедуры пишутся на специальном встроенном языке программирования, они могут.
Введение в базы данных Лямин Андрей Владимирович.
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ СТАВРОПОЛЬСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ.
СУБД Microsoft Access 2003 Элементы языка SQL. Язык SQL SQL (Structured Query Language) – структурированный язык запросов Язык SQL применяется во многих.
Технология хранения, поиска и сортировки информации в базах данных
СУБД 5. SQL для выборки данных. 2 SELECT Обработка элементов оператора SELECT выполняется в следующей последовательности: FROM – определяются имена используемых.
РЕЛЯЦИОННАЯ АЛГЕБРА. Элементы РМД и формы их представления Сущность – это объект любой природы. Данные о сущности хранятся в отношении (таблице). Атрибуты.
Triggers для mysql. Что есть триггер? Триггер - это хранимая процедура особого типа, исполнение которой обусловлено наступлением определенного события.
Языки манипулирования данными. Общая характеристика Язык, в котором можно (по крайней мере) моделировать исчисление с переменными- кортежами, либо, что.
Основы SQL Запросы к базе данных. Что такое база данных SQL? SQL (Structured Query Language - «Структурированный язык запросов») - универсальный компьютерный.
Базы данных Лекция 6 Базисные средства манипулирования реляционными данными: реляционное исчисление.
Реляционная алгебра – механизм манипулирования реляционными данными Все операции производятся над отношениями, и результатом операции является отношение.
Модуль 1. Математические основы баз данных и знаний 1.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 5.
Транксрипт:

Объектно-ориентированный транслятор для программируемой реляционной системы. Евгений Григорьев 2012 Москва

1. Данные. Компьютер должен обрабатывать различные типы простейших элементов данных и структур данных. 2. Элементарные операции. Компьютер должен иметь набор элементарных операций для работы с данными. 3. Управление последовательностью действий. Компьютер должен обеспечивать управление последовательностью выполнения элементарных операций. 4. Доступ к данным. Компьютер должен предоставлять механизмы управления данными, которые необходимы для выполнения любой операции. 5. Управление памятью. Компьютер должен предоставлять механизмы управления распределением памяти для программ и данных. 6. Операционная среда. Компьютер должен предоставлять механизмы связи с внешней средой, содержащей программы и данные, подлежащие обработке. Пратт Т., Зелковиц М. "Языки программирования: разработка и реализация Целевая машина (компьютер) Особенности программируемой реляционной системы - Организация данных (описываются реляционная моделью данных) - Персистентность данных - Непроцедурный язык (команды управления памяти, доступа к данным)

Программируемая реляционная система Thе Third Manifecto by H.Darwen and C.Date "…A database shall be a named container for relvars; the content of a given database at any given time shall be a set of database relvars…. " "…Database relvars shall be either real or virtual…" "…Each transaction shall interact with exactly one database…" Реляционная база данных есть контейнер для множества именованных переменных отношений R (хранимых или вычисляемых), с которым взаимодействует транзакции T. Поддерживает существование и функционирование реляционной базы данных DB: (…, R i, …, T j, …).

Создание relvar R (a 1 :D i, … a n :D j ) KEY(…a i...) FKEY (…) ON (…) Некоторые relvar (виртуальные) могут вычисляться R AS RValue Выражение (запроса) RValue(…R…) возвращает значение отношения -Композиция f(…R…) операций реляционной алгебры ор над переменными отношения op 1 (… op 2 (R, op 3 ()…)). Операции реляционной алгебры могут включать скалярные операции над значениями атрибутов a отношений R. R1 R2 – декартово произведение, R 1 R 2 – объединение, R 1 R 2 – разность, R 1 JOIN criteria R 2 – соединение отношений (в качестве индекса используется критерий соединения). Также спользуется операция LEFT JOIN…. R[a 1, a 2, …] – проекция (где a i – атрибуты ), R WHERE criteria – выборка по критерию, R RENAME a AS b – переименование атрибутов. - Процедура, возвращающей значение отношения (содержащей оператор return RValue) - Явно заданное значение отношение (в присваивании). Присваивание переменной значения R := RValue (эквивалентно традиционным операциям INSERT, UPDATE, DELETE) Создание транзакции Tr(…) AS процедура Выполнение транзакции EXEC Tr(…) Команды ПРС

ПРС позволяет определить, сохранить и выполнить процедуры - алгоритмические (операторы if, while и т.д.) последовательности присваиваний pr R := RValue(… pr R …) (где pr R –переменные, доступные для присваивания в контексте процедуры) и вызовов EXEC Tr(…), Процедура может - использовать локальные переменные (вместе с relvar R базы данных входят в мн-во переменных, доступных для присваивания pr R ). - принимать атрибуты. - возвращать значение в вычисляемых компонентах (оператор return RValue ). Хранимая процедура связывается с именем транзакции или вычисляемого компонента name AS begin … end Хранимая процедура выполняется по обращению к связанному имени - транзакции EXEC Tr(…) - виртуальной relvar R Допускается прямое выполнение последовательности операций EXEC begin … end Команды ПРС

Объекты и классы Объект характеризуется инкапсулированными состоянием (сложное значение) и поведением Объектная переменная есть совокупность именованных переменных отношений + связанный функционал = Реляционная база есть контейнер для множества именованных переменных отношений (хранимых или вычисляемых) + связанные транзакции. 1) Структура сложных объектов есть совокупность переменных, типы которых реализуются целевой машиной 2) ПРС как целевая машина реализует тип отношение.

Объекты и классы Объект характеризуется инкапсулированными состоянием (сложное значение) и поведением Объектная переменная есть совокупность именованных переменных отношений + связанный функционал = Реляционная база есть контейнер для множества именованных переменных отношений (хранимых или вычисляемых) + связанные транзакции. Объект = реляционная БД 1) Структура сложных объектов есть совокупность переменных, типы которых реализуются целевой машиной 2) ПРС как целевая машина реализует тип отношение.

Объекты и классы Скаляр Арность Мощность МножествоОтношение Кортеж n n 1 1 Состояние объекта описывается множеством значений, не более сложных, чем значение отношения Вырожденные формы отношений Могут быть заданы более простыми языковыми конструкциями Далее: Рассматриваем только отношения (сложные компоненты) и скаляры (простые компоненты)

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации. D ( sc C i, … r C j, … M(…)) KEY ( sc C…).. Спецификация D ( sc C i, … r C j, … M(…)) KEY ( sc C…).. D – имя класса sc С – простой компонент (скаляр), r C – сложный компонент (отношение), M(…) – метод KEY ( sc C…) – необязательные ключи класса Реализация - компонентов: хранимые D.С AS STORED вычисляемые D.С AS RValue(…C…) - методов: связываются с процедурами D n.M(…) AS процедура Процедура – алгоритмическая последовательность - присваиваний pr C := RValue(… pr C…) - вызовов call M (…) Возможно множественной наследование. D n : EXTEND D k, D l … (…) Спецификация класса наследника объединяет спецификации родительских классов и собственных компонентов и методов. Наследуемые компоненты и методы могут менять реализацию. Объекты и классы

Класс D - множество объектов заданной структуры. Спецификация класса отделена от реализации. D ( sc C i, … r C j, … M(…)) KEY ( sc C…).. Спецификация D ( sc C i, … r C j, … M(…)) KEY ( sc C…).. D – имя класса sc С – простой компонент (скаляр), r C – сложный компонент (отношение), M(…) – метод KEY ( sc C…) – необязательные ключи класса Реализация - компонентов: хранимые D.С AS STORED вычисляемые D.С AS RValue(…C…) - методов: связываются с процедурами D n.M(…) AS процедура Процедура – алгоритмическая последовательность - присваиваний pr C := RValue(… pr C…) - вызовов call M (…) Возможно множественной наследование. D n : EXTEND D k, D l … (…) Спецификация класса наследника объединяет спецификации родительских классов и собственных компонентов и методов. Наследуемые компоненты и методы могут менять реализацию. Объекты и классы

Объектный идентификатор OID – связанное с объектом уникальное значение из домена dOID. OID генерируется системой в процессе создания объекта, отделен от его состояния, неизменен на протяжении всего существования объекта. Ссылочный тип D n – множество OID существующих в системе объектов класса D n. (имя ссылочного типа = имя класса). Для переменных ссылочного типа определены операции присваивания, сравнивания и неявного разыменования (любая операция, отличная от операций присваивания и сравнивания, выполняется над связанным объектом). Создаваемые ссылочные типы D n входят в расширяемое множество доменов D.

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на расширяемом множестве доменов (D 1,…, D n,…) Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций Таблица символов Программируемая Реляционная Система Ошибк и Транслятор Выходные данные Каталог БД Команды ПРС Реляционная БД определенная на фиксированном множестве доменов (dOID, D 1, … D j )

Структура и ключи Структура объектов класса и ключи класса описываются в команде спецификации класса. D n ( //имя класса sc C i :D, //простой компонент определенный на скалярном домене D, … r C j (…a:D…)KEY(…), // сложный компонент (отношение), … M(…) //метод ) KEY ( sc C…)… //необязательные ключи класса

Структура и ключи Значения всех простых компонентов sc C i всех объектов класса Т представлены в виде единого отношения скаляров R T. ( 1 OID 1 r C 1 1 r C 2 … 1 r C n ) ( 2 OID 2 r C 1 … 2 r C n ) (…) … -> R T где j OID – идентификатор некоторого объекта, j sc C i – простой компонент этого объекта, n – число простых компонентов класса Ключи - Поле OID является ключом. - Если какое-либо скалярные компоненты указаны в спецификации как ключ класса, они является ключом отношении R T. Каждому существующему объекту соответствует кортеж по крайне мере одного (собственного) отношения скаляров. Объектам наследуемых классов также соответствуют по одному кортежу в каждом из отношений скаляров родительских классов.

Структура и ключи Для каждого из сложных компонентов r C i класса T : значения из всех объектов могут быть объединены в виде отношения сложного компонента R T.С. ( 1 OID 1 set C 1 ) ( 2 OID 2 set C 1 ) … -> R T.C1 ( 1 OID 1 set C 2 ) … -> R T.C2 … ( 1 OID 1 set C m ) … -> R T.Cm где m – число сложных компонентов класса, j OID – идентификатор некоторого объекта, j set C i –сложный компонент соответствующего объекта. Ключи - Ключом отношения является совокупность поля OID и полей, указанных в спецификации как ключи соответствующего сложного компонента. - Если какие-либо атрибуты сложного компонента указаны в спецификации как уникальные в классе, они является ключами отношения R T.С.

Структура и ключи При этом все ссылочные поля (т.е. простые ссылочные компоненты и ссылочные атрибуты сложных компонентов) представлены в соответствующих отношениях как одноименные атрибуты, которые - определенны на домене объектных идентификаторов dOID, - связаны (внешний ключ) с атрибутом OID собственного отношения скаляров того класса, на который указывает ссылка

Структура и ключи EXEC begin R SHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), REFERENCE Cntr ON R CONTRACTOR.OID; R SHIPMENTS.Items (OID: dOID, Art:Stirng, Qty:Integer) KEY (OID, Art); end CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Класс отображается в единственное отношение R D и множество отношений R D.С (вместе - отношения класса R T… ). При этом ограничения целостности, заданные для класса D, выражаются в ограничениях целостности применяемых к этим отношениям R D….

Структура и ключи EXEC begin R SHIPMENTS (OID:dOID, DocN:String, Cntr:dOID) KEY(OID), KEY(DocN), REFERENCE Cntr ON R CONTRACTOR.OID; R SHIPMENTS.Items (OID: dOID, Art:Stirng, Qty:Integer) KEY (OID, Art); end CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Класс отображается в единственное отношение R D и множество отношений R D.С (вместе - отношения класса R T… ). При этом ограничения целостности, заданные для класса D, выражаются в ограничениях целостности применяемых к этим отношениям R D….

Создание объектов Объект создается командой new D ( конструирующее_выражение ) EXEC begin - Генерируется новое уникальное значение OID - В отношение скаляров R D добавляется кортеж, содержащий этот OID и значения, определяемые конструирующим_выражением end

Доступ к данным CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC); CLASS CONTRACTORS { Name STRING; Bank BANKS; BankAcc STRING; INN STRING; }KEY uniqINN (INN); CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK Терминальный путь, оканчивается на имя базового типа

Доступ к данным CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC); CLASS CONTRACTORS { Name STRING; Bank BANKS; BankAcc STRING; INN STRING; }KEY uniqINN (INN); CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK SHIPMENTS.Cntr.Bank [.Name,.BIK] Терминальный путь, оканчивается на имя базового типа Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения SHIPMENTS.Items [.Art,.Qty]

Доступ к данным CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC); CLASS CONTRACTORS { Name STRING; Bank BANKS; BankAcc STRING; INN STRING; }KEY uniqINN (INN); CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK SHIPMENTS.Cntr.Bank [.Name,.BIK] SHIPMENTS.Cntr [.Name,.Bank.Name,.Bank.BIK] Терминальный путь, оканчивается на имя базового типа Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения SHIPMENTS.Items [.Art,.Qty]

Доступ к данным CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC); CLASS CONTRACTORS { Name STRING; Bank BANKS; BankAcc STRING; INN STRING; }KEY uniqINN (INN); CLASS SHIPMENTS { DocN STRING; Cntr CONTRACTORS;... Items SET OF { Art STRING; Qty INTEGER; }KEY uniqArt (Art); }KEY uniqDocN (DocN)...; Путь - обусловленная структурой классов и ссылками между ними последовательность имен, определенных в спецификации этих классов. CONTRACTORS.Bank.BIK SHIPMENTS.Cntr.Bank [.Name,.BIK] Терминальный путь, оканчивается на имя базового типа Нетерминальный путь, оканчивается на имя ссылки или сложного компонента. Допускает путевые продолжения SHIPMENTS.Cntr [.Name,.Bank.Name,.Bank.BIK] Выражение отбора объектов может дополнять любое имя класса или ссылки, содержащееся в пути ????? SHIPMENTS.Items [.Art,.Qty]

Доступ к данным Общий принцип: Любой нетерминальный путь может трактоваться как имя отношения («О-вид»), содержащего атрибуты, имена которых представляют собой скалярные путевые продолжения этого пути SHIPMENTS.Cntr.Bank [.Name,.BIK] SHIPMENTS.Cntr [.Name,.Bank.Name,.Bank.BIK] РМД не накладывает какие-либо ограничения на имена, используемые для обозначения отношения и их атрибутов, за исключением требования уникальности. Сигнатуры О-видов О-виды являются способом представить данные множества разных объектов в виде отношений, полностью сохранив при этом заданную в описании классов семантику сложных структур Имя О-вида Атрибуты О-вида SHIPMENTS.Items [.Art,.Qty] Имя Атрибуты

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах используя имена и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в - выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры. В SQL это SELECT выражение. - командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах используя имена и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в - выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры. В SQL это SELECT выражение. - командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE

Доступ к данным - Простая проекция - Соединение в классе - Соединение по ссылке в атрибуте О-вида - Соединение по ссылке в заголовке О-вида - Отбор объектов Вычисление О-видов. О-виды вычисляются на основании сигнатур, с использований реляционных операций над отношениями R D… Схема результата операций - (OID:dOID, …)

Доступ к данным Вычисление О-видов. Простая проекция. Сигнатура является подмножеством одного из отношений класса -> проекция Shipments [.DocNo,.Date] R SHIPMENTS [OID, DocN, Cntr]

Доступ к данным Вычисление О-видов. Соединение в классе. Сигнатура содержит атрибуты разных отношений класса -> cоединение по OID + переименование атрибутов сложных компонентах Shipments [.DocNo,.Items.Art] (R SHIPMENTS LEFT JOIN OID (R SHIPMENTS.Items RENAME Art AS Items.Art)) [OID, DocN, Items.Art]

Доступ к данным Вычисление О-видов. Соединение по ссылке в атрибуте. Атрибут сигнатуры содержит ссылку -> cоединение (ссылка = OID) + переименование атрибутов «по ссылке» Shipments [.DocNo,.Cntr.Name] (R SHIPMENTS LEFT JOIN Cntr=OID (R CONTRACTOR RENAME Name AS Cntr.Name)) [OID SHIPMENTS, DocN, Cntr.Name] Ссылочные конструкции в атрибутах могут иметь любую длину

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Shipments.Cntr // пример выражения групповой ссылки Выражение групповой ссылки – выражение, возвращающее унарное отношение, содержащие множество OID (групповую ссылку). …в т.ч. любой путь, оканчивающийся на имя ссылки. Shipments [.Cntr] R SHIPMENTS [OID, Cntr]

Доступ к данным Вычисление О-видов. Соединение по ссылке в заголовке. Заголовок сигнатуры содержит ссылку -> cоединение (ссылка = OID) ((R SHIPMENTS )[OID, Cntr] JOIN Cntr=OID R CONTRACTORS ) [OID CONTRACTORS, Name, INN] Shipments.Cntr [.Name,.INN] Ссылочные конструкции в заголовках могут иметь любую длину

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов (в путях) name D Результат: групповая ссылка на объекты, определяемые именем name D класса D или ссылки на него, которые удовлетворяют WHERE-критерию (покортежному) (((R SHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Tie")[OID] JOIN OID=OID R SHIPMENTS ) [OID, DocN] SHIPMENTS [.DocN] Критерий – logical_exp(cont 1, cont 2 …), где cont – продолжение паме D мн-во объектов вычисляется как (D[cont 1, cont 2 …] WHERE logical_exp(cont 1, cont 2 …)) [OID]

Доступ к данным Вычисление О-видов. Отбор объектов. Выражение отбора объектов для сложных компонентов имя_класса_или_ссылки Запятая, - логическая операция межкортежный_AND. Результат: пересечение множеств объектных идентификаторов, сформированных по каждому из связанных запятой критериев Shipments [.DocN] (((R SHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Tie") [OID] INTERSEPT ((R SHIPMENTS.Items RENAME Art AS Items.Art) WHERE Items.Art = "Axe") [OID]) JOIN OID R SHIPMENTS ) [OID, DocN]

Доступ к данным Вычисление О-видов. Отбор объектов. Выражения отбора объектов могут сочетаться и вкладываться Shipments OR.Cntr,.No LIKE 1%>.Cntr [.Name,.INN,.Bank.Name] Shipments.Cntr.Bank [.Name,.BIC] Shipments [.DocN,.Date] Поиск от условий к данным возможен …. …. "против ссылки" …. "по ссылке"

Доступ к данным Использование О-видов. О-виды – отношения, представляющие данные об объектах используя имена и последователностей имен, заданных в описании классов этих объектов. О-виды могут использоваться в - выражениях запросов (в т.ч. ad-hoc запросах), основанных на операциях реляционной алгебры. В SQL это SELECT выражение. - командах, изменяющих данные В SQL это команды INSERT, UPDATE, DELETE Принцип трансляции этих команд 1) Анализ входной команды. Поиск сигнатур используемых О-видов 2) Построение выражений, вычисляющего эти О-виды 3) Во входной команде: Замена выражений, образующие сигнатуры, на построенные вычисляющие выражения

Для одного объекта (R D WHERE OID = this)[a] + (R D WHERE OID = this)[b] где this – объектный идентификатор D ( a INTEGER; b INTEGER;... mthd(...) ) D.mthd(...) AS begin...;... a + b...;...; end Трансляция процедур Идея

множества (!) Для множества (!) объектов (R D WHERE OID JOIN these )[OID, a+b] these – групповая ссылка не нужны! Итераторы (явные и неявние) по объектам не нужны! Операцию доступа – за скобки(!) (R D WHERE OID = this)[a+b] Для одного объекта (R D WHERE OID = this)[a] + (R D WHERE OID = this)[b] this – объектный идентификатор D ( a INTEGER; b INTEGER;... mthd(...) ) D.mthd(...) AS begin...;... a + b...;...; end Трансляция процедур Идея

Трансляция процедур Утверждение о транслируемости: Любая процедура p над компонентами С класса D, может быть транслирована в такую процедуру p' над отношениями R D… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов. EXEC THESE.p(…) EXEC p(these, …) здесь: THESE – выражение гр.ссылки здесь: these – групповая ссылка, обязательный атрибут p

Трансляция процедур Утверждение о транслируемости: Любая процедура p над компонентами С класса D, может быть транслирована в такую процедуру p' над отношениями R D… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов. EXEC THESE.p(…) EXEC p(these, …) здесь: THESE – выражение гр.ссылки здесь: these – групповая ссылка, обязательный атрибут p proc (par 1 :D1, par 2 D2…) { localRelVal (…a:D…) } R par (OID, par 1 :D1, par 2 D2…) R localRelVal (OID, …a:D…) Параметры и локальные переменные существуют в ПРС в relVar с разным временем жизни.

Трансляция процедур Трансляция RValue выражений f( C 1, C 2, …) -> C n где f - суперпозиция примитивных реляционных операций prim op prim op1(C 1, prim op2(C 2, … (…))) Любая из prim op может содержать скалярные операции над атрибутами отношений C i Для любого C i существует такое отношение классов R i, что (R i WHERE OID = theOID)[!OID] –> С i где [!OID] операция проекцию, исключающая атрибут OID Объединение С 1 C 2 ((R 1 R 2 ) WHERE OID = theOID)[!OID] Вычитание С 1 - C 2 Декарт. произв. С 1 C 2 Выборка С WHERE cond Проекция С[a 1, a 2,...] ((R 1 - R 2 ) WHERE OID = theOID)[!OID] ((R 1 JOIN OID R 2 WHERE OID = theOID)[!OID] ((R WHERE cond) WHERE OID = theOID)[!OID] ((R[OID, a 1, a 2,...]) WHERE OID = theOID) [!OID] Атомарные prim op над С i транслируются в следующие op над R i общая схема трансляции атомарных операций prim op(C 1 …) -> C res (op' (R 1 …) WHERE OID = theOID) [!OID] -> С res

Для любого C i существует такое отношение классовR i, что (R i WHERE OID = theOID)[!OID] –> С i где [!OID] операция проекцию, исключающая атрибут OID Для любого C res существует такое отношение результатов R res, что (R res WHERE OID = theOID)[!OID] –> С i где [!OID] операция проекцию, исключающая атрибут OID общая схема трансляции атомарных операций prim op(C 1 …) -> C res (op' (R 1 …) WHERE OID = theOID) [!OID] -> С res таким образом, prim op(C 1 …) -> C res op' (R 1 …) -> R res, R res – отношение результатов В силу замкнутости рел.алгебры, для исходного C n := f( C 1, C 2, …), где f есть суперпозиция prim op 1 (C 1, prim op2(C 2, … (…))) существует R n :=f( R 1, R 2, …), где f есть суперпозиция op 1 (R 1, op 2 (R 2, … (…))) f есть трансляция f ; скалярные операции в трансляции не меняются f'(R 1, R 2, …) JOIN these -> theseR n, R n – объединяет результаты для множества these (гр. ссылка) Трансляция RValue выражений Трансляция процедур

присваивания С i := f(С j, …, С k temp, …)R i := f'(R 1, R 2, …) JOIN these UNION (R n JOIN (R n [OID] MINUS these)) Трансляция последовательности операторов процедура proc – алгоритмическая последовательность операторов - присваивания С j := f(… С i …), R temp - параметры, лок.переменные - вызова call p(…) update R n with (f'(R 1, R 2, …) JOIN these) вызовы EXEC p (…) EXEC p(these …) линейная последовательность С i := f 1 (С 1 …) EXEC some p(С …) С i+1 := f 2 (С 2 … ) … update R i with f 1 (R 1 …) JOIN these EXEC some proc(R …) update R i+1 wirh f 2 (R 2 … ) JOIN these … Трансляция процедур

Трансляция алгоритмов Операторы if… и while… групповая ссылка these может быть разделена по заданному условию Оператор if… C n := f 1 (С …) … if(condition) then C n+1 := f 2 (С …) update R n with (f' 1 (R …) JOIN these) … these TRUE := these update R n+1 with (f' 2 (R …) JOIN these TRUE ) Оператор while… (выходим из цикла, если нет объектов, удовлетворяющий условию.) C n := f 1 (С …) … while(condition) begin … C n+1 := f 2 (С …) … end update R n with (f' 1 (R …) JOIN these) … these TRUE := these while(count(these TRUE )>0) begin … update R n+1 with (f' 2 (R …) JOIN these TRUE ) … these TRUE := these … WHERE condition end Трансляция процедур

Утверждение о транслируемости: Любая процедура p над компонентами С класса D, может быть транслирована в такую процедуру p' над отношениями R D… этого класса, что результат однократного исполнения процедуры p' будет аналогичен исполнению исходной процедуры p в каждом объекте из заданного множества объектов. EXEC THESE.p(…) EXEC p(these, …) здесь: THESE – выражение гр.ссылки здесь: these – групповая ссылка, обязательный атрибут p Трансляция процедур

служат для персистентного хранения данных. Для их реализации создаются реальные переменные отношения ПРС, схема которых в точности соответствует ранее описанным отношениям R D…. Хранимые компоненты real R D.C (OID: dOID, a:D, …) класс D(…C(a:D…), …) STORED реализация D.C AS STORED;

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены. класс D(…C, M(…), …) реализации D.C AS f 1 (…); D.M(…) AS p 1 ; класс- наследник sub D EXTEND D (…) переопределение реализаций sub D.C AS STORED; sub D.M(…) AS p 2 ; … Отношение класса R D… объединяет (связывает) результаты трансляций реализаций. - для сложного компонента R D.C AS f 1(…) UNION real R D.C - для простого компонента R D AS real R D LEFT JOIN OID (f 1(…) [OID, calc C]) [OID, …, REPLACE(C, calc C), …], где REPLACE(C, calc C) заменяет хранимое значение простого компонента C на вычисленное значение calc C (если такое есть). Связывание полиморфных компонентов

Связывание Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены. Для метода M, определнного в классе D, создается процедура D.M, связывающая все существующие реализации этого метода D.M(these, …) AS begin p 1 (these INTERSEPT scope(p 1 ), …) p 2 (these INTERSEPT scope(p 2 ), …) end где scope(p) определяет множество объектов, с которым связана реализация р. класс D(…C, M(…), …) реализации D.C AS f 1 (…); D.M(…) AS p 1 ; класс- наследник sub D EXTEND D (…) переопределение реализаций sub D.C AS STORED; sub D.M(…) AS p 2 ; … Связывание полиморфных методов

Трансляция Цель: Система, состоящая из множества персистентных объектов разных классов D, определенных на расширяемом множестве доменов (D 1,…, D n,…) Команды декларативного ОО-языка - Спецификация класса (структура и ключи) - Создание объектов - Доступ к данным (запись и чтение) - Реализация класса (выражения и процедуры) и связывание реализаций Таблица символов Программируемая Реляционная Система Ошибк и Транслятор Выходные данные Каталог БД Команды ПРС Реляционная БД определенная на фиксированном множестве доменов (dOID, D 1, … D j )

прототип («RxO System») SQL-сервер Прототип. SQL трансляция ОО-расширения

Прототип. CREATE CLASS BANKS { Name STRING; BIC STRING; }KEY uniqBIC (BIC);//ключ класса - БИК уникален для банка CREATE CLASS CONTRACTORS//КОНТРАГЕНТЫ { Name STRING; Bank BANKS;//ссылка на BANKS BankAcc STRING; INN STRING; }KEY uniqINN (INN); CREATE CLASS GOODS//ТОВАРЫ { Art STRING; PricePL FLOAT;//цена Turnover SET OF//Оборот (компонент-набор) { Txt STRING;//комментарии Date DATETIME;//дата DocN STRING;//номер Cntr CONTRACTORS;//ссылка на CONTRACTORS Qty INTEGER;//кол-во }KEY Key2Turn (DocN, Cntr); //ключ компонента-набора QtyFree INTEGER;//остаток на складе }KEY UniqArt (Art); Создание класса. Спецификация класса.

Прототип. CREATE CLASS SHIPMENTS//товарные операции { DocN STRING;//номер Cntr CONTRACTORS;//ссылка на контрагента DocDate DATETIME;//дата заказа Txt STRING;//комментарии PostIt PostIt(inDate DATETIME);//метод "учесть" PostDate DATETIME;//дата учета Items Items SET OF//компонент-набор – список перевозимых товаров { Art STRING;//артикул – (внешний ключ, см.ниже) Qty INTEGER;//штук }KEY uniqArt (Art);//ключ набора – артикулы не повторяются }KEY uniqDocN (DocN) REFERENCE ToUniqArt//внешний ключ – перевозимые артикулы Items.(Art) ON GOODS.UniqArt;// описаны в GOODS Создание класса. Спецификация класса. Создание класса - Спецификация класса (команда CREATE CLASS …) существование класса и его интерфейс. - Для каждого компонента и метода задается реализация (команда ALTER CLASS… REALIZE … )

Компоненты Компоненты могут быть реализованы 1) Как хранимые … AS STORED ; 2) Как вычисляемые с помощью процедуры, возвращающей значение …AS { тело_процедуры }; Методы класса Методы класса реализуются только как процедуры и не возвращают значения Прототип. ALTER CLASS BANKS REALIZE( Name STRING, BIC STRING )AS STORED; Создание класса. Реализация класса. ALTER CLASS GOODS REALIZE QtyFree INTEGER AS { DECLARE { tmpQty INTEGER; tmpQtyRes INTEGER; } tmpQty:= SELECT SUM(#g.Items.Qty) FROM SHIPMENTS #g WHERE #g.PostDate IS NOT NULL AND #g.Items.Art = Art; IF(tmpQty IS NULL) THEN tmpQty:= 0; tmpQtyRes:= SELECT SUM(#g.Items.Qty) FROM SHIPMENTS #g WHERE #g.Items.Art = Art AND #g.PostDate IS NULL AND #g.Items.Qty < 0; IF(tmpQtyRes IS NULL) THEN tmpQtyRes:= 0; RETURN tmpQty + tmpQtyRes; };

Прототип. NEW CONTRACTORS WITH SET.Name := "X3",.Bank := (NEW BANKS WITH SET.BIC := "30602"),.BankAcc := "40602",.INN := "772"; Создание и доступ к объектам. Объекты создаются командой NEW NEW имя_класса [WITH…] refVar := NEW имя_класса [WITH…] Объекты уничтожаются командой DESTROY DESTROY групповая_ссылка DESTROY BANKS[.BIC = "I.E."]; Объекты никогда не "теряются". Относясь к классу, они доступны при групповых операциях с классом.

Прототип. Изменение данных. Для изменения данных используются традиционные SQL операции, использующие в качестве аргуменов пути и путевые продолжения INSERT INTO путь ({ппрод := …}(,n)) UPDATE путь SET {ппрод :=…}(,n) DELETE FROM путь INSERT INTO SHIPMENTS[.DocN = "F.e."].Items (.Art,.Qty) VALUES("Tie", 10); Методы класса выполняются командой EXEC путь.имя_метода ([параметры]) EXEC SHIPMENTS[.DocDate

Прототип. Запросы. Для запросов к данным используются традиционное SELECT выражение, использующие для обозначения источников данных пути и путевые продолжения SELECT ппрод FROM путь …;

Прототип. CREATE CLASS VALUEOPS //фин.документ { VDocN STRING;//номер VDate DATETIME;//дата ExpVal FLOAT;//ожидаемая сумма Value FLOAT;//сумма }; CREATE CLASS SALES EXTENDED SHIPMENTS, VALUEOPS { SaleItems SET OF //компонент-набор: данные о проданных товарах { Art STRING; //артикул Price FLOAT; //цена Qty INTEGER; //штук }KEY uniqArtPrice (Art,Price); } REFERENCE ToUniqArt SaleItems.(Art) ON GOODS.UniqArt; Наследование. Допускается множественное наследование. Структура класса-наследника объединяет множества наследуемых и собственных компонентов и методов. Реализации наследуемых компонентов и методов могут быть переопределены. SHIPMENTS Items - хранимый VALUEOPS SALES SaleItems - хранимый Items - RValue(SaleItems)

EXEC SHIPMENTS[.DocDate

EXEC SHIPMENTS[.DocDate

Использование Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур. При этом он позволяет: 1) использовать расширяемое множество доменов. 2) задавать внешние ключи между классами и отношениями. 3) комбинировать в запросах данные из отношения и классов. Программируемая реляционная система ОО-трансляция SQL (или др. язык) + ОО-расширения Развитие существующих реляционных DBMS

Использование Предложенный подход не противоречит и не препятствует использованию «обычных» реляционных структур. При этом он позволяет: 1) использовать расширяемое множество доменов. 2) задавать внешние ключи между классами и отношениями. 3) комбинировать в запросах данные из отношения и классов. Программируемая реляционная система ОО-трансляция SQL (или др. язык) + ОО-расширения Развитие существующих реляционных DBMS

Использование. Эволюционное развитие существующих реляционных СУБД. Добавляются функции - инструмента создания объектных моделей предметной области. - среды персистентного существования объектов. - инструмента, позволяющего получать данные о состоянии существующих объектов. результат: Сервер модели предметной области Евгений Григорьев (с) 2011 "Д.002 Данные Представление фактов о предметной области системы баз данных или информационной системы в форме, допускающей их хранение и обработку на компьютере, передачу по каналам связи, а также восприятие человеком." М.Р.Когаловский Энциклопедия технологий баз данных.

Использованная литература: Григорьев Е.А. Объектно-ориентированная трансляция для программируемых реляционных систем. (текущая версия) Григорьев Е.А. RxO - прототип. Объектно-ориентированные SQL-подобные языковые расширения. (текущая версия) Пратт Т., Зелковиц М. Языки программирования: разработка и реализация. 4-е изд. – СПб: Питер, Codd, E.F. A Relational Model of Data for Large Shared Data Banks. CACM 13(6), June Republished in Milestones of Research -- Selected Papers (CACM 25th Anniversary Issue), CACM 26(1), January Мейер Д. Теория реляционных баз данных. – М.: Мир, Hugh Darwen and C.J. Date. The Third Manifesto. (текущая версия). А. Эйзенберг, Дж. Мелтон. SQL:1999, ранее известный как SQL3 (перевод Кузнецова С.Д.).

Объектно-ориентированный транслятор для программируемой реляционной системы. Евгений Григорьев (с) 2011 СПАСИБО!