<?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=LenaP</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=LenaP"/>
	<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/LenaP"/>
	<updated>2026-04-30T04:16:54Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9611_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2182</id>
		<title>ТОРА (9) - Лекция №11 - Оценки</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9611_-_%D0%9E%D1%86%D0%B5%D0%BD%D0%BA%D0%B8&amp;diff=2182"/>
		<updated>2012-11-20T08:38:48Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Пример */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Backward|l=ТОРА (9) - Лекция №10 - Логический и физический план запроса}}&lt;br /&gt;
== Оптимизация SQL-запросов ==&lt;br /&gt;
&lt;br /&gt;
=== Оценка числа кортежей в промежуточной таблице ===&lt;br /&gt;
&lt;br /&gt;
В таблице {{Формула|f=Q}}. Вычисляется по формуле:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=Q = \Pi_A(\sigma_f(R))}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=T(Q) = T(R)\cdot p}} (7)&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
:{{Формула|f=Q}} - промежуточная таблица;&lt;br /&gt;
:{{Формула|f=T(Q)}} - число кортежей в промежуточной таблице;&lt;br /&gt;
:{{Формула|f=T(R)}} - число записей в исходной таблице {{Формула|f=R}};&lt;br /&gt;
:{{Формула|f=p}} - вероятность того, запись из таблицы {{Формула|f=R}} удовлетворяет условию {{Формула|f=F}}.&lt;br /&gt;
&lt;br /&gt;
Расчёт {{Формула|f=p}}:&lt;br /&gt;
# если {{Формула|f=f = F_1\bigcap F_2}}, то {{Формула|f=p = p_1\cdot p_2}};&lt;br /&gt;
# если {{Формула|f=f= F_1\bigcup F_2}}, то {{Формула|f=p = p_1 + p_2 - p_1\cdot p_2}};&lt;br /&gt;
# если {{Формула|f=f = \overline{F_1} }}, то {{Формула|f=p = 1 - p_1}}.&lt;br /&gt;
&lt;br /&gt;
Для {{Формула|f=i}}-ой вероятности:&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=p_i = \frac{k}{I(R,a)} }}&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
:{{Формула|f=k}} - мощность атрибута {{Формула|f=a}} в запросе;&lt;br /&gt;
:{{Формула|f=I(R,a)}} - мощность атрибута {{Формула|f=a}} в таблице {{Формула|f=R}}.&lt;br /&gt;
&lt;br /&gt;
==== Пример ====&lt;br /&gt;
&lt;br /&gt;
Допустим, {{Формула|f=T(R) = 1000}}, {{Формула|f=I(R,a) = 5}}, {{Формула|f=I(R,b) = 10}}, {{Формула|f=I(R,c) = 2}}, где {{Формула|f=a,b,c}} - положительные натуральные числа.&lt;br /&gt;
&lt;br /&gt;
И {{Формула|f=f = (a&amp;lt;3}} {{Формула|f=OR}} {{Формула|f=b\geq5)}} {{Формула|f=AND}} {{Формула|f=c=2}}&lt;br /&gt;
&lt;br /&gt;
Найти {{Формула|f=T(Q)}}.&lt;br /&gt;
&lt;br /&gt;
Обозначим:&lt;br /&gt;
* {{Формула|f=a&amp;lt;3}} как {{Формула|f=F_1}};&lt;br /&gt;
* {{Формула|f=b\geq 5}} как {{Формула|f=F_2}};&lt;br /&gt;
* {{Формула|f=f = (a&amp;lt;3}} {{Формула|f=OR}} {{Формула|f=b\geq5)}} как {{Формула|f=F_3}};&lt;br /&gt;
* {{Формула|f=c=2}} как {{Формула|f=F_4}}.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=F_1\bigcup F_2 = F_3}}&lt;br /&gt;
:{{Формула|f=p_3 = p_1 + p_2 - p_1\cdot p_2 = \frac{2}{5} + \frac{6}{10} - \frac{2}{5}\cdot\frac{6}{10} = 0.76}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=f = F_3\bigcap F_4}}&lt;br /&gt;
:{{Формула|f=p = p_3\cdot p_4 = 0.76\cdot\frac{1}{2} = 0.38}} - это вероятность того, что запись из {{Формула|f=R}} удовлетворяет условию {{Формула|f=f}}.&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=T(Q) = 1000\cdot 0.38 = 380}}&lt;br /&gt;
&lt;br /&gt;
=== Оценка количества блоков ===&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=Q = \Pi_A(\sigma_f(R))}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=B(Q) = \Bigr[\frac{T(Q)}{L_B}\Bigl]}} - скобки обзначают, что огругление с избытком.&lt;br /&gt;
&lt;br /&gt;
здесь:&lt;br /&gt;
:{{Формула|f=T(Q)}} - прогнозируемое число записей в подзапросе;&lt;br /&gt;
:{{Формула|f=L_B}} - длина блока (число записей в блоке) с учётом {{Формула|f=\Pi_A}}.&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;
Предположим, соединяются таблицы {{Формула|f=R,S,T,U}}:&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl11pic1.png|300px]]&lt;br /&gt;
&lt;br /&gt;
В каждом соединении правым аргументом является одна из таблиц.&lt;br /&gt;
&lt;br /&gt;
Преимущества:&lt;br /&gt;
* число перебора вариантов меньше, чем для произвольного варианта соединения (если количество соединений {{Формула|f=n}}, то вариантов перебора будет {{Формула|f=n!}});&lt;br /&gt;
* достаточно просто организивать &#039;&#039;каналы обработки&#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;
* путём перебора порядков соединения можно выбрать квазиоптимальный план (потому что на самом деле вариантов перебора больше, чем {{Формула|f=n!}}, потому что правый аргумент - всегда таблица).&lt;br /&gt;
&lt;br /&gt;
==== Кустовое ====&lt;br /&gt;
&lt;br /&gt;
Тут таблицы могут соединяться в любом порядке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl11pic2.png|300px]]&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;
[[Файл:9sTORAl11pic3.png|300px]]&lt;br /&gt;
&lt;br /&gt;
Такой способ практически не используется, потому что для него требуется, чтобы каждая из исходных таблиц и промежуточные результаты могли уместиться в оперативной памяти.&lt;br /&gt;
&lt;br /&gt;
=== Методы соединения таблиц ===&lt;br /&gt;
&lt;br /&gt;
Методы реализации естественного соединения {{Формула|f=\bowtie}}.&lt;br /&gt;
&lt;br /&gt;
Три метода:&lt;br /&gt;
* ложных циклов (NLJ - Nested Loop Join);&lt;br /&gt;
* сортировки слияния (SMJ - Sort Merge Join);&lt;br /&gt;
* хэшированных соединений (Hash Join).&lt;br /&gt;
&lt;br /&gt;
==== Метод ложных циклов ====&lt;br /&gt;
&lt;br /&gt;
Каждая запись первой соединяемой таблицы сравнивается с каждой записью второй соединяемой таблицы. В общем случае, условие сравнения может быть произвольным.&lt;br /&gt;
&lt;br /&gt;
[[Файл:9sTORAl11pic4.png|500px]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A1%D0%AD%D0%92%D0%9C_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9610_-_%D0%9E%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B9%D0%BD%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%BE%D0%B2&amp;diff=2169</id>
		<title>СЭВМ (9) - Лекция №10 - Обслуживание мейнфреймов</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%AD%D0%92%D0%9C_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9610_-_%D0%9E%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B9%D0%BD%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%BE%D0%B2&amp;diff=2169"/>
		<updated>2012-11-19T13:51:32Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Системный программист */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Backward|l= СЭВМ (9) - Лекция №9 - Мейнфреймы}}&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;
* планирование заданий на уровне [http://en.wikipedia.org/wiki/IBM_Parallel_Sysplex#Sysplex Sysplex].&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;
&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;
&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;
* подготовка системных операторов и программистов приложений;&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;
* управление правами доступа;&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;
&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;
Большая часть мейнфреймов производится в IBM. ПО тоже оттуда. И вся поддержка тоже оттуда. Есть централизованный центр поддержки, предоставляющий гарантийное и дополнительное обслуживание.&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>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A1%D0%AD%D0%92%D0%9C_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9610_-_%D0%9E%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B9%D0%BD%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%BE%D0%B2&amp;diff=2168</id>
		<title>СЭВМ (9) - Лекция №10 - Обслуживание мейнфреймов</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A1%D0%AD%D0%92%D0%9C_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%9610_-_%D0%9E%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B5%D0%B9%D0%BD%D1%84%D1%80%D0%B5%D0%B9%D0%BC%D0%BE%D0%B2&amp;diff=2168"/>
		<updated>2012-11-19T13:48:40Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Обработка оперативных транзакций */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Backward|l= СЭВМ (9) - Лекция №9 - Мейнфреймы}}&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;
* планирование заданий на уровне [http://en.wikipedia.org/wiki/IBM_Parallel_Sysplex#Sysplex Sysplex].&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;
&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;
&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;
* подготовка системных операторов и программистов приложений;&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;
* управление правами доступа;&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;
&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;
Большая часть мейнфреймов производится в IBM. ПО тоже оттуда. И вся поддержка тоже оттуда. Есть централизованный центр поддержки, предоставляющий гарантийное и дополнительное обслуживание.&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>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1439</id>
		<title>ТОРА (9) - Лекция №3 - Хорошая схема БД - Соединение без потерь</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1439"/>
		<updated>2012-09-25T05:43:50Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Пример БД, обладающей свойством соединения без потерь */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть {{Формула|f=F}} и {{Формула|f=G}} - два множества ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=G}} называется &#039;&#039;покрытием&#039;&#039; {{Формула|f=F}}, если имеет место равенство {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
Существуют различные виды покрытий. Но мы рассмотрим только один - &#039;&#039;условно-неизбыточное покрытие&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения условно-неизбыточного покрытия ==&lt;br /&gt;
&lt;br /&gt;
1) если в множестве ФЗ {{Формула|f=F}} встречаются ФЗ с одинаковой левой частью {{Формула|f=X}}, то следует объединить эти ФЗ в одну ФЗ. Это следует из аксиомы объединения. Получившееся множество ФЗ обозначим {{Формула|f=G}};&lt;br /&gt;
&lt;br /&gt;
2) для каждой ФЗ {{Формула|f=X\rightarrow Y}} из {{Формула|f=G}} заменить её на {{Формула|f=X\rightarrow X^+ - X}};&lt;br /&gt;
&lt;br /&gt;
После выполнения 1) и 2) получаем замыкание {{Формула|f=G^+ = F}}&lt;br /&gt;
&lt;br /&gt;
=== Доказательство ===&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:если ФЗ {{Формула|f=X\rightarrow Y\in F}}, то эта ФЗ принадежит {{Формула|f=G^+}}, а из этого следует, что {{Формула|f=Y \subseteq X^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}}&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга имеем {{Формула|f=X^+\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга.&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y \in G}}, {{Формула|f=X\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y = X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X = Y}} (3 аксимома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
УСО: {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
Множество ФЗ: {{Формула|f=F = (A\rightarrow B, B\rightarrow A, C\rightarrow A, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow A}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = ABC}}, {{Формула|f=A^+ - A = BC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B^+ = BAC}}, {{Формула|f=B^+ - B = AC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = CAB}}, {{Формула|f=C^+ - C = AB}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow AB)}} будет являться УНП.&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Хорошая&amp;quot;, но не оптимальная. Должна обладать следующими свойствами:&lt;br /&gt;
* соединение без потерь;&lt;br /&gt;
* сохранение ФЗ;&lt;br /&gt;
* каждая схема отношений в этой БД находится в 3НФ. Наличие этого свойства обеспечивает отсутствие в схемах отношений следующих аномалий:&lt;br /&gt;
** избыточность;&lt;br /&gt;
** потенциальная противоречивсть;&lt;br /&gt;
** аномалия обновления;&lt;br /&gt;
** аномалия удаления.&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho = (R_1 ... R_n)}} - схема БД. Она будет обладать свойством соединения без потерь, если для любого экземпляра отношения {{Формула|f=r}} из {{Формула|f=R}} справедливо равенство: {{Формула|f=r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie ... \bowtie \Pi_{R_n}(r)}}, где {{Формула|f=\Pi_{R_i}(r)}} - это проекция экземпляра отношения {{Формула|f=r}} на множество атрибутов {{Формула|f=R_i}}&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, не обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, BC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Достаточно привести пример экземпляра {{Формула|f=r}}, для которого равенство не выполняется:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&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;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученное соединение не будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Этот пример показывает, что при неправильном построении БД запросы могут выдавать неправильный результат.&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Возьмём тот же экземпляр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! С&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Полученное соединение будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Но это не доказательство, а только один пример, просто чтобы показать, в чём разница.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм проверки схемы БД на свойство соединения без потерь ====&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=R = (A_1 ... A_n)}}&lt;br /&gt;
 &lt;br /&gt;
1) построить таблицу T:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} || {{Формула|f=A_2}} || ... || {{Формула|f=A_k}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_2}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ...&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_n}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
И заполнить таблицу T по правилу: если {{Формула|f=A_j \in R_i}}, то {{Формула|f=T_{ij}=a}}, иначе {{Формула|f=T_{ij}=b_i}}&lt;br /&gt;
&lt;br /&gt;
2) изменить таблицу T - циклически просматривать ФЗ из {{Формула|f=F}} в любом порядке, и для очередной ФЗ {{Формула|f=X\rightarrow Y \in F}} выполнить следующие действия:&lt;br /&gt;
* найти в таблице T строки, совпадающие по атрибутам {{Формула|f=X}} (по левой части);&lt;br /&gt;
* если хотя бы в одной такой строке значение атрибута {{Формула|f=A_m \in Y = a}}, то во всех найденных строках присвоить {{Формула|f=A_m = a}}, иначе присвоить {{Формула|f=A_m = b_i}} (}}i}} - номер одной из найденных строк, {{Формула|f=b_i}} должно быть одинаково во всех указанных строках);&lt;br /&gt;
* выполнить предыдущие два пункта для всех атрибутов {{Формула|f=A_l \in Y}};&lt;br /&gt;
* выполнить предыдущие три пункта для всех ФЗ из {{Формула|f=F}}, циклически их просматривая.&lt;br /&gt;
&lt;br /&gt;
3) алгоритм останавливается, если при очередном просмотре ФЗ из {{Формула|f=F}}:&lt;br /&gt;
* не произошло никаких изменений в таблице T;&lt;br /&gt;
* какая-нибудь строка в T не стала состоять сплошь из символов {{Формула|f=a}} (наличие такой строки и говорит о выполнении свойства соединения без потерь).&lt;br /&gt;
&lt;br /&gt;
===== Пример =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
Получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
===== Другой пример =====&lt;br /&gt;
 &lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D, E, F, P, S)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (AB, ACDPS, BCPS, DEF) = (R_1, R_2, R_3, R_4)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=F = (B\rightarrow C, D\rightarrow EF, B\rightarrow PS, A\rightarrow CDPS, AP\rightarrow S)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
1)&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
первый просмотр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
второй просмотр:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
Вот и получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1438</id>
		<title>ТОРА (9) - Лекция №3 - Хорошая схема БД - Соединение без потерь</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1438"/>
		<updated>2012-09-25T05:37:37Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Пример БД, не обладающей свойством соединения без потерь */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть {{Формула|f=F}} и {{Формула|f=G}} - два множества ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=G}} называется &#039;&#039;покрытием&#039;&#039; {{Формула|f=F}}, если имеет место равенство {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
Существуют различные виды покрытий. Но мы рассмотрим только один - &#039;&#039;условно-неизбыточное покрытие&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения условно-неизбыточного покрытия ==&lt;br /&gt;
&lt;br /&gt;
1) если в множестве ФЗ {{Формула|f=F}} встречаются ФЗ с одинаковой левой частью {{Формула|f=X}}, то следует объединить эти ФЗ в одну ФЗ. Это следует из аксиомы объединения. Получившееся множество ФЗ обозначим {{Формула|f=G}};&lt;br /&gt;
&lt;br /&gt;
2) для каждой ФЗ {{Формула|f=X\rightarrow Y}} из {{Формула|f=G}} заменить её на {{Формула|f=X\rightarrow X^+ - X}};&lt;br /&gt;
&lt;br /&gt;
После выполнения 1) и 2) получаем замыкание {{Формула|f=G^+ = F}}&lt;br /&gt;
&lt;br /&gt;
=== Доказательство ===&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:если ФЗ {{Формула|f=X\rightarrow Y\in F}}, то эта ФЗ принадежит {{Формула|f=G^+}}, а из этого следует, что {{Формула|f=Y \subseteq X^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}}&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга имеем {{Формула|f=X^+\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга.&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y \in G}}, {{Формула|f=X\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y = X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X = Y}} (3 аксимома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
УСО: {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
Множество ФЗ: {{Формула|f=F = (A\rightarrow B, B\rightarrow A, C\rightarrow A, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow A}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = ABC}}, {{Формула|f=A^+ - A = BC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B^+ = BAC}}, {{Формула|f=B^+ - B = AC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = CAB}}, {{Формула|f=C^+ - C = AB}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow AB)}} будет являться УНП.&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Хорошая&amp;quot;, но не оптимальная. Должна обладать следующими свойствами:&lt;br /&gt;
* соединение без потерь;&lt;br /&gt;
* сохранение ФЗ;&lt;br /&gt;
* каждая схема отношений в этой БД находится в 3НФ. Наличие этого свойства обеспечивает отсутствие в схемах отношений следующих аномалий:&lt;br /&gt;
** избыточность;&lt;br /&gt;
** потенциальная противоречивсть;&lt;br /&gt;
** аномалия обновления;&lt;br /&gt;
** аномалия удаления.&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho = (R_1 ... R_n)}} - схема БД. Она будет обладать свойством соединения без потерь, если для любого экземпляра отношения {{Формула|f=r}} из {{Формула|f=R}} справедливо равенство: {{Формула|f=r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie ... \bowtie \Pi_{R_n}(r)}}, где {{Формула|f=\Pi_{R_i}(r)}} - это проекция экземпляра отношения {{Формула|f=r}} на множество атрибутов {{Формула|f=R_i}}&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, не обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, BC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Достаточно привести пример экземпляра {{Формула|f=r}}, для которого равенство не выполняется:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&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;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученное соединение не будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Этот пример показывает, что при неправильном построении БД запросы могут выдавать неправильный результат.&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Возьмём тот же экземпляр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Полученное соединение будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Но это не доказательство, а только один пример, просто чтобы показать, в чём разница.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм проверки схемы БД на свойство соединения без потерь ====&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=R = (A_1 ... A_n)}}&lt;br /&gt;
 &lt;br /&gt;
1) построить таблицу T:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} || {{Формула|f=A_2}} || ... || {{Формула|f=A_k}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_2}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ...&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_n}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
И заполнить таблицу T по правилу: если {{Формула|f=A_j \in R_i}}, то {{Формула|f=T_{ij}=a}}, иначе {{Формула|f=T_{ij}=b_i}}&lt;br /&gt;
&lt;br /&gt;
2) изменить таблицу T - циклически просматривать ФЗ из {{Формула|f=F}} в любом порядке, и для очередной ФЗ {{Формула|f=X\rightarrow Y \in F}} выполнить следующие действия:&lt;br /&gt;
* найти в таблице T строки, совпадающие по атрибутам {{Формула|f=X}} (по левой части);&lt;br /&gt;
* если хотя бы в одной такой строке значение атрибута {{Формула|f=A_m \in Y = a}}, то во всех найденных строках присвоить {{Формула|f=A_m = a}}, иначе присвоить {{Формула|f=A_m = b_i}} (}}i}} - номер одной из найденных строк, {{Формула|f=b_i}} должно быть одинаково во всех указанных строках);&lt;br /&gt;
* выполнить предыдущие два пункта для всех атрибутов {{Формула|f=A_l \in Y}};&lt;br /&gt;
* выполнить предыдущие три пункта для всех ФЗ из {{Формула|f=F}}, циклически их просматривая.&lt;br /&gt;
&lt;br /&gt;
3) алгоритм останавливается, если при очередном просмотре ФЗ из {{Формула|f=F}}:&lt;br /&gt;
* не произошло никаких изменений в таблице T;&lt;br /&gt;
* какая-нибудь строка в T не стала состоять сплошь из символов {{Формула|f=a}} (наличие такой строки и говорит о выполнении свойства соединения без потерь).&lt;br /&gt;
&lt;br /&gt;
===== Пример =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
Получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
===== Другой пример =====&lt;br /&gt;
 &lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D, E, F, P, S)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (AB, ACDPS, BCPS, DEF) = (R_1, R_2, R_3, R_4)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=F = (B\rightarrow C, D\rightarrow EF, B\rightarrow PS, A\rightarrow CDPS, AP\rightarrow S)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
1)&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
первый просмотр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
второй просмотр:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
Вот и получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1437</id>
		<title>ТОРА (9) - Лекция №3 - Хорошая схема БД - Соединение без потерь</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1437"/>
		<updated>2012-09-25T05:36:13Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Соединение без потерь */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть {{Формула|f=F}} и {{Формула|f=G}} - два множества ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=G}} называется &#039;&#039;покрытием&#039;&#039; {{Формула|f=F}}, если имеет место равенство {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
Существуют различные виды покрытий. Но мы рассмотрим только один - &#039;&#039;условно-неизбыточное покрытие&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения условно-неизбыточного покрытия ==&lt;br /&gt;
&lt;br /&gt;
1) если в множестве ФЗ {{Формула|f=F}} встречаются ФЗ с одинаковой левой частью {{Формула|f=X}}, то следует объединить эти ФЗ в одну ФЗ. Это следует из аксиомы объединения. Получившееся множество ФЗ обозначим {{Формула|f=G}};&lt;br /&gt;
&lt;br /&gt;
2) для каждой ФЗ {{Формула|f=X\rightarrow Y}} из {{Формула|f=G}} заменить её на {{Формула|f=X\rightarrow X^+ - X}};&lt;br /&gt;
&lt;br /&gt;
После выполнения 1) и 2) получаем замыкание {{Формула|f=G^+ = F}}&lt;br /&gt;
&lt;br /&gt;
=== Доказательство ===&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:если ФЗ {{Формула|f=X\rightarrow Y\in F}}, то эта ФЗ принадежит {{Формула|f=G^+}}, а из этого следует, что {{Формула|f=Y \subseteq X^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}}&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга имеем {{Формула|f=X^+\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга.&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y \in G}}, {{Формула|f=X\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y = X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X = Y}} (3 аксимома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
УСО: {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
Множество ФЗ: {{Формула|f=F = (A\rightarrow B, B\rightarrow A, C\rightarrow A, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow A}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = ABC}}, {{Формула|f=A^+ - A = BC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B^+ = BAC}}, {{Формула|f=B^+ - B = AC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = CAB}}, {{Формула|f=C^+ - C = AB}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow AB)}} будет являться УНП.&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Хорошая&amp;quot;, но не оптимальная. Должна обладать следующими свойствами:&lt;br /&gt;
* соединение без потерь;&lt;br /&gt;
* сохранение ФЗ;&lt;br /&gt;
* каждая схема отношений в этой БД находится в 3НФ. Наличие этого свойства обеспечивает отсутствие в схемах отношений следующих аномалий:&lt;br /&gt;
** избыточность;&lt;br /&gt;
** потенциальная противоречивсть;&lt;br /&gt;
** аномалия обновления;&lt;br /&gt;
** аномалия удаления.&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho = (R_1 ... R_n)}} - схема БД. Она будет обладать свойством соединения без потерь, если для любого экземпляра отношения {{Формула|f=r}} из {{Формула|f=R}} справедливо равенство: {{Формула|f=r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie ... \bowtie \Pi_{R_n}(r)}}, где {{Формула|f=\Pi_{R_i}(r)}} - это проекция экземпляра отношения {{Формула|f=r}} на множество атрибутов {{Формула|f=R_i}}&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, не обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, BC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Достаточно привести пример экземпляра {{Формула|f=r}}, для которого равенство не выполняется:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученное соединение не будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Этот пример показывает, что при неправильном построении БД запросы могут выдавать неправильный результат.&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Возьмём тот же экземпляр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Полученное соединение будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Но это не доказательство, а только один пример, просто чтобы показать, в чём разница.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм проверки схемы БД на свойство соединения без потерь ====&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=R = (A_1 ... A_n)}}&lt;br /&gt;
 &lt;br /&gt;
1) построить таблицу T:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} || {{Формула|f=A_2}} || ... || {{Формула|f=A_k}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_2}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ...&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_n}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
И заполнить таблицу T по правилу: если {{Формула|f=A_j \in R_i}}, то {{Формула|f=T_{ij}=a}}, иначе {{Формула|f=T_{ij}=b_i}}&lt;br /&gt;
&lt;br /&gt;
2) изменить таблицу T - циклически просматривать ФЗ из {{Формула|f=F}} в любом порядке, и для очередной ФЗ {{Формула|f=X\rightarrow Y \in F}} выполнить следующие действия:&lt;br /&gt;
* найти в таблице T строки, совпадающие по атрибутам {{Формула|f=X}} (по левой части);&lt;br /&gt;
* если хотя бы в одной такой строке значение атрибута {{Формула|f=A_m \in Y = a}}, то во всех найденных строках присвоить {{Формула|f=A_m = a}}, иначе присвоить {{Формула|f=A_m = b_i}} (}}i}} - номер одной из найденных строк, {{Формула|f=b_i}} должно быть одинаково во всех указанных строках);&lt;br /&gt;
* выполнить предыдущие два пункта для всех атрибутов {{Формула|f=A_l \in Y}};&lt;br /&gt;
* выполнить предыдущие три пункта для всех ФЗ из {{Формула|f=F}}, циклически их просматривая.&lt;br /&gt;
&lt;br /&gt;
3) алгоритм останавливается, если при очередном просмотре ФЗ из {{Формула|f=F}}:&lt;br /&gt;
* не произошло никаких изменений в таблице T;&lt;br /&gt;
* какая-нибудь строка в T не стала состоять сплошь из символов {{Формула|f=a}} (наличие такой строки и говорит о выполнении свойства соединения без потерь).&lt;br /&gt;
&lt;br /&gt;
===== Пример =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
Получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
===== Другой пример =====&lt;br /&gt;
 &lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D, E, F, P, S)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (AB, ACDPS, BCPS, DEF) = (R_1, R_2, R_3, R_4)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=F = (B\rightarrow C, D\rightarrow EF, B\rightarrow PS, A\rightarrow CDPS, AP\rightarrow S)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
1)&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
первый просмотр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
второй просмотр:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
Вот и получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1436</id>
		<title>ТОРА (9) - Лекция №3 - Хорошая схема БД - Соединение без потерь</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%963_-_%D0%A5%D0%BE%D1%80%D0%BE%D1%88%D0%B0%D1%8F_%D1%81%D1%85%D0%B5%D0%BC%D0%B0_%D0%91%D0%94_-_%D0%A1%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8C&amp;diff=1436"/>
		<updated>2012-09-25T04:48:50Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Алгоритм построение условно-неизбыточного покрытия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Пусть {{Формула|f=F}} и {{Формула|f=G}} - два множества ФЗ.&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=G}} называется &#039;&#039;покрытием&#039;&#039; {{Формула|f=F}}, если имеет место равенство {{Формула|f=G^+ = F^+}}&lt;br /&gt;
&lt;br /&gt;
Существуют различные виды покрытий. Но мы рассмотрим только один - &#039;&#039;условно-неизбыточное покрытие&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм построения условно-неизбыточного покрытия ==&lt;br /&gt;
&lt;br /&gt;
1) если в множестве ФЗ {{Формула|f=F}} встречаются ФЗ с одинаковой левой частью {{Формула|f=X}}, то следует объединить эти ФЗ в одну ФЗ. Это следует из аксиомы объединения. Получившееся множество ФЗ обозначим {{Формула|f=G}};&lt;br /&gt;
&lt;br /&gt;
2) для каждой ФЗ {{Формула|f=X\rightarrow Y}} из {{Формула|f=G}} заменить её на {{Формула|f=X\rightarrow X^+ - X}};&lt;br /&gt;
&lt;br /&gt;
После выполнения 1) и 2) получаем замыкание {{Формула|f=G^+ = F}}&lt;br /&gt;
&lt;br /&gt;
=== Доказательство ===&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:если ФЗ {{Формула|f=X\rightarrow Y\in F}}, то эта ФЗ принадежит {{Формула|f=G^+}}, а из этого следует, что {{Формула|f=Y \subseteq X^+}}&lt;br /&gt;
&lt;br /&gt;
:По построению G имеет место ФЗ: {{Формула|f=X\rightarrow X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:Пополним эту ФЗ: {{Формула|f=X\rightarrow (X^+ - X)\bigcup X = X^+}}&lt;br /&gt;
&lt;br /&gt;
:Теперь по первой аксиоме Армстронга имеем {{Формула|f=X^+\rightarrow Y}}&lt;br /&gt;
&lt;br /&gt;
:Значит, {{Формула|f=X\rightarrow Y \in G^+}}, по третьей аксиоме Армстронга.&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow Y \in G}}, {{Формула|f=X\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=Y = X^+ - X}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X\rightarrow X^+}} (по определению)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X}} (1 аксиома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow X^+ - X = Y}} (3 аксимома Армстронга)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=X^+\rightarrow Y \in F^+}}&lt;br /&gt;
&lt;br /&gt;
=== Пример ===&lt;br /&gt;
&lt;br /&gt;
УСО: {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
Множество ФЗ: {{Формула|f=F = (A\rightarrow B, B\rightarrow A, C\rightarrow A, A\rightarrow C, B\rightarrow C)}}&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow A}}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=A^+ = ABC}}, {{Формула|f=A^+ - A = BC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=B^+ = BAC}}, {{Формула|f=B^+ - B = AC}}&lt;br /&gt;
&lt;br /&gt;
:{{Формула|f=C^+ = CAB}}, {{Формула|f=C^+ - C = AB}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тогда {{Формула|f=G = (A\rightarrow BC, B\rightarrow AC, C\rightarrow AB)}} будет являться УНП.&lt;br /&gt;
&lt;br /&gt;
== Свойства &amp;quot;хорошей&amp;quot; схемы БД ==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Хорошая&amp;quot;, но не оптимальная. Должна обладать следующими свойствами:&lt;br /&gt;
* соединение без потерь;&lt;br /&gt;
* сохранение ФЗ;&lt;br /&gt;
* каждая схема отношений в этой БД находится в 3НФ. Наличие этого свойства обеспечивает отсутствие в схемах отношений следующих аномалий:&lt;br /&gt;
** избыточность;&lt;br /&gt;
** потенциальная противоречивсть;&lt;br /&gt;
** аномалия обновления;&lt;br /&gt;
** аномалия удаления.&lt;br /&gt;
&lt;br /&gt;
=== Соединение без потерь ===&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=\rho = (R_1 ... R_n)}} - схема БД. Она будет обладать свойствоем соединения без потерь, если для любого экземпляра отношения {{Формула|f=r}} из {{Формула|f=R}} справедливо равенство: {{Формула|f=r = \Pi_{R_1}(r) \bowtie \Pi_{R_2}(r) \bowtie ... \bowtie \Pi_{R_n}(r)}}, где {{Формула|f=\Pi_{R_i}(r)}} - это проекция экземпляра отношения {{Формула|f=r}} на множество атрибутов {{Формула|f=R_i}}&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, не обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, BC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Достаточно привести пример экземпляра {{Формула|f=r}}, для которого равенство не выполняется:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Полученное соединение не будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;4&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot; bgcolor=&amp;quot;#FFB6C1&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Этот пример показывает, что при неправильном построении БД запросы могут выдавать неправильный результат.&lt;br /&gt;
&lt;br /&gt;
==== Пример БД, обладающей свойством соединения без потерь ====&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Возьмём тот же экземпляр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=r}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; | &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=c_2}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Полученное соединение будет равняться {{Формула|f=r}}:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A !! B !! C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;2&amp;quot; | {{Формула|f=\Pi_{R_1}(r) \bowtie \Pi_{R_2}(r)}} || {{Формула|f=a_1}} || {{Формула|f=b_1}} || {{Формула|f=c_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | {{Формула|f=a_2}} || {{Формула|f=b_1}} || {{Формула|f=c_2}}&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
Но это не доказательство, а только один пример, просто чтобы показать, в чём разница.&lt;br /&gt;
&lt;br /&gt;
==== Алгоритм проверки схемы БД на свойство соединения без потерь ====&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (R_1 ... R_n)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=R = (A_1 ... A_n)}}&lt;br /&gt;
 &lt;br /&gt;
1) построить таблицу T:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! {{Формула|f=A_1}} || {{Формула|f=A_2}} || ... || {{Формула|f=A_k}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_1}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_2}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ...&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! {{Формула|f=R_n}}&lt;br /&gt;
 | || || ||&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
И заполнить таблицу T по правилу: если {{Формула|f=A_j \in R_i}}, то {{Формула|f=T_{ij}=a}}, иначе {{Формула|f=T_{ij}=b_i}}&lt;br /&gt;
&lt;br /&gt;
2) изменить таблицу T - циклически просматривать ФЗ из {{Формула|f=F}} в любом порядке, и для очередной ФЗ {{Формула|f=X\rightarrow Y \in F}} выполнить следующие действия:&lt;br /&gt;
* найти в таблице T строки, совпадающие по атрибутам {{Формула|f=X}} (по левой части);&lt;br /&gt;
* если хотя бы в одной такой строке значение атрибута {{Формула|f=A_m \in Y = a}}, то во всех найденных строках присвоить {{Формула|f=A_m = a}}, иначе присвоить {{Формула|f=A_m = b_i}} (}}i}} - номер одной из найденных строк, {{Формула|f=b_i}} должно быть одинаково во всех указанных строках);&lt;br /&gt;
* выполнить предыдущие два пункта для всех атрибутов {{Формула|f=A_l \in Y}};&lt;br /&gt;
* выполнить предыдущие три пункта для всех ФЗ из {{Формула|f=F}}, циклически их просматривая.&lt;br /&gt;
&lt;br /&gt;
3) алгоритм останавливается, если при очередном просмотре ФЗ из {{Формула|f=F}}:&lt;br /&gt;
* не произошло никаких изменений в таблице T;&lt;br /&gt;
* какая-нибудь строка в T не стала состоять сплошь из символов {{Формула|f=a}} (наличие такой строки и говорит о выполнении свойства соединения без потерь).&lt;br /&gt;
&lt;br /&gt;
===== Пример =====&lt;br /&gt;
&lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=\rho = (AB, AC) = (R_1, R_2)}}&lt;br /&gt;
&lt;br /&gt;
{{Формула|f=F = (A\rightarrow B)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BC&lt;br /&gt;
 | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
  &lt;br /&gt;
Получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
===== Другой пример =====&lt;br /&gt;
 &lt;br /&gt;
Пусть {{Формула|f=R = (A, B, C, D, E, F, P, S)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=\rho = (AB, ACDPS, BCPS, DEF) = (R_1, R_2, R_3, R_4)}}&lt;br /&gt;
 &lt;br /&gt;
{{Формула|f=F = (B\rightarrow C, D\rightarrow EF, B\rightarrow PS, A\rightarrow CDPS, AP\rightarrow S)}}&lt;br /&gt;
&lt;br /&gt;
Доказать, что {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
 &lt;br /&gt;
1)&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || {{Формула|f=b_1}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
2)&lt;br /&gt;
&lt;br /&gt;
первый просмотр:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=b_1}} || {{Формула|f=b_1}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
второй просмотр:&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! A || B || C || D || E || F || P || S&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! AB&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;#32CD32&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! ACDPS&lt;br /&gt;
 | {{Формула|f=a}} || {{Формула|f=b_2}} || {{Формула|f=a}} || {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || bgcolor=&amp;quot;lime&amp;quot; | {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! BCPS&lt;br /&gt;
 | {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=b_3}} || {{Формула|f=a}} || {{Формула|f=a}}&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! DEF&lt;br /&gt;
 | {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=b_4}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=a}} || {{Формула|f=b_4}} || {{Формула|f=b_4}}&lt;br /&gt;
 |}&lt;br /&gt;
  &lt;br /&gt;
Вот и получили строку, сплошь состоящую из {{Формула|f=a}}. Значит {{Формула|f=\rho}} обладает свойством соединения без потерь.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=1225</id>
		<title>ТОРА (9) - Лекция №2 - Функциональные зависимости</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%962_-_%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=1225"/>
		<updated>2012-09-18T07:55:57Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Пример построения множества ФЗ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Функциональные зависимости, замыкание множества функциональных зависимостей, атрибутов.&lt;br /&gt;
&lt;br /&gt;
== Функциональные зависимости ==&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;R=(A_1 ... A_n)&amp;lt;/math&amp;gt; является функциональной схемой отношения и &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; - некоторые подмножества атрибутов этой схемы. Говорят, что &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; функционально определяет &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt;), если в любом экземпляре отношения со схемой &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; не существует двух кортежей, совпадающих по подмножеству &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и не совпадающих по подмножеству &amp;lt;math&amp;gt;Y&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иначе говоря, если два кортежа совпадают по &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, то они должны совпадать и по &amp;lt;math&amp;gt;y&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Например, &amp;lt;math&amp;gt;R=(A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt;, есть зависимости:&lt;br /&gt;
* (1): &amp;lt;math&amp;gt;A_1\rightarrow A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
* (2): &amp;lt;math&amp;gt;A_1A_3\rightarrow A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Предположим, что имеет место один экземпляр отношения со схемой &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; || фирма X || улица Ленина, д.1 || сахар || 40&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | фирма X || улица Ленина, д.1 || карамель || 50&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | фирма X || улица Ленина, д.1 || пастила || 90&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Вторая ФЗ (2) имеет место быть, так как нет двух кортежей, совпадающих по этой паре. А первая ФЗ (1) не имеет место быть.&lt;br /&gt;
&lt;br /&gt;
== Замыкание множества функциональных зависимостей ==&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; - универсальная схема отношения, а &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; - исходное множество функциональной зависимости на этой схеме. Замыканием &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; называется всё множество функциональной зависимости, которое логически следует из &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt; - обозначается как &amp;lt;math&amp;gt;F^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функциональная зависимость логически следует из &amp;lt;math&amp;gt;F&amp;lt;/math&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;
&#039;&#039;&#039;Надёжность&#039;&#039;&#039; - если ФЗ выводится с помощью аксиом Армстронга, то она справедлива во всех экземплярах отношения, где справедливы исходные ФЗ &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Полнота&#039;&#039;&#039; - если имеет место какая-либо ФЗ, то она обязательно может быть выведена с помощью аксиом Армстронга.&lt;br /&gt;
&lt;br /&gt;
==== Рефлексивность ====&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;Y \subseteq X \subseteq R&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt;. Тривиальная аксиома.&lt;br /&gt;
&lt;br /&gt;
==== Дополнение ====&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Z \subseteq R&amp;lt;/math&amp;gt; (&amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt; может быть пустым),&lt;br /&gt;
&lt;br /&gt;
тогда &amp;lt;math&amp;gt;X\bigcup Y\rightarrow Z&amp;lt;/math&amp;gt; или &amp;lt;math&amp;gt;XZ\rightarrow YZ&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Транзитивность ====&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
а &amp;lt;math&amp;gt;Y\rightarrow Z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
то &amp;lt;math&amp;gt;X\rightarrow Z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Пример построения множества ФЗ ===&lt;br /&gt;
&lt;br /&gt;
Пусть задана УСО (универсальная схема отношения) &amp;lt;math&amp;gt;R=(A, B, C)&amp;lt;/math&amp;gt; и зависимости &amp;lt;math&amp;gt;F=(A\rightarrow B, B\rightarrow C)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;math&amp;gt;A\rightarrow A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B\rightarrow B&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;C\rightarrow C&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AB\rightarrow A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AB\rightarrow B&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AC\rightarrow A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AC\rightarrow C&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BC\rightarrow B&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BC\rightarrow C&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow A&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow C&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AB\rightarrow AB&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AC\rightarrow AC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BC\rightarrow BC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow AB&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow AC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow BC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;ABC\rightarrow ABC&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;A\rightarrow AB&amp;lt;/math&amp;gt; (1ФЗ и пополняем A), &amp;lt;math&amp;gt;AC\rightarrow BC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;B\rightarrow BC&amp;lt;/math&amp;gt; (2 ФЗ и пополняем B), &amp;lt;math&amp;gt;AB\rightarrow AC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AC\rightarrow ABC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AB\rightarrow ABC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;AB\rightarrow BC&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;A\rightarrow AC&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# &amp;lt;math&amp;gt;A\rightarrow C&amp;lt;/math&amp;gt; (1 и 2 ФЗ), &amp;lt;math&amp;gt;A\rightarrow ABC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё, замыкание (&amp;lt;math&amp;gt;F^+&amp;lt;/math&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;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;X\rightarrow Z&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;X\rightarrow YZ&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# &amp;lt;math&amp;gt;X\rightarrow XY&amp;lt;/math&amp;gt; (1 ФЗ и пополняем X);&lt;br /&gt;
# &amp;lt;math&amp;gt;XY\rightarrow YZ&amp;lt;/math&amp;gt; (2 ФЗ и пополняем Y);&lt;br /&gt;
# &amp;lt;math&amp;gt;X\rightarrow YZ&amp;lt;/math&amp;gt; (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
==== Правило декомпозиции ====&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;Z \subseteq Y&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;X\rightarrow Z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt; (по условию);&lt;br /&gt;
# &amp;lt;math&amp;gt;Y\rightarrow Z&amp;lt;/math&amp;gt; (по аксиоме рефлексивности);&lt;br /&gt;
# &amp;lt;math&amp;gt;X\rightarrow Z&amp;lt;/math&amp;gt; (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
==== Правило псевдотранзитивности ====&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;WY\rightarrow Z&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;WX\rightarrow Z&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Доказательство:&lt;br /&gt;
# &amp;lt;math&amp;gt;WX\rightarrow WY&amp;lt;/math&amp;gt; (1 ФЗ и пополняем W);&lt;br /&gt;
# &amp;lt;math&amp;gt;WY\rightarrow Z&amp;lt;/math&amp;gt; (по условию);&lt;br /&gt;
# &amp;lt;math&amp;gt;WX\rightarrow Z&amp;lt;/math&amp;gt; (по аксиоме транзитивности).&lt;br /&gt;
&lt;br /&gt;
== Замыкание множества атрибутов ==&lt;br /&gt;
&lt;br /&gt;
Замыкание &amp;lt;math&amp;gt;F^+&amp;lt;/math&amp;gt; может включать в себя очень большое количество ФЗ. Например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=(X\rightarrow A_1, X\rightarrow A_2 ... X\rightarrow A_n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X\rightarrow Y \subseteq F^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Y \subseteq (A_1, A_2 ... A_n)&amp;lt;/math&amp;gt; и таких подмножеств может быть &amp;lt;math&amp;gt;2^n&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Поэтому &amp;quot;в лоб&amp;quot; замыкание &amp;lt;math&amp;gt;F^+&amp;lt;/math&amp;gt; никто не строит. Но необходимо найти какой-то метод, который достаточно просто позволял бы выяснять, принадлежит ли произвольная ФЗ &amp;lt;math&amp;gt;X\rightarrow Y&amp;lt;/math&amp;gt; к &amp;lt;math&amp;gt;F^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для этого применяется &#039;&#039;замыкание множества атрибутов&#039;&#039;. Пусть &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; - универсальная схема отношения, а &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; - некоторое подмножество атрибутов. Тогда замыканием множества атрибутов &amp;lt;math&amp;gt;X^+&amp;lt;/math&amp;gt; называется совокупность атрибутов &amp;lt;math&amp;gt;A_{i1}, A_{i2} ... A_{ik}&amp;lt;/math&amp;gt; таких, что &amp;lt;math&amp;gt;X\rightarrow A_{i1}, X\rightarrow A_{i2} ... X\rightarrow A_{ik}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Алгоритм построения ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм является итерационной процедурой.&lt;br /&gt;
&lt;br /&gt;
# полагаем &amp;lt;math&amp;gt;i = 0&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;X_0^+=X&amp;lt;/math&amp;gt;, а &amp;lt;math&amp;gt;X_i^+&amp;lt;/math&amp;gt; - замыкание множества атрибутов на i-том шаге;&lt;br /&gt;
# &amp;lt;math&amp;gt;X _{i+1} ^+ = X _i ^+ \bigcup V&amp;lt;/math&amp;gt;, где V - такое множество атрибутов в F, и &amp;lt;math&amp;gt;Y\rightarrow Z&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Y \subseteq X _i ^+&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;V \subseteq Z&amp;lt;/math&amp;gt;;&lt;br /&gt;
# если &amp;lt;math&amp;gt;X_{i+1}^+ = X_i^+&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;X^+ = X_i^+&amp;lt;/math&amp;gt;, иначе &amp;lt;math&amp;gt;i = i + 1&amp;lt;/math&amp;gt; и возвращаемся в пункт 2.&lt;br /&gt;
&lt;br /&gt;
==== Пример построения ====&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;R=(A, B, C, D, E, G)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;F=(AB\rightarrow C, C\rightarrow A, BC\rightarrow D, ACD\rightarrow B, D\rightarrow EG, BE\rightarrow C, CG\rightarrow BD, CE\rightarrow AG)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;X = BD&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Надо построить &amp;lt;math&amp;gt;X^+&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;math&amp;gt;i = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;X _0 ^+ = BD&amp;lt;/math&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;Y\rightarrow Z&amp;lt;/math&amp;gt;, для которых &amp;lt;math&amp;gt;Y \subseteq X_i^+&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;V\subseteq Z&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;X_{i+1}^+ = X_i^+\bigcup V&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 0 || &amp;lt;math&amp;gt;D\rightarrow EG&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;EG&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;BDEG&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || &amp;lt;math&amp;gt;BE\rightarrow C&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;BDEGC&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 2 || &amp;lt;math&amp;gt;C\rightarrow A&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;BC\rightarrow D&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;CG\rightarrow BD&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;CE\rightarrow AG&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; || &amp;lt;math&amp;gt;BDEGCA&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || &amp;lt;math&amp;gt;AB\rightarrow C&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;ACD\rightarrow B&amp;lt;/math&amp;gt; || - || &amp;lt;math&amp;gt;BDEGCA&amp;lt;/math&amp;gt;&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
Получили, что &amp;lt;math&amp;gt;X_4^+ = X_3^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
значит &amp;lt;math&amp;gt;X^+ = X_3^+ = BDEGCA&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это означает, что имеют место следующие ФЗ: &amp;lt;math&amp;gt;BD\rightarrow B&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BD\rightarrow D&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BD\rightarrow E&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BD\rightarrow G&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BD\rightarrow C&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;BD\rightarrow A&amp;lt;/math&amp;gt;, и все они &amp;lt;math&amp;gt;\subseteq F^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Короче, чтобы проверить &amp;lt;math&amp;gt;X\rightarrow Y \subseteq F^+&amp;lt;/math&amp;gt;, необходимо построить &amp;lt;math&amp;gt;X^+&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=1224</id>
		<title>ТОРА (9) - Семинар №1 - Операции реляционной алгебры</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=1224"/>
		<updated>2012-09-18T07:14:02Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Задача №7 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Операции реляционной алгебры и их связь с SQL.&lt;br /&gt;
&lt;br /&gt;
== Операторы SQL ==&lt;br /&gt;
&lt;br /&gt;
=== SELECT ===&lt;br /&gt;
&lt;br /&gt;
SELECT - выборка, DISTINCT - исключая.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT [DISTINCT] * | атрибуты&lt;br /&gt;
FROM таблицы&lt;br /&gt;
WHERE условие&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UPDATE ===&lt;br /&gt;
&lt;br /&gt;
UPDATE - обновление, изменение.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;UPDATE таблица&lt;br /&gt;
SET атрибут = выражение&lt;br /&gt;
WHERE условие&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INSERT ===&lt;br /&gt;
&lt;br /&gt;
INSERT - вставка, добавление новых записей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;INSERT&lt;br /&gt;
INTO таблица&lt;br /&gt;
записи&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DELETE ===&lt;br /&gt;
&lt;br /&gt;
DELETE - удаление записей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;DELETE&lt;br /&gt;
FROM таблица&lt;br /&gt;
WHERE условие&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;
Таблицы &amp;lt;math&amp;gt;\rho=(S,P,SP)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; - поставщики.&lt;br /&gt;
**SN - номер поставщика;&lt;br /&gt;
**SF - фамилия;&lt;br /&gt;
**SS - статус;&lt;br /&gt;
**SG - город.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; - деталь.&lt;br /&gt;
** PN - номер детали, ключ;&lt;br /&gt;
** PF - название детали;&lt;br /&gt;
** PC - цена за единицу.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;SP&amp;lt;/math&amp;gt; - поставка.&lt;br /&gt;
** N - номер поставщика;&lt;br /&gt;
** PN - номер детали;&lt;br /&gt;
** kol - количество поставляемых деталей.&lt;br /&gt;
&lt;br /&gt;
=== Примеры экземпляров отношений ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров || 40 || Самара&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! PN || PF || PC&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P1 || болт || 20&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P2 || гайка || 25&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P4 || гайка || 30&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;SP&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! SN || PN || kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || P1 || 100&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || P3 || 200&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || P3 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || P3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Задачи ==&lt;br /&gt;
&lt;br /&gt;
=== Задача №1 ===&lt;br /&gt;
&lt;br /&gt;
Проекция. Найти города, где проживают поставщики.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\Pi_{SG}(S)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | Самара&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT DISTINCT SG FROM S&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №2 ===&lt;br /&gt;
&lt;br /&gt;
Селекция. Найти поставщиков со статусом больше 70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\sigma_{SS&amp;gt;70}(S)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT * FROM S WHERE SS &amp;gt; 70&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №3 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера и фамилии поставщиков со статусом меньше 80.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\Pi_{SN,SF}(\sigma_{SS&amp;lt;80}(S))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT SN, SF&lt;br /&gt;
FROM S&lt;br /&gt;
WHERE SS &amp;lt; 80&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №4 ===&lt;br /&gt;
 &lt;br /&gt;
Удалить все поставки поставщика с номером S1.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;SP = SP - \sigma_{SN=S1}(SP)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Получится:&lt;br /&gt;
 &lt;br /&gt;
{|+SP | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || PN || kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || P3 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || P3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;DELETE&lt;br /&gt;
FROM SP&lt;br /&gt;
WHERE SN = S1&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №5 ===&lt;br /&gt;
 &lt;br /&gt;
Добавить в таблицу S новых поставщиков из таблицы SNEW.&lt;br /&gt;
 &lt;br /&gt;
{|+SNEW | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S4 || Петров || 30 || Тверь&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S5 || Сидоров || 50 || Тверь&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;S = SP\bigcup S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{|+ таблица SNEW | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров || 40 || Самара&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S4 || Петров || 30 || Тверь&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S5 || Сидоров || 50 || Тверь&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;INSERT&lt;br /&gt;
INTO S&lt;br /&gt;
SELECT * FROM SNEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №6 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера поставщиков, поставляющих детали по цене меньше 30.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;r = \sigma_{PC&amp;lt;30}(P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = SP \bowtie_{PN} r &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! PN !! PF !! PC !! SN !! kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P1 || болт || 20 || S1 || 100&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S1 || 200&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S2 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = \Pi_{SN}(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT DISTINCT SN&lt;br /&gt;
FROM SP, P&lt;br /&gt;
WHERE PC &amp;lt; 30 AND SP.PN = P.PN&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №7 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w = \sigma_{PF=}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;шайба&#039;&amp;lt;/sub&amp;gt;&amp;lt;math&amp;gt;(P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = w \bowtie_{PN}SP &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = \sigma_{kol&amp;gt;100}(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q = z \bowtie_{SN} S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x = \Pi_{SN,SF}(q)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT SN, SF&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE PF = шайба AND kol &amp;gt; 100 AND P.PN = SP.PN AND SP.SN = S.SN&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №8 ===&lt;br /&gt;
&lt;br /&gt;
Все поставщики переехали из Москвы в Питер. Модифицировать таблицу S.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|С]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=1223</id>
		<title>ТОРА (9) - Семинар №1 - Операции реляционной алгебры</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=1223"/>
		<updated>2012-09-18T07:01:20Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Задача №6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Операции реляционной алгебры и их связь с SQL.&lt;br /&gt;
&lt;br /&gt;
== Операторы SQL ==&lt;br /&gt;
&lt;br /&gt;
=== SELECT ===&lt;br /&gt;
&lt;br /&gt;
SELECT - выборка, DISTINCT - исключая.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT [DISTINCT] * | атрибуты&lt;br /&gt;
FROM таблицы&lt;br /&gt;
WHERE условие&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== UPDATE ===&lt;br /&gt;
&lt;br /&gt;
UPDATE - обновление, изменение.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;UPDATE таблица&lt;br /&gt;
SET атрибут = выражение&lt;br /&gt;
WHERE условие&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== INSERT ===&lt;br /&gt;
&lt;br /&gt;
INSERT - вставка, добавление новых записей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;INSERT&lt;br /&gt;
INTO таблица&lt;br /&gt;
записи&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DELETE ===&lt;br /&gt;
&lt;br /&gt;
DELETE - удаление записей.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;DELETE&lt;br /&gt;
FROM таблица&lt;br /&gt;
WHERE условие&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;
Таблицы &amp;lt;math&amp;gt;\rho=(S,P,SP)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; - поставщики.&lt;br /&gt;
**SN - номер поставщика;&lt;br /&gt;
**SF - фамилия;&lt;br /&gt;
**SS - статус;&lt;br /&gt;
**SG - город.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; - деталь.&lt;br /&gt;
** PN - номер детали, ключ;&lt;br /&gt;
** PF - название детали;&lt;br /&gt;
** PC - цена за единицу.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;math&amp;gt;SP&amp;lt;/math&amp;gt; - поставка.&lt;br /&gt;
** N - номер поставщика;&lt;br /&gt;
** PN - номер детали;&lt;br /&gt;
** kol - количество поставляемых деталей.&lt;br /&gt;
&lt;br /&gt;
=== Примеры экземпляров отношений ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров || 40 || Самара&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! PN || PF || PC&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P1 || болт || 20&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P2 || гайка || 25&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P4 || гайка || 30&lt;br /&gt;
 |}&lt;br /&gt;
 |&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 |&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ &amp;lt;math&amp;gt;SP&amp;lt;/math&amp;gt;&lt;br /&gt;
 ! SN || PN || kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || P1 || 100&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || P3 || 200&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || P3 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || P3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Задачи ==&lt;br /&gt;
&lt;br /&gt;
=== Задача №1 ===&lt;br /&gt;
&lt;br /&gt;
Проекция. Найти города, где проживают поставщики.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\Pi_{SG}(S)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | Самара&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT DISTINCT SG FROM S&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №2 ===&lt;br /&gt;
&lt;br /&gt;
Селекция. Найти поставщиков со статусом больше 70.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\sigma_{SS&amp;gt;70}(S)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT * FROM S WHERE SS &amp;gt; 70&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №3 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера и фамилии поставщиков со статусом меньше 80.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t=\Pi_{SN,SF}(\sigma_{SS&amp;lt;80}(S))&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT SN, SF&lt;br /&gt;
FROM S&lt;br /&gt;
WHERE SS &amp;lt; 80&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №4 ===&lt;br /&gt;
 &lt;br /&gt;
Удалить все поставки поставщика с номером S1.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;SP = SP - \sigma_{SN=S1}(SP)&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Получится:&lt;br /&gt;
 &lt;br /&gt;
{|+SP | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || PN || kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || P3 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || P3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;DELETE&lt;br /&gt;
FROM SP&lt;br /&gt;
WHERE SN = S1&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №5 ===&lt;br /&gt;
 &lt;br /&gt;
Добавить в таблицу S новых поставщиков из таблицы SNEW.&lt;br /&gt;
 &lt;br /&gt;
{|+SNEW | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S4 || Петров || 30 || Тверь&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S5 || Сидоров || 50 || Тверь&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;S = SP\bigcup S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{|+ таблица SNEW | class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF || SS || SG&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов || 80 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров || 40 || Самара&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3 || Кротов || 100 || Москва&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S4 || Петров || 30 || Тверь&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S5 || Сидоров || 50 || Тверь&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;INSERT&lt;br /&gt;
INTO S&lt;br /&gt;
SELECT * FROM SNEW&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №6 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера поставщиков, поставляющих детали по цене меньше 30.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;r = \sigma_{PC&amp;lt;30}(P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = SP \bowtie_{PN} r &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! PN !! PF !! PC !! SN !! kol&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P1 || болт || 20 || S1 || 100&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S1 || 200&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S2 || 150&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | P3 || шайба || 10 || S3 || 50&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = \Pi_{SN}(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S3&lt;br /&gt;
 |}&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT DISTINCT SN&lt;br /&gt;
FROM SP, P&lt;br /&gt;
WHERE PC &amp;lt; 30 AND SP.PN = P.PN&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №7 ===&lt;br /&gt;
&lt;br /&gt;
Найти номера и фамилии поставщиков, поставляющих шайбы в количестве больше 100.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w = \sigma_{PF=}&amp;lt;/math&amp;gt;&amp;lt;sub&amp;gt;&#039;шайба&#039;&amp;lt;/sub&amp;gt;&amp;lt;math&amp;gt;(P)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = w \bowtie_{PN}SP &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;z = \sigma_{kol&amp;gt;100}(t)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;q = z \bowtie_{SN} S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x = \Pi_{SN,SF}(q)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получится:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! SN || SF&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S1 || Иванов&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | S2 || Петров&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;SELECT SN, SF&lt;br /&gt;
FROM S, P, SP&lt;br /&gt;
WHERE kol &amp;gt; 100 AND P.PN = SP.PN AND SP.SN = S.SN&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Задача №8 ===&lt;br /&gt;
&lt;br /&gt;
Все поставщики переехали из Москвы в Питер. Модифицировать таблицу S.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|С]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=997</id>
		<title>ТОРА (9) - Лекция №1 - Операции реляционной алгебры</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=997"/>
		<updated>2012-09-03T18:42:22Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Естественное соединение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
=== Схема отношения ===&lt;br /&gt;
&lt;br /&gt;
Это поименованная совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (A_1, ..., A_n)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; - некоторый атрибут из домена отношения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)=(A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;(A_1, A_3)&amp;lt;/math&amp;gt; - ключ, определяющий запись.&lt;br /&gt;
&lt;br /&gt;
=== Степень схемы отношения ===&lt;br /&gt;
&lt;br /&gt;
Это количество атрибутов в схеме.&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;math&amp;gt;R = (A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt; степень равна 4.&lt;br /&gt;
&lt;br /&gt;
=== Экземпляр отношения ===&lt;br /&gt;
&lt;br /&gt;
Это конкретная таблица с данной схемой отношения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;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;quot;Х&amp;quot; || Ленина, 2 || сахар || 40&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ОАО &amp;quot;У&amp;quot; || Комсомола, 25 || соль || 5&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;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; - множество всех атрибутов некоторой предметной области (универсальная схема отношения).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_1, ..., R_n&amp;lt;/math&amp;gt; - совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;\rho=(R_1, ..., R_n)&amp;lt;/math&amp;gt; называется схемой БД.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = (A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и две схемы: &amp;lt;math&amp;gt;R_1 = (A_1, A_2)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;R_2 = (A_1, A_3, A_4)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;math&amp;gt;R_1\bigcup R_2 = A&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;\rho = (R_1, R_2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры схем БД ==&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;плохой&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и есть одна схема &amp;lt;math&amp;gt;\rho = R_1 = A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная схема БД обладает следующими недостатками (аномалиями):&lt;br /&gt;
* избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;&lt;br /&gt;
* потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;&lt;br /&gt;
* аномалия включения кортежа. В выбранном отношении &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;&lt;br /&gt;
* аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.&lt;br /&gt;
Первопричиной этих недостатков является то, что &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; не находится в {{Википедия|Третья_нормальная_форма|3НФ}}&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;хорошей&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_1 = (&amp;lt;/math&amp;gt;идентификатор, адрес&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_2 = (&amp;lt;/math&amp;gt;товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Схема &amp;lt;math&amp;gt;\rho = (R_1, R_2)&amp;lt;/math&amp;gt; находится в 3НФ и не обладает перечисленными выше недостатками.&lt;br /&gt;
&lt;br /&gt;
== Основные операции реляционной алгебры ==&lt;br /&gt;
&lt;br /&gt;
=== Объединение отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R=R_1\bigcup R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединение отношений - это отношение, каждый кортеж которого принадлежит либо &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt;, либо &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 5 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Дублирование кортежей не допускается.&lt;br /&gt;
&lt;br /&gt;
=== Пересечение отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = R_1\bigcap R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пересечение отношений - это отношение, каждый кортеж которого принадлежит и &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt;, и &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Разность отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = R_1 - R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разность отношений - это отношение, кортежи которого принадлежат &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; и не принадлежат &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Декартово произведение ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R, S&amp;lt;/math&amp;gt; - две схемы отношения со степенями &amp;lt;math&amp;gt;k_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = R \times S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Декартово произведение - это отношение &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; со степенью &amp;lt;math&amp;gt;k_1 + k_2&amp;lt;/math&amp;gt;, кортежи которого получаются {{Википедия|Конкатенация|конкатенацией}} кортежей из отношений &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 7 || 8&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 8&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Проекция ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = \Pi_{A_{i1} ... A_{ik}}(R)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов &amp;lt;math&amp;gt;A_{i1} ... A_{ik}&amp;lt;/math&amp;gt; исходного отношения &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 8 || 9 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;t = \Pi_{A_1, A_4}(R)&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Селекция ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = \sigma_F(R)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и удовлетворяет логическому условию &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 9 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t = \sigma_{A_1\leq A_2}(R)&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Естественное соединение ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = R\vartriangleright\vartriangleleft S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определение этой операции следует из способа построения естественного соединения.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2 || 3&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 4 || 6 || 7&lt;br /&gt;
  |}&lt;br /&gt;
  | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
  ! !! &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2 || 7 || 8&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 8 || 9 || 10 || 11&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 5 || 6 || 9 || 16&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Построение естественного соединения:&lt;br /&gt;
&lt;br /&gt;
:1) построить декартово произведение &amp;lt;math&amp;gt;R\times S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_2&amp;lt;/math&amp;gt;!! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;6&amp;quot; | &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 4 || 6 || 9 || 16&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:2) выбрать из этого произведения кортежи по условию &amp;lt;math&amp;gt;R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;A_1 = A_k&amp;lt;/math&amp;gt; - общие атрибуты в схеме отношений &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_2&amp;lt;/math&amp;gt;!! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t_2&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:3) удалить из полученного отношения &amp;lt;math&amp;gt;S.A_{i1} ... S.A_{ik}&amp;lt;/math&amp;gt;, потому что они будут дублирующими.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t_3&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|Л]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
	<entry>
		<id>https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=996</id>
		<title>ТОРА (9) - Лекция №1 - Операции реляционной алгебры</title>
		<link rel="alternate" type="text/html" href="https://iu5bmstu.ru/index.php?title=%D0%A2%D0%9E%D0%A0%D0%90_(9)_-_%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%E2%84%961_-_%D0%9E%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D1%80%D0%B5%D0%BB%D1%8F%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D1%8B&amp;diff=996"/>
		<updated>2012-09-03T18:32:45Z</updated>

		<summary type="html">&lt;p&gt;LenaP: /* Естественное соединение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Определения ==&lt;br /&gt;
&lt;br /&gt;
=== Схема отношения ===&lt;br /&gt;
&lt;br /&gt;
Это поименованная совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (A_1, ..., A_n)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt; - некоторый атрибут из домена отношения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)=(A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;(A_1, A_3)&amp;lt;/math&amp;gt; - ключ, определяющий запись.&lt;br /&gt;
&lt;br /&gt;
=== Степень схемы отношения ===&lt;br /&gt;
&lt;br /&gt;
Это количество атрибутов в схеме.&lt;br /&gt;
&lt;br /&gt;
Для &amp;lt;math&amp;gt;R = (A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt; степень равна 4.&lt;br /&gt;
&lt;br /&gt;
=== Экземпляр отношения ===&lt;br /&gt;
&lt;br /&gt;
Это конкретная таблица с данной схемой отношения.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;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;quot;Х&amp;quot; || Ленина, 2 || сахар || 40&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | ОАО &amp;quot;У&amp;quot; || Комсомола, 25 || соль || 5&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;
&amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; - множество всех атрибутов некоторой предметной области (универсальная схема отношения).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_1, ..., R_n&amp;lt;/math&amp;gt; - совокупность атрибутов.&lt;br /&gt;
&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;\rho=(R_1, ..., R_n)&amp;lt;/math&amp;gt; называется схемой БД.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A = (A_1, A_2, A_3, A_4)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и две схемы: &amp;lt;math&amp;gt;R_1 = (A_1, A_2)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;R_2 = (A_1, A_3, A_4)&amp;lt;/math&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Так как &amp;lt;math&amp;gt;R_1\bigcup R_2 = A&amp;lt;/math&amp;gt;, то &amp;lt;math&amp;gt;\rho = (R_1, R_2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Примеры схем БД ==&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;плохой&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
и есть одна схема &amp;lt;math&amp;gt;\rho = R_1 = A&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данная схема БД обладает следующими недостатками (аномалиями):&lt;br /&gt;
* избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;&lt;br /&gt;
* потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;&lt;br /&gt;
* аномалия включения кортежа. В выбранном отношении &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;&lt;br /&gt;
* аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.&lt;br /&gt;
Первопричиной этих недостатков является то, что &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; не находится в {{Википедия|Третья_нормальная_форма|3НФ}}&lt;br /&gt;
&lt;br /&gt;
=== Пример &amp;quot;хорошей&amp;quot; схемы БД ===&lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;A = (&amp;lt;/math&amp;gt;идентификатор поставщика, адрес, товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_1 = (&amp;lt;/math&amp;gt;идентификатор, адрес&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R_2 = (&amp;lt;/math&amp;gt;товар, цена&amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Схема &amp;lt;math&amp;gt;\rho = (R_1, R_2)&amp;lt;/math&amp;gt; находится в 3НФ и не обладает перечисленными выше недостатками.&lt;br /&gt;
&lt;br /&gt;
== Основные операции реляционной алгебры ==&lt;br /&gt;
&lt;br /&gt;
=== Объединение отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R=R_1\bigcup R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Объединение отношений - это отношение, каждый кортеж которого принадлежит либо &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt;, либо &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;.&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 5 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Дублирование кортежей не допускается.&lt;br /&gt;
&lt;br /&gt;
=== Пересечение отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = R_1\bigcap R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пересечение отношений - это отношение, каждый кортеж которого принадлежит и &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt;, и &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Разность отношений ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R = R_1 - R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разность отношений - это отношение, кортежи которого принадлежат &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; и не принадлежат &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_1&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R_2&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 3 || 4&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Декартово произведение ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;R, S&amp;lt;/math&amp;gt; - две схемы отношения со степенями &amp;lt;math&amp;gt;k_1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k_2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = R \times S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Декартово произведение - это отношение &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; со степенью &amp;lt;math&amp;gt;k_1 + k_2&amp;lt;/math&amp;gt;, кортежи которого получаются {{Википедия|Конкатенация|конкатенацией}} кортежей из отношений &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 3 || 4&lt;br /&gt;
  |}&lt;br /&gt;
  | &lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 5 || 6&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 7 || 8&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 8&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Проекция ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = \Pi_{A_{i1} ... A_{ik}}(R)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов &amp;lt;math&amp;gt;A_{i1} ... A_{ik}&amp;lt;/math&amp;gt; исходного отношения &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;4&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 8 || 9 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 5 || 6&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 4 || 7 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;t = \Pi_{A_1, A_4}(R)&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 4&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 7 || 10&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 6&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Селекция ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = \sigma_F(R)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и удовлетворяет логическому условию &amp;lt;math&amp;gt;F&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 9 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t = \sigma_{A_1\leq A_2}(R)&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 3 || 3&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
=== Естественное соединение ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;t = R\vartriangleright\vartriangleleft S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определение этой операции следует из способа построения естественного соединения.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
 | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
  ! !!&amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2 || 3&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 4 || 6 || 7&lt;br /&gt;
  |}&lt;br /&gt;
  | valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot; valign=&amp;quot;top&amp;quot;&lt;br /&gt;
  ! !! &amp;lt;math&amp;gt;A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  ! rowspan=&amp;quot;3&amp;quot; | &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; &lt;br /&gt;
  | 1 || 2 || 7 || 8&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 8 || 9 || 10 || 11&lt;br /&gt;
  |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
  | 5 || 6 || 9 || 16&lt;br /&gt;
  |}&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
Построение естественного соединения:&lt;br /&gt;
&lt;br /&gt;
:1) построить декартово произведение &amp;lt;math&amp;gt;R\times S&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_2&amp;lt;/math&amp;gt;!! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;6&amp;quot; | &amp;lt;math&amp;gt;t_1&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 1 || 2 || 3 || 4 || 6 || 9 || 16&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 8 || 9 || 10 || 11&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:2) выбрать из этого произведения кортежи по условию &amp;lt;math&amp;gt;R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;A_1 = A_k&amp;lt;/math&amp;gt; - общие атрибуты в схема отношений &amp;lt;math&amp;gt;R&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;S.A_2&amp;lt;/math&amp;gt;!! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t_2&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 1 || 2 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 4 || 6 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
:3) удалить из полученного отношения &amp;lt;math&amp;gt;S.A_{i1} ... S.A_{ik}&amp;lt;/math&amp;gt;, потому что они будут дублирующими.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 ! !! &amp;lt;math&amp;gt;R.A_1&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;R.A_2&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_3&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_4&amp;lt;/math&amp;gt; !! &amp;lt;math&amp;gt;A_5&amp;lt;/math&amp;gt;&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 ! rowspan=&amp;quot;2&amp;quot; | &amp;lt;math&amp;gt;t_3&amp;lt;/math&amp;gt; &lt;br /&gt;
 | 1 || 2 || 3 || 7 || 8&lt;br /&gt;
 |- align=&amp;quot;center&amp;quot;&lt;br /&gt;
 | 4 || 6 || 7 || 9 || 16&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Теоретические основы реляционной алгебры (9 семестр)|Л]]&lt;br /&gt;
[[Категория:Конспекты лекций и семинаров]]&lt;/div&gt;</summary>
		<author><name>LenaP</name></author>
	</entry>
</feed>