<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=195.19.43.52</id>
	<title>Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://iu5bmstu.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=195.19.43.52"/>
	<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/195.19.43.52"/>
	<updated>2026-04-30T04:16:42Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%968_-_OQL&amp;diff=5439</id>
		<title>ПБД (9) - Лекция №8 - OQL</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%968_-_OQL&amp;diff=5439"/>
		<updated>2016-11-02T11:12:37Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Запросы на OQL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Tabli4ka warning undone summary|text=&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;- [[#Запросы на OQL | примеров запросов на языке OQL]].}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
== SQL ==&lt;br /&gt;
&lt;br /&gt;
=== Пользовательские типы данных ===&lt;br /&gt;
&lt;br /&gt;
User Defined Types - UDT.&lt;br /&gt;
&lt;br /&gt;
Создаём свой тип:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TYPE Addr as&lt;br /&gt;
(&lt;br /&gt;
    city char(20),&lt;br /&gt;
    street varchar(100)&lt;br /&gt;
)&lt;br /&gt;
-- объявление метода&lt;br /&gt;
method fullad() returns varchar(130);&lt;br /&gt;
&lt;br /&gt;
-- определение метода&lt;br /&gt;
CREATE method fullad() returns varchar(130)&lt;br /&gt;
for Addr&lt;br /&gt;
begin&lt;br /&gt;
    return self.city || self.street&lt;br /&gt;
end;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Используем его при описании других:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TYPE Studia as&lt;br /&gt;
(&lt;br /&gt;
    sname varchar(50),&lt;br /&gt;
    addr Addr&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TYPE Actor as&lt;br /&gt;
(&lt;br /&gt;
    inn int,&lt;br /&gt;
    fio varchar(50),&lt;br /&gt;
    addr Addr&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаём таблицы со ссылками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE Tact of Actor&lt;br /&gt;
(&lt;br /&gt;
    primary key (inn),&lt;br /&gt;
    ref is Ida system generated&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE TSt&lt;br /&gt;
(&lt;br /&gt;
    ref is Ids system generated&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаём тип со ссылками:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TYPE Film as&lt;br /&gt;
(&lt;br /&gt;
    title varchar(80),&lt;br /&gt;
    year unt,&lt;br /&gt;
    len int,&lt;br /&gt;
    type char(2),&lt;br /&gt;
    st REF(Studia) [SCOPE TSt] -- SCOPE показывает, что это на конкретную талицу&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё таблицы:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE FA&lt;br /&gt;
(&lt;br /&gt;
    act REF(Actor) SCOPE TAct,&lt;br /&gt;
    film REF(Film) SCOPE TF&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE TF of Film&lt;br /&gt;
(&lt;br /&gt;
    ref is Idf system generated&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запросы к UDT ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
-- один ко многим&lt;br /&gt;
SELECT year, len st-&amp;gt;sname, st-&amp;gt;addr.city, st-&amp;gt;addr.fullad()&lt;br /&gt;
FROM TF&lt;br /&gt;
WHERE title = &#039;The Matrix&#039;&lt;br /&gt;
&lt;br /&gt;
-- многие ко многим (обращение к одной таблице, которая её реализует)&lt;br /&gt;
SELECT film-&amp;gt;title, film-&amp;gt;year, film-&amp;gt;st-&amp;gt;name&lt;br /&gt;
FROM FA&lt;br /&gt;
WHERE act-&amp;gt;fio=&#039;Иванов&#039;&lt;br /&gt;
&lt;br /&gt;
-- разыменование ссылок&lt;br /&gt;
SELECT deref(act)&lt;br /&gt;
FROM FA&lt;br /&gt;
WHERE film-&amp;gt;title=&#039;The Matrix&#039; -- выведет всех актёров этого фильма&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
Создаются системой автоматически.&lt;br /&gt;
&lt;br /&gt;
===== Методы обозреватели =====&lt;br /&gt;
&lt;br /&gt;
Они же &amp;lt;code&amp;gt;getter&amp;lt;/code&amp;gt;. Совпадают с названием поля, не имеют параметров. Нужны для получения значений полей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT f.title(), f.len()&lt;br /&gt;
FROM TF&lt;br /&gt;
WHERE f.type=&#039;BW&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Методы модификаторы =====&lt;br /&gt;
&lt;br /&gt;
Они же &amp;lt;code&amp;gt;setter&amp;lt;/code&amp;gt;. Для изменения значения полей.&lt;br /&gt;
&lt;br /&gt;
===== Методы генераторы =====&lt;br /&gt;
&lt;br /&gt;
Они же конструкторы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
DECLARE newA Addr;&lt;br /&gt;
DECLARE newS Stud;&lt;br /&gt;
&lt;br /&gt;
set newA = Addr();   -- вызов конструктора&lt;br /&gt;
newA.city(&#039;Москва&#039;);&lt;br /&gt;
newA.street(&#039;Ленина, 2&#039;);&lt;br /&gt;
&lt;br /&gt;
set newS = Studia(); -- вызов конструктора&lt;br /&gt;
newS.sname(&#039;Мосфильм&#039;);&lt;br /&gt;
news.addr(newA);&lt;br /&gt;
&lt;br /&gt;
INSERT INTO TSt VALUES(newS);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Сравнение типов ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE ORDERING for Addr&lt;br /&gt;
&amp;lt;EQUALS ONLY | ORDER FULL | RELATIVE WITH f&amp;gt; BY STATE&lt;br /&gt;
-- f - это функция, выполняющая сравнение двух параметров&lt;br /&gt;
-- она не стандартная, её надо создать&lt;br /&gt;
CREATE FUNCTION f(x1 Addr, x2 Addr) returns int&lt;br /&gt;
    IF x1.city &amp;gt; x2.city TNEN return 1;&lt;br /&gt;
    ELSE IF x1.city &amp;lt; x2.city TNEN return -1;&lt;br /&gt;
    ELSE IF x1.street &amp;gt; x2.street TNEN return 1;&lt;br /&gt;
    ELSE IF x1.street &amp;lt; x2.street TNEN return -1;&lt;br /&gt;
    ELSE return 0;&lt;br /&gt;
    END IF;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Производные типы ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TYPE имя UNDER базовый тип as&lt;br /&gt;
(&lt;br /&gt;
    поле тип,&lt;br /&gt;
    ...&lt;br /&gt;
    [[not] instantiable] -- можно ли на его основе создать ещё тип&lt;br /&gt;
    [not] final          -- можно ли его переопределять&lt;br /&gt;
    &amp;lt;ref is system generated | ref using тип | ref using (атрибут)&amp;gt;&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
[overriding]&lt;br /&gt;
[&amp;lt;instance | static | constructor&amp;gt;]&lt;br /&gt;
method название(параметры) returns тип&lt;br /&gt;
[self as &amp;lt;result | locator&amp;gt;]&lt;br /&gt;
[parameter style &amp;lt;SQL | Java | ...&amp;gt;]&lt;br /&gt;
[[not] deteministic]&lt;br /&gt;
[no SQL | contains SQL | ...]&lt;br /&gt;
[return &amp;lt;NULL on NULL input | called on NULL input&amp;gt;]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OQL ==&lt;br /&gt;
&lt;br /&gt;
Object Query Language.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
class Film(extent EF)&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute string year;&lt;br /&gt;
    attribute string len;&lt;br /&gt;
    attribute string type;&lt;br /&gt;
    &lt;br /&gt;
    relationship Stud st inverse Stud::fl;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; acts inverse Actor::films;&lt;br /&gt;
    &lt;br /&gt;
    set &amp;lt;Stud&amp;gt; StofFl();&lt;br /&gt;
    &lt;br /&gt;
    -- метод&lt;br /&gt;
    int firstFilm();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class Actor(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute string fio;&lt;br /&gt;
    attribute int inn;&lt;br /&gt;
    &lt;br /&gt;
    relationship set &amp;lt;Film&amp;gt; films inverse ... ;&lt;br /&gt;
    &lt;br /&gt;
    -- атрибут-структура&lt;br /&gt;
    attribute Struct{string city, string street} addr;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Запросы на OQL ===&lt;br /&gt;
Связь М-М, все актеры, которые снимались в фильме:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT a.fio&lt;br /&gt;
FROM EF f, f.acts a&lt;br /&gt;
WHERE f.title=&amp;quot;Иванов&amp;quot; AND f.year &amp;lt; 1950&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT a.fio, a.addr&lt;br /&gt;
FROM EA a&lt;br /&gt;
WHERE for all f in a.films : f.st.sname=&amp;quot;Мосфильм&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Коллекция - элемент, множество связанных объектов и вложенный подзапрос.&lt;br /&gt;
Пример с группировкой:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
4 SELECT st, y , sumlen: sum(SELECT P.f.len FROM PARTITION P)&lt;br /&gt;
1 FROM ES st, st.fms F&lt;br /&gt;
2 WHERE f.year&amp;gt;2000&lt;br /&gt;
3 GROUP BY st:st.name, y:f.year&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
PARTITION - результат группировки, коллекция всех объектов, которые попали в отдельную группу.&lt;br /&gt;
Здесь st и f.&lt;br /&gt;
WHERE работает до группировки.&lt;br /&gt;
HAVING накладывает ограничения на группы. Если он есть, то выполняется 4-ым шагом ( до SELECT&#039;а).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
HAVING MIN(SELECT p.f.len FROM PARTITION P)&amp;gt;60.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сортировка:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ORDER BY ASC st, year&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Агрегаты ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
COUNT() - Для любых&lt;br /&gt;
MIN() - для подлежащих сортировке&lt;br /&gt;
SUM() - только для числовых&lt;br /&gt;
AVG() - только для числовых&lt;br /&gt;
MAX() - для подлежащих сортировке&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно применять к коллекции:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
COUNT(EF) - кол-во элементов в экстенте.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Поддерживаются кванторы:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT a&lt;br /&gt;
FROM EA a&lt;br /&gt;
WHERE FOR ALL F IN a.films:F.st.name=&amp;quot;ЛенФильм&amp;quot; AND f.year=2016&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
FOR ALL IN - квантор всеобщности&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT a&lt;br /&gt;
FROM EA a&lt;br /&gt;
WHERE EXISTS f1 IN a.films:f.yaer&amp;lt;2000&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запрос на единственность:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT s&lt;br /&gt;
FROM ES s&lt;br /&gt;
WHERE COUNT(s.fms)=1&lt;br /&gt;
Те студии, которые сняли только один фильм.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По умолчанию возвращается мультимножество структур. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT a.fio, f.year&lt;br /&gt;
Bag&amp;lt;struct{struct{f, i, o}, integer year}&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если хочется SET:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT DISTINCT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Если хочется LIST:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
ORDER BY&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Можно и свою коллекцию:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT struct(fam:a.fio.f, yearMade:f.year)&lt;br /&gt;
Если поле одно, то структура не формируется.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;mysql&amp;quot;&amp;gt;&lt;br /&gt;
(SELECT a&lt;br /&gt;
FROM EA a, a.films f&lt;br /&gt;
WHERE f.stud.name=&amp;quot;МосФильм&amp;quot;)&lt;br /&gt;
EXCEPT&lt;br /&gt;
(SELECT a&lt;br /&gt;
FROM EA a, EF f&lt;br /&gt;
WHERE f.stud.name=&amp;quot;Экран&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Аналогично можно с UNION и INTERSECT&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=5438</id>
		<title>ПБД (9) - Лекция №3 - Модели данных (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=5438"/>
		<updated>2016-11-02T09:53:56Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Переход от объектной модели к реляционной модели */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
Продолжаем работать с нашим примером:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
== ODL ==&lt;br /&gt;
&lt;br /&gt;
=== Для нашего примера ===&lt;br /&gt;
&lt;br /&gt;
Кстати, ключи везде прописывать не обязательно, потому что по умолчанию всегда будет OID. И он будет назначаться всегда, даже если мы объявим ещё и свой ключ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Film(extent Films&lt;br /&gt;
	key(name, year))&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 attribute integer year;&lt;br /&gt;
 attribute integer len;&lt;br /&gt;
 attribute enum Ftype {bw, color} type;&lt;br /&gt;
&lt;br /&gt;
 relationship Studia stud&lt;br /&gt;
	inverse Studia::fs;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Actor&amp;gt; acts &lt;br /&gt;
	inverse Actor::infs;&lt;br /&gt;
&lt;br /&gt;
 -- пример метода. Считает актёров и возвращает noActors, если нету ни одного&lt;br /&gt;
 integer ActCount() raises(noActors);&lt;br /&gt;
&lt;br /&gt;
 void FinYear(in integer year, out Set&amp;lt;Films&amp;gt;) raises(noFilms, badYear);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Studia(extent Studies)&lt;br /&gt;
{&lt;br /&gt;
 attribute string sname;&lt;br /&gt;
 attribute Struct Addr&lt;br /&gt;
	{&lt;br /&gt;
	 string city,&lt;br /&gt;
	 string street&lt;br /&gt;
	} addr;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; fs&lt;br /&gt;
	inverse Film::stud;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Actor(extent Actors&lt;br /&gt;
	key inn)&lt;br /&gt;
{&lt;br /&gt;
 attribute string inn;&lt;br /&gt;
 attribute string fio;&lt;br /&gt;
 attribute List&amp;lt;string&amp;gt; edu;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; infs&lt;br /&gt;
	inverse Film::acts;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class MF extends Film(extent MFS)&lt;br /&gt;
{&lt;br /&gt;
 attribute string drawer;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Drama extends Film (extent Dranas)&lt;br /&gt;
{&lt;br /&gt;
 attribute Struct&lt;br /&gt;
	{&lt;br /&gt;
	 Set&amp;lt;string&amp;gt; authors,&lt;br /&gt;
	 string bname&lt;br /&gt;
	} book;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Для примера с ВУЗом ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Vuz(extent Vs)&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Kaf&amp;gt; Kafs&lt;br /&gt;
	inverse Kaf::vuzz;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- слабая сущность&lt;br /&gt;
class Kaf(extent Ks&lt;br /&gt;
	key(kname, vuzz))&lt;br /&gt;
{&lt;br /&gt;
 attribute string kname;&lt;br /&gt;
 &lt;br /&gt;
 relationship Vuz vuzz&lt;br /&gt;
	inverse Vuz::Kafs;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Про связи ===&lt;br /&gt;
&lt;br /&gt;
Все связи строго бинарны - можно связать только два объекта. Чтобы связать больше объектов (например, три), надо делать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Gr(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 attribute ...&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; gin&lt;br /&gt;
	inverse ADG::g;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Dis(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; din&lt;br /&gt;
	inverse ADG::d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Aud(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; in&lt;br /&gt;
	inverse ADG::a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- этот класс содержит связи&lt;br /&gt;
class ADG(extent edgs)&lt;br /&gt;
{ &lt;br /&gt;
 relationship Aud a&lt;br /&gt;
	inverse Aud::in;&lt;br /&gt;
 relationship Dis d&lt;br /&gt;
	inverse Dis::din;&lt;br /&gt;
 relationship Gr g&lt;br /&gt;
	inverse Gr::gin;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Переход от объектной модели к реляционной модели ==&lt;br /&gt;
&lt;br /&gt;
Когда это может понадобиться:&lt;br /&gt;
* при переходе из объектного проекта в реляционную реализацию;&lt;br /&gt;
* при необходимости создать реляционную проекцию в объектной БД.&lt;br /&gt;
&lt;br /&gt;
Преобразования:&lt;br /&gt;
* класс с экземплярами атомарных атрибутов преобразуется в схему отношений с теми же самыми атрибутами;&lt;br /&gt;
* составные атрибуты преобразуются в ненормализованное отношение, которое после этого надо нормализовать во избежание аномалий;&lt;br /&gt;
* методы не преобразуются вообще, они теряются, так как в реляции методов нет;&lt;br /&gt;
* ключ преобразуется в ключ;&lt;br /&gt;
* если ключа не было, то вводится дополнительное поле, которое будет ключом;&lt;br /&gt;
* у структур поля преобразуются в отдельный атрибут;&lt;br /&gt;
* множества преобразуются в множества кортежей.&lt;br /&gt;
* Отношение М-М = отдельная таблица с ключами&lt;br /&gt;
* Отношение 1-М = FK на стороне М&lt;br /&gt;
&lt;br /&gt;
Пример с нашим примером:&lt;br /&gt;
&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type);&lt;br /&gt;
 Stusies(sname, city, street, &amp;lt;u&amp;gt;sid&amp;lt;/u&amp;gt;);&lt;br /&gt;
 Actor(f, i ,o, edu, &amp;lt;u&amp;gt;inn&amp;lt;/u&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
== Объектно-реляционная модель данных ==&lt;br /&gt;
&lt;br /&gt;
Это расширение реляционной модели. В основе лежит реляция - те же самые схемы отношений, экземпляры отношений, но добавляются некоторые возможности:&lt;br /&gt;
* составные атрибуты:&lt;br /&gt;
** структура;&lt;br /&gt;
** коллекция:&lt;br /&gt;
*** список;&lt;br /&gt;
*** массив;&lt;br /&gt;
*** мультимножество;&lt;br /&gt;
*** множество структур (&#039;&#039;вложенное отношение&#039;&#039;):&lt;br /&gt;
 Actors(&amp;lt;u&amp;gt;inn&amp;lt;/u&amp;gt;, fio, edu(year, Vuz));&lt;br /&gt;
* методы;&lt;br /&gt;
** методы экземпляров;&lt;br /&gt;
** методы классов;&lt;br /&gt;
* ссылки - теперь в качестве значения атрибута можно хранить ссылку на конкретный кортеж:&lt;br /&gt;
 Studies(sname, addr, s&amp;lt;u&amp;gt;id&amp;lt;/u&amp;gt;&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type, stud(*(Studies)));&lt;br /&gt;
&lt;br /&gt;
Для соблюдения стандарта SQL&#039;99 связь 1:M создаётся добавлением в таблицу со стороны М ссылки на кортеж таблицы со стороны 1.&lt;br /&gt;
&lt;br /&gt;
А связь М:М создаётся путём отдельной дополнительной таблицы, содержащей ссылки на соответствующие кортежи таблиц.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение объектной и объектно-реляционной модели ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! Объектная модель !! Объектно-реляционная модель&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | класс → экстент&amp;lt;br&amp;gt;объект || схема отношения → отношение (таблица)&amp;lt;br&amp;gt;кортеж&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | методы || методы&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | структуры, коллекции,&amp;lt;br&amp;gt;множество структур (классы) || структуры, коллекции,&amp;lt;br&amp;gt;множество структур (схемы отношений или вложенные отношения)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | OID скрыт || OID может быть доступен&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 класс - 1 экстент&amp;lt;br&amp;gt;1 интерфейс - N классов и N их экстентов || 1 схема отношений - N отношений (таблиц)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | обратной совместимости с реляционной моделью нет || обратно совместима с реляционной моделью&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=5437</id>
		<title>ПБД (9) - Лекция №3 - Модели данных (продолжение)</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5)&amp;diff=5437"/>
		<updated>2016-11-02T09:49:36Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Переход от объектной модели к реляционной модели */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
Продолжаем работать с нашим примером:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
== ODL ==&lt;br /&gt;
&lt;br /&gt;
=== Для нашего примера ===&lt;br /&gt;
&lt;br /&gt;
Кстати, ключи везде прописывать не обязательно, потому что по умолчанию всегда будет OID. И он будет назначаться всегда, даже если мы объявим ещё и свой ключ.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Film(extent Films&lt;br /&gt;
	key(name, year))&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 attribute integer year;&lt;br /&gt;
 attribute integer len;&lt;br /&gt;
 attribute enum Ftype {bw, color} type;&lt;br /&gt;
&lt;br /&gt;
 relationship Studia stud&lt;br /&gt;
	inverse Studia::fs;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Actor&amp;gt; acts &lt;br /&gt;
	inverse Actor::infs;&lt;br /&gt;
&lt;br /&gt;
 -- пример метода. Считает актёров и возвращает noActors, если нету ни одного&lt;br /&gt;
 integer ActCount() raises(noActors);&lt;br /&gt;
&lt;br /&gt;
 void FinYear(in integer year, out Set&amp;lt;Films&amp;gt;) raises(noFilms, badYear);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Studia(extent Studies)&lt;br /&gt;
{&lt;br /&gt;
 attribute string sname;&lt;br /&gt;
 attribute Struct Addr&lt;br /&gt;
	{&lt;br /&gt;
	 string city,&lt;br /&gt;
	 string street&lt;br /&gt;
	} addr;&lt;br /&gt;
&lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; fs&lt;br /&gt;
	inverse Film::stud;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Actor(extent Actors&lt;br /&gt;
	key inn)&lt;br /&gt;
{&lt;br /&gt;
 attribute string inn;&lt;br /&gt;
 attribute string fio;&lt;br /&gt;
 attribute List&amp;lt;string&amp;gt; edu;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Film&amp;gt; infs&lt;br /&gt;
	inverse Film::acts;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class MF extends Film(extent MFS)&lt;br /&gt;
{&lt;br /&gt;
 attribute string drawer;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Drama extends Film (extent Dranas)&lt;br /&gt;
{&lt;br /&gt;
 attribute Struct&lt;br /&gt;
	{&lt;br /&gt;
	 Set&amp;lt;string&amp;gt; authors,&lt;br /&gt;
	 string bname&lt;br /&gt;
	} book;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Для примера с ВУЗом ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Vuz(extent Vs)&lt;br /&gt;
{&lt;br /&gt;
 attribute string name;&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;Kaf&amp;gt; Kafs&lt;br /&gt;
	inverse Kaf::vuzz;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- слабая сущность&lt;br /&gt;
class Kaf(extent Ks&lt;br /&gt;
	key(kname, vuzz))&lt;br /&gt;
{&lt;br /&gt;
 attribute string kname;&lt;br /&gt;
 &lt;br /&gt;
 relationship Vuz vuzz&lt;br /&gt;
	inverse Vuz::Kafs;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Про связи ===&lt;br /&gt;
&lt;br /&gt;
Все связи строго бинарны - можно связать только два объекта. Чтобы связать больше объектов (например, три), надо делать так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Gr(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 attribute ...&lt;br /&gt;
 &lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; gin&lt;br /&gt;
	inverse ADG::g;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Dis(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; din&lt;br /&gt;
	inverse ADG::d;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Aud(extent ...)&lt;br /&gt;
{&lt;br /&gt;
 relationship Set&amp;lt;ADG&amp;gt; in&lt;br /&gt;
	inverse ADG::a;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
-- этот класс содержит связи&lt;br /&gt;
class ADG(extent edgs)&lt;br /&gt;
{ &lt;br /&gt;
 relationship Aud a&lt;br /&gt;
	inverse Aud::in;&lt;br /&gt;
 relationship Dis d&lt;br /&gt;
	inverse Dis::din;&lt;br /&gt;
 relationship Gr g&lt;br /&gt;
	inverse Gr::gin;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Переход от объектной модели к реляционной модели ==&lt;br /&gt;
&lt;br /&gt;
Когда это может понадобиться:&lt;br /&gt;
* при переходе из объектного проекта в реляционную реализацию;&lt;br /&gt;
* при необходимости создать реляционную проекцию в объектной БД.&lt;br /&gt;
&lt;br /&gt;
Преобразования:&lt;br /&gt;
* класс с экземплярами атомарных атрибутов преобразуется в схему отношений с теми же самыми атрибутами;&lt;br /&gt;
* составные атрибуты преобразуются в ненормализованное отношение, которое после этого надо нормализовать во избежание аномалий;&lt;br /&gt;
* методы не преобразуются вообще, они теряются, так как в реляции методов нет;&lt;br /&gt;
* ключ преобразуется в ключ;&lt;br /&gt;
* если ключа не было, то вводится дополнительное поле, которое будет ключом;&lt;br /&gt;
* у структур поля преобразуются в отдельный атрибут;&lt;br /&gt;
* множества преобразуются в множества кортежей.&lt;br /&gt;
&lt;br /&gt;
Пример с нашим примером:&lt;br /&gt;
&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type);&lt;br /&gt;
 Stusies(sname, city, street, &amp;lt;u&amp;gt;sid&amp;lt;/u&amp;gt;);&lt;br /&gt;
 Actor(f, i ,o, edu, &amp;lt;u&amp;gt;inn&amp;lt;/u&amp;gt;);&lt;br /&gt;
&lt;br /&gt;
== Объектно-реляционная модель данных ==&lt;br /&gt;
&lt;br /&gt;
Это расширение реляционной модели. В основе лежит реляция - те же самые схемы отношений, экземпляры отношений, но добавляются некоторые возможности:&lt;br /&gt;
* составные атрибуты:&lt;br /&gt;
** структура;&lt;br /&gt;
** коллекция:&lt;br /&gt;
*** список;&lt;br /&gt;
*** массив;&lt;br /&gt;
*** мультимножество;&lt;br /&gt;
*** множество структур (&#039;&#039;вложенное отношение&#039;&#039;):&lt;br /&gt;
 Actors(&amp;lt;u&amp;gt;inn&amp;lt;/u&amp;gt;, fio, edu(year, Vuz));&lt;br /&gt;
* методы;&lt;br /&gt;
** методы экземпляров;&lt;br /&gt;
** методы классов;&lt;br /&gt;
* ссылки - теперь в качестве значения атрибута можно хранить ссылку на конкретный кортеж:&lt;br /&gt;
 Studies(sname, addr, s&amp;lt;u&amp;gt;id&amp;lt;/u&amp;gt;&lt;br /&gt;
 Films(&amp;lt;u&amp;gt;name, year&amp;lt;/u&amp;gt;, len, type, stud(*(Studies)));&lt;br /&gt;
&lt;br /&gt;
Для соблюдения стандарта SQL&#039;99 связь 1:M создаётся добавлением в таблицу со стороны М ссылки на кортеж таблицы со стороны 1.&lt;br /&gt;
&lt;br /&gt;
А связь М:М создаётся путём отдельной дополнительной таблицы, содержащей ссылки на соответствующие кортежи таблиц.&lt;br /&gt;
&lt;br /&gt;
=== Сравнение объектной и объектно-реляционной модели ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! Объектная модель !! Объектно-реляционная модель&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | класс → экстент&amp;lt;br&amp;gt;объект || схема отношения → отношение (таблица)&amp;lt;br&amp;gt;кортеж&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | методы || методы&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | структуры, коллекции,&amp;lt;br&amp;gt;множество структур (классы) || структуры, коллекции,&amp;lt;br&amp;gt;множество структур (схемы отношений или вложенные отношения)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | OID скрыт || OID может быть доступен&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 класс - 1 экстент&amp;lt;br&amp;gt;1 интерфейс - N классов и N их экстентов || 1 схема отношений - N отношений (таблиц)&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | обратной совместимости с реляционной моделью нет || обратно совместима с реляционной моделью&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5436</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5436"/>
		<updated>2016-11-02T09:40:02Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Интерфейсы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface IVuz&lt;br /&gt;
{&lt;br /&gt;
    attribute ...&lt;br /&gt;
    string fun();&lt;br /&gt;
    relationship ....&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
 возвращаемый_тип название (аргумент1, аргумент2, ...) raises(исключение1, исключение2...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Аргумент====&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    in/out/inout тип имя&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5435</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5435"/>
		<updated>2016-11-02T09:39:34Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Интерфейсы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface IVuz&lt;br /&gt;
{&lt;br /&gt;
    attribute string fun();&lt;br /&gt;
    relationship ....&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
 возвращаемый_тип название (аргумент1, аргумент2, ...) raises(исключение1, исключение2...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Аргумент====&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    in/out/inout тип имя&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5434</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5434"/>
		<updated>2016-11-02T09:37:56Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
 возвращаемый_тип название (аргумент1, аргумент2, ...) raises(исключение1, исключение2...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Аргумент====&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    in/out/inout тип имя&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5433</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5433"/>
		<updated>2016-11-02T09:37:47Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Аргумент */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
====Аргумент====&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    in/out/inout тип имя&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5432</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5432"/>
		<updated>2016-11-02T09:37:21Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Методы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
====Аргумент====&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    in/out/inout тип имя&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
 возвращаемый_тип название (аргумент1, аргумент2, ...) raises(исключение1, исключение2...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5431</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5431"/>
		<updated>2016-11-02T09:24:55Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Коллекции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
    set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
    bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
    array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
    dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5430</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5430"/>
		<updated>2016-11-02T09:24:03Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Коллекции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&amp;lt;sourse lang=cpp&amp;gt;&lt;br /&gt;
set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5429</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5429"/>
		<updated>2016-11-02T09:23:36Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Классы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;&lt;br /&gt;
class Actor&lt;br /&gt;
(extent EA)&lt;br /&gt;
{&lt;br /&gt;
    attribute struct {string f, string i, string o} fio;&lt;br /&gt;
    attribute string edu;&lt;br /&gt;
    attribute integer inn;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::actors&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class Film&lt;br /&gt;
(extent EF key(title, year)) //составной ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string title;&lt;br /&gt;
    attribute integer year;&lt;br /&gt;
    attribute enum {col, bw, sl} type;&lt;br /&gt;
    attribute integer len;&lt;br /&gt;
    relationship set &amp;lt;Actor&amp;gt; actors inverse Actor::films;&lt;br /&gt;
    relationship Studio stud inverse Studio::films;&lt;br /&gt;
}; &lt;br /&gt;
&lt;br /&gt;
class Studio&lt;br /&gt;
(extent ES key name, mgn) //альтернативный ключ&lt;br /&gt;
{&lt;br /&gt;
    attribute string name;&lt;br /&gt;
    attribute addr;&lt;br /&gt;
    relationship set&amp;lt;Film&amp;gt; films inverse Film::stud&lt;br /&gt;
    integer mgn();&lt;br /&gt;
    integer filmscnt(integer year) raises (noFilm, noyear);&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5428</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5428"/>
		<updated>2016-11-02T09:10:49Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Коллекции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5427</id>
		<title>ПБД (9) - Лекция №2 - Модели данных</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%9F%D0%91%D0%94_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=5427"/>
		<updated>2016-11-02T09:08:57Z</updated>

		<summary type="html">&lt;p&gt;195.19.43.52: /* Коллекции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Модели данных ==&lt;br /&gt;
&lt;br /&gt;
* концептуальные&lt;br /&gt;
** ER - сущность-связь&lt;br /&gt;
* физические&lt;br /&gt;
** реляционная;&lt;br /&gt;
** объектная;&lt;br /&gt;
** объектно-реляционная - отношение, содержащие дополнительные возможности;&lt;br /&gt;
** полуструктурированных данных - и сами данные, и структуры, и сведения о них.&lt;br /&gt;
&lt;br /&gt;
== Entity-Relationship ==&lt;br /&gt;
&lt;br /&gt;
Она же ER - модель &amp;quot;сущность-связь&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Нотации ===&lt;br /&gt;
&lt;br /&gt;
Системы текстовых или иных обозначений, позволяющие описывать модель.&lt;br /&gt;
&lt;br /&gt;
==== Мартина ====&lt;br /&gt;
&lt;br /&gt;
==== IDEF/X ====&lt;br /&gt;
&lt;br /&gt;
==== Бартера ====&lt;br /&gt;
&lt;br /&gt;
==== Чена ====&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic1.png|link=Файл:9sPBDl2pic1.svg]]&lt;br /&gt;
&lt;br /&gt;
Связи:&lt;br /&gt;
* 1-1, один к одному;&lt;br /&gt;
* 1-М, один ко многим;&lt;br /&gt;
* М-1, многие к одному;&lt;br /&gt;
* М-М, многие ко многим.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ISA-связи&#039;&#039; - базовая и производная сущности. Производная наследует атрибуты и ключ базовой.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Слабые сущности&#039;&#039; - не могут существовать сами по себе. В состав которой входят атрибуты (ключи) другой сущности, так как собственных атрибутов не достаточно. Другая сущность называется &#039;&#039;поддерживающей&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sPBDl2pic2.png|link=Файл:9sPBDl2pic2.svg]]&lt;br /&gt;
&lt;br /&gt;
Сущности:&lt;br /&gt;
* Актёр (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, ФИО, Образование);&lt;br /&gt;
* Фильм (&amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;, Длительность, Название студии);&lt;br /&gt;
* Студия (&amp;lt;u&amp;gt;Название студии&amp;lt;/u&amp;gt;, адрес);&lt;br /&gt;
* Актёр-фильм (&amp;lt;u&amp;gt;ИНН&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Год&amp;lt;/u&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Три варианта преобразования ISA:&lt;br /&gt;
* сущность преобразовывается в отношение, содержащее атрибуты самой себя и ключи базовой;&lt;br /&gt;
* объектно-ориентированный подход: для каждой возможной информационной сущности создаётся собственное отношение со всеми необходимыми атрибутами.&amp;lt;br&amp;gt;Плюс: нет дублирования, оптимизация объёма хранения.&amp;lt;br&amp;gt;Минус: слишком много отношений;&lt;br /&gt;
* нулевые отношения (&#039;&#039;null&#039;&#039;): одно отношение со всеми возможными атрибутами. То есть, если где-то какие-то атрибуты не требуются, то они заполняются &#039;&#039;null&#039;&#039; значениями.&lt;br /&gt;
&lt;br /&gt;
=== Преобразование ER-модели в реляционную ===&lt;br /&gt;
&lt;br /&gt;
* Множество сущностей {{Формула|f=\rightarrow}} отношение;&lt;br /&gt;
* ключ {{Формула|f=\rightarrow}} ключ;&lt;br /&gt;
* связь 1-М {{Формула|f=\rightarrow}} к сущности на стороне М добавляется внешний ключ, указывающий на первичный ключ сущности на стороне 1;&lt;br /&gt;
* связь М-М {{Формула|f=\rightarrow}} создается дополнительное отношение, содержащее ключи связанных таблиц;&lt;br /&gt;
* слабая сущность {{Формула|f=\rightarrow}} отношение с атрибутами слабой сущности плюс ключи поддерживающих сущностей. Например:&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;Кафедра( &amp;lt;u&amp;gt;Название кафедры&amp;lt;/u&amp;gt;, &amp;lt;u&amp;gt;Название ВУЗа&amp;lt;/u&amp;gt;, заведующий кафедрой)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Объектная модель ==&lt;br /&gt;
&lt;br /&gt;
Уникальный идентификатор объекта - &#039;&#039;OID&#039;&#039;. У объектов поддерживаются методы. Есть наследование, инкапсуляция и полиморфизм. Можно создавать собственные типы данных, составные типы (структуры, коллекции, ссылки). Разделение на интерфейс и реализацию.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объекты&#039;&#039;&#039; - некоторая переменная, может изменять значение, характеризуется своим OID.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Литерал&#039;&#039;&#039; - может быть сколь угодно сложной структурой, но не может изменять своё значение. Если в нём что-то изменить, то получится уже другой литерал.&lt;br /&gt;
&lt;br /&gt;
Объектная модель состоит из:&lt;br /&gt;
* ODL (язык определения объектов) - для описания БД;&lt;br /&gt;
* OML (язык манипулирования данными) - для работы с объектами, расширение для стандартного языка;&lt;br /&gt;
* OQL (язык объектных запросов) - основан на SQL, имеет расширение.&lt;br /&gt;
&lt;br /&gt;
=== Возможности описания объектных БД ===&lt;br /&gt;
&lt;br /&gt;
==== Классы ====&lt;br /&gt;
&lt;br /&gt;
ODL позволяет описывать классы - объектные типы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;class название&lt;br /&gt;
[extends базовый класс : интерфейсы]&lt;br /&gt;
(extent название key ключи)&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Интерфейсы ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Интерфейс&#039;&#039;&#039; - аналог класса, который не имеет реализации и объектов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=cpp&amp;gt;interface название&lt;br /&gt;
[extends интерфейс1 : интерфейс2]&lt;br /&gt;
{&lt;br /&gt;
	атрибуты&lt;br /&gt;
	методы&lt;br /&gt;
	связи&lt;br /&gt;
};&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Атрибуты ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=sql&amp;gt;attribute тип название&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Коллекции ====&lt;br /&gt;
&lt;br /&gt;
set &amp;lt;тип&amp;gt; - множество&lt;br /&gt;
bag&amp;lt;тип&amp;gt; - мультимножество&lt;br /&gt;
array&amp;lt;тип, количество&amp;gt;&lt;br /&gt;
dictionary &amp;lt;тип (ключ), тип (значение)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Методы ====&lt;br /&gt;
&lt;br /&gt;
==== Связи ====&lt;br /&gt;
&lt;br /&gt;
[[Категория:Постреляционные базы данных (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>195.19.43.52</name></author>
	</entry>
</feed>