ТОРА (9) - Лекция №1 - Операции реляционной алгебры: различия между версиями

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана, студенческое сообщество
Перейти к навигации Перейти к поиску
мНет описания правки
Строка 5: Строка 5:
Это поименованная совокупность атрибутов.
Это поименованная совокупность атрибутов.


<math>R = (A_1, ..., A_n)</math>, где <math>A_i</math> - некоторый атрибут из домена отношения.
{{Формула|f=R = (A_1, ..., A_n)}}, где {{Формула|f=A_i}} - некоторый атрибут из домена отношения.


<math>R = (</math>идентификатор поставщика, адрес, товар, цена<math>)=(A_1, A_2, A_3, A_4)</math>.
{{Формула|f=R = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)=(A_1, A_2, A_3, A_4)}}.


Здесь <math>(A_1, A_3)</math> - ключ, определяющий запись.
Здесь {{Формула|f=(A_1, A_3)}} - ключ, определяющий запись.


=== Степень схемы отношения ===
=== Степень схемы отношения ===
Строка 15: Строка 15:
Это количество атрибутов в схеме.
Это количество атрибутов в схеме.


Для <math>R = (A_1, A_2, A_3, A_4)</math> степень равна 4.
Для {{Формула|f=R = (A_1, A_2, A_3, A_4)}} степень равна 4.


=== Экземпляр отношения ===
=== Экземпляр отношения ===
Строка 21: Строка 21:
Это конкретная таблица с данной схемой отношения.
Это конкретная таблица с данной схемой отношения.


<math>R = (</math>идентификатор поставщика, адрес, товар, цена<math>)</math>.
{{Формула|f=R = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}.


{| class="wikitable"
{| class="wikitable"
Строка 37: Строка 37:
=== Схема БД ===
=== Схема БД ===


<math>A</math> - множество всех атрибутов некоторой предметной области (универсальная схема отношения).
{{Формула|f=A}} - множество всех атрибутов некоторой предметной области (универсальная схема отношения).


<math>R_1, ..., R_n</math> - совокупность атрибутов.
{{Формула|f=R_1, ..., R_n}} - совокупность атрибутов.


Тогда <math>\rho=(R_1, ..., R_n)</math> называется схемой БД.
Тогда {{Формула|f=\rho=(R_1, ..., R_n)}} называется схемой БД.


Пример:
Пример:


$A = (A_1, A_2, A_3, A_4)$
{{Формула|f=A = (A_1, A_2, A_3, A_4)}}


и две схемы: $R_1 = (A_1, A_2)$ и $R_2 = (A_1, A_3, A_4)$
и две схемы: {{Формула|f=R_1 = (A_1, A_2)$ и $R_2 = (A_1, A_3, A_4)}}


Так как $R_1\bigcup R_2 = A$, то <math>\rho = (R_1, R_2)</math>.
Так как {{Формула|f=R_1\bigcup R_2 = A}}, то {{Формула|f=\rho = (R_1, R_2)}}.


== Примеры схем БД ==
== Примеры схем БД ==
Строка 55: Строка 55:
=== Пример "плохой" схемы БД ===
=== Пример "плохой" схемы БД ===


Пусть <math>A = (</math>идентификатор поставщика, адрес, товар, цена<math>)</math>
Пусть {{Формула|f=A = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}


и есть одна схема <math>\rho = R_1 = A</math>
и есть одна схема {{Формула|f=\rho = R_1 = A}}


Данная схема БД обладает следующими недостатками (аномалиями):
Данная схема БД обладает следующими недостатками (аномалиями):
* избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;
* избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;
* потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;
* потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;
* аномалия включения кортежа. В выбранном отношении <math>R</math> пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;
* аномалия включения кортежа. В выбранном отношении {{Формула|f=R}} пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;
* аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.
* аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.
Первопричиной этих недостатков является то, что <math>R_1</math> не находится в {{Википедия|Третья_нормальная_форма|3НФ}}
Первопричиной этих недостатков является то, что {{Формула|f=R_1}} не находится в {{Википедия|Третья_нормальная_форма|3НФ}}


=== Пример "хорошей" схемы БД ===
=== Пример "хорошей" схемы БД ===


Пусть <math>A = (</math>идентификатор поставщика, адрес, товар, цена<math>)</math>
Пусть {{Формула|f=A = (}}идентификатор поставщика, адрес, товар, цена{{Формула|f=)}}


<math>R_1 = (</math>идентификатор, адрес<math>)</math>
{{Формула|f=R_1 = (}}идентификатор, адрес{{Формула|f=)}}


<math>R_2 = (</math>товар, цена<math>)</math>
{{Формула|f=R_2 = (}}товар, цена{{Формула|f=)}}


Схема <math>\rho = (R_1, R_2)</math> находится в 3НФ и не обладает перечисленными выше недостатками.
Схема {{Формула|f=\rho = (R_1, R_2)}} находится в 3НФ и не обладает перечисленными выше недостатками.


== Основные операции реляционной алгебры ==
== Основные операции реляционной алгебры ==
Строка 80: Строка 80:
=== Объединение отношений ===
=== Объединение отношений ===


<math>R=R_1\bigcup R_2</math>
{{Формула|f=R=R_1\bigcup R_2}}


Объединение отношений - это отношение, каждый кортеж которого принадлежит либо <math>R_1</math>, либо <math>R_2</math>.
Объединение отношений - это отношение, каждый кортеж которого принадлежит либо {{Формула|f=R_1}}, либо {{Формула|f=R_2}}.
{|
{|
  |
  |
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_1</math>
   ! rowspan="2" | {{Формула|f=R_1}}
   | 1 || 2
   | 1 || 2
   |- align="center"
   |- align="center"
Строка 95: Строка 95:
   |  
   |  
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_2</math>
   ! rowspan="2" | {{Формула|f=R_2}}
   | 5 || 6
   | 5 || 6
   |- align="center"
   |- align="center"
Строка 105: Строка 105:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_2</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
  |- align="center"
  |- align="center"
  ! rowspan="3" | <math>R</math>
  ! rowspan="3" | {{Формула|f=R}}
  | 1 || 2
  | 1 || 2
  |- align="center"
  |- align="center"
Строка 119: Строка 119:
=== Пересечение отношений ===
=== Пересечение отношений ===


<math>R = R_1\bigcap R_2</math>
{{Формула|f=R = R_1\bigcap R_2}}


Пересечение отношений - это отношение, каждый кортеж которого принадлежит и <math>R_1</math>, и <math>R_2</math>
Пересечение отношений - это отношение, каждый кортеж которого принадлежит и {{Формула|f=R_1}}, и {{Формула|f=R_2}}


{|
{|
  |
  |
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_1</math>
   ! rowspan="2" | {{Формула|f=R_1}}
   | 1 || 2
   | 1 || 2
   |- align="center"
   |- align="center"
Строка 135: Строка 135:
   |  
   |  
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_2</math>
   ! rowspan="2" | {{Формула|f=R_2}}
   | 5 || 6
   | 5 || 6
   |- align="center"
   |- align="center"
Строка 145: Строка 145:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_2</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
  |- align="center"
  |- align="center"
  ! <math>R</math>
  ! {{Формула|f=R}}
  | 1 || 2
  | 1 || 2
  |}
  |}
Строка 153: Строка 153:
=== Разность отношений ===
=== Разность отношений ===


<math>R = R_1 - R_2</math>
{{Формула|f=R = R_1 - R_2}}


Разность отношений - это отношение, кортежи которого принадлежат <math>R_1</math> и не принадлежат <math>R_2</math>
Разность отношений - это отношение, кортежи которого принадлежат {{Формула|f=R_1}} и не принадлежат {{Формула|f=R_2}}


{|
{|
  |
  |
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_1</math>
   ! rowspan="2" | {{Формула|f=R_1}}
   | 1 || 2
   | 1 || 2
   |- align="center"
   |- align="center"
Строка 169: Строка 169:
   |  
   |  
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R_2</math>
   ! rowspan="2" | {{Формула|f=R_2}}
   | 5 || 6
   | 5 || 6
   |- align="center"
   |- align="center"
Строка 179: Строка 179:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_2</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
  |- align="center"
  |- align="center"
  ! <math>R</math>
  ! {{Формула|f=R}}
  | 3 || 4
  | 3 || 4
  |}
  |}
Строка 187: Строка 187:
=== Декартово произведение ===
=== Декартово произведение ===


<math>R, S</math> - две схемы отношения со степенями <math>k_1</math> и <math>k_2</math>
{{Формула|f=R, S}} - две схемы отношения со степенями {{Формула|f=k_1}} и {{Формула|f=k_2}}


<math>t = R \times S</math>
{{Формула|f=t = R \times S}}


Декартово произведение - это отношение <math>t</math> со степенью <math>k_1 + k_2</math>, кортежи которого получаются {{Википедия|Конкатенация|конкатенацией}} кортежей из отношений <math>R</math> и <math>S</math>.
Декартово произведение - это отношение {{Формула|f=t}} со степенью {{Формула|f=k_1 + k_2}}, кортежи которого получаются {{Википедия|Конкатенация|конкатенацией}} кортежей из отношений {{Формула|f=R}} и {{Формула|f=S}}.


{|
{|
  |
  |
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R</math>
   ! rowspan="2" | {{Формула|f=R}}
   | 1 || 2
   | 1 || 2
   |- align="center"
   |- align="center"
Строка 205: Строка 205:
   |  
   |  
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_3</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_3}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>S</math>
   ! rowspan="2" | {{Формула|f=S}}
   | 5 || 6
   | 5 || 6
   |- align="center"
   |- align="center"
Строка 215: Строка 215:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>R.A_2</math> !! <math>A_2</math> !! <math>S.A_1</math> !! <math>A_3</math>
  ! !!{{Формула|f=R.A_2}} !! {{Формула|f=A_2}} !! {{Формула|f=S.A_1}} !! {{Формула|f=A_3}}
  |- align="center"
  |- align="center"
  ! rowspan="4" | <math>t</math>
  ! rowspan="4" | {{Формула|f=t}}
  | 1 || 2 || 5 || 6
  | 1 || 2 || 5 || 6
  |- align="center"
  |- align="center"
Строка 229: Строка 229:
=== Проекция ===
=== Проекция ===


<math>t = \Pi_{A_{i1} ... A_{ik}}(R)</math>
{{Формула|f=t=\Pi_{A_{i1} ... A_{ik} }(R) }}


Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов <math>A_{i1} ... A_{ik}</math> исходного отношения <math>R</math>.
Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов {{Формула|f=A_{i1} ... A_{ik} }} исходного отношения {{Формула|f=R}}.


{| class="wikitable"
{| class="wikitable"
  ! !! <math>A_1</math> !! <math>A_2</math> !! <math>A_3</math> !! <math>A_4</math>
  ! !! {{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=A_4}}
  |- align="center"
  |- align="center"
  ! rowspan="4" | <math>R</math>
  ! rowspan="4" | {{Формула|f=R}}
  | 1 || 2 || 3 || 4
  | 1 || 2 || 3 || 4
  |- align="center"
  |- align="center"
Строка 247: Строка 247:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_4</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_4}}
  |- align="center"
  |- align="center"
  ! rowspan="3" | <math>t = \Pi_{A_1, A_4}(R)</math>
  ! rowspan="3" | {{Формула|f=t = \Pi_{A_1, A_4}(R)}}
  | 1 || 4
  | 1 || 4
  |- align="center"
  |- align="center"
Строка 259: Строка 259:
=== Селекция ===
=== Селекция ===


<math>t = \sigma_F(R)</math>
{{Формула|f=t = \sigma_F(R)}}


Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению <math>R</math> и удовлетворяет логическому условию <math>F</math>.
Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению {{Формула|f=R}} и удовлетворяет логическому условию {{Формула|f=F}}.


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_2</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}}
  |- align="center"
  |- align="center"
  ! rowspan="3" | <math>R</math>
  ! rowspan="3" | {{Формула|f=R}}
  | 1 || 2
  | 1 || 2
  |- align="center"
  |- align="center"
Строка 275: Строка 275:


{| class="wikitable"
{| class="wikitable"
  ! !!<math>A_1</math> !! <math>A_4</math>
  ! !!{{Формула|f=A_1}} !! {{Формула|f=A_4}}
  |- align="center"
  |- align="center"
  ! rowspan="2" | <math>t = \sigma_{A_1\leq A_2}(R)</math>
  ! rowspan="2" | {{Формула|f=t = \sigma_{A_1\leq A_2}(R)}}
  | 1 || 2
  | 1 || 2
  |- align="center"
  |- align="center"
Строка 285: Строка 285:
=== Естественное соединение ===
=== Естественное соединение ===


<math>t = R\bowtie S</math>
{{Формула|f=t = R\bowtie S}}


Определение этой операции следует из способа построения естественного соединения.
Определение этой операции следует из способа построения естественного соединения.
Строка 292: Строка 292:
  | valign="top" |
  | valign="top" |
  {| class="wikitable"
  {| class="wikitable"
   ! !!<math>A_1</math> !! <math>A_2</math> !! <math>A_3</math>
   ! !!{{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_3}}
   |- align="center"
   |- align="center"
   ! rowspan="2" | <math>R</math>
   ! rowspan="2" | {{Формула|f=R}}
   | 1 || 2 || 3
   | 1 || 2 || 3
   |- align="center"
   |- align="center"
Строка 301: Строка 301:
   | valign="top" |
   | valign="top" |
  {| class="wikitable" valign="top"
  {| class="wikitable" valign="top"
   ! !! <math>A_1</math> !! <math>A_2</math> !! <math>A_4</math> !! <math>A_5</math>
   ! !! {{Формула|f=A_1}} !! {{Формула|f=A_2}} !! {{Формула|f=A_4}} !! {{Формула|f=A_5}}
   |- align="center"
   |- align="center"
   ! rowspan="3" | <math>S</math>
   ! rowspan="3" | {{Формула|f=S}}
   | 1 || 2 || 7 || 8
   | 1 || 2 || 7 || 8
   |- align="center"
   |- align="center"
Строка 314: Строка 314:
Построение естественного соединения:
Построение естественного соединения:


:1) построить декартово произведение <math>R\times S</math>
:1) построить декартово произведение {{Формула|f=R\times S}}


{| class="wikitable"
{| class="wikitable"
  ! !! <math>R.A_1</math> !! <math>R.A_2</math> !! <math>A_3</math> !! <math>S.A_1</math> !! <math>S.A_2</math>!! <math>A_4</math> !! <math>A_5</math>
  ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=S.A_1}} !! {{Формула|f=S.A_2}}!! {{Формула|f=A_4}} !! {{Формула|f=A_5}}
  |- align="center"
  |- align="center"
  ! rowspan="6" | <math>t_1</math>
  ! rowspan="6" | {{Формула|f=t_1}}
  | 1 || 2 || 3 || 1 || 2 || 7 || 8
  | 1 || 2 || 3 || 1 || 2 || 7 || 8
  |- align="center"
  |- align="center"
Строка 333: Строка 333:
  |}
  |}


:2) выбрать из этого произведения кортежи по условию <math>R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik}</math>, где <math>A_1 = A_k</math> - общие атрибуты в схемах отношений <math>R</math> и <math>S</math> (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)
:2) выбрать из этого произведения кортежи по условию {{Формула|f=R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik} }}, где {{Формула|f=A_1 = A_k}} - общие атрибуты в схемах отношений {{Формула|f=R}} и {{Формула|f=S}} (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)


{| class="wikitable"
{| class="wikitable"
  ! !! <math>R.A_1</math> !! <math>R.A_2</math> !! <math>A_3</math> !! <math>S.A_1</math> !! <math>S.A_2</math>!! <math>A_4</math> !! <math>A_5</math>
  ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=S.A_1}} !! {{Формула|f=S.A_2}}!! {{Формула|f=A_4}} !! {{Формула|f=A_5}}
  |- align="center"
  |- align="center"
  ! rowspan="2" | <math>t_2</math>
  ! rowspan="2" | {{Формула|f=t_2}}
  | 1 || 2 || 3 || 1 || 2 || 7 || 8
  | 1 || 2 || 3 || 1 || 2 || 7 || 8
  |- align="center"
  |- align="center"
Строка 344: Строка 344:
  |}
  |}


:3) удалить из полученного отношения <math>S.A_{i1} ... S.A_{ik}</math>, потому что они будут дублирующими.
:3) удалить из полученного отношения {{Формула|f=S.A_{i1} ... S.A_{ik} }}, потому что они будут дублирующими.


{| class="wikitable"
{| class="wikitable"
  ! !! <math>R.A_1</math> !! <math>R.A_2</math> !! <math>A_3</math> !! <math>A_4</math> !! <math>A_5</math>
  ! !! {{Формула|f=R.A_1}} !! {{Формула|f=R.A_2}} !! {{Формула|f=A_3}} !! {{Формула|f=A_4}} !! {{Формула|f=A_5}}
  |- align="center"
  |- align="center"
  ! rowspan="2" | <math>t_3</math>
  ! rowspan="2" | {{Формула|f=t_3}}
  | 1 || 2 || 3 || 7 || 8
  | 1 || 2 || 3 || 7 || 8
  |- align="center"
  |- align="center"

Версия от 15:15, 22 сентября 2012

Определения

Схема отношения

Это поименованная совокупность атрибутов.

$$R = (A_1, ..., A_n)$$, где $$A_i$$ - некоторый атрибут из домена отношения.

$$R = ($$идентификатор поставщика, адрес, товар, цена$$)=(A_1, A_2, A_3, A_4)$$.

Здесь $$(A_1, A_3)$$ - ключ, определяющий запись.

Степень схемы отношения

Это количество атрибутов в схеме.

Для $$R = (A_1, A_2, A_3, A_4)$$ степень равна 4.

Экземпляр отношения

Это конкретная таблица с данной схемой отношения.

$$R = ($$идентификатор поставщика, адрес, товар, цена$$)$$.

Идентификатор Адрес Товар Цена
ОАО "Х" Ленина, 2 сахар 40
ОАО "У" Комсомола, 25 соль 5

Кортеж

Любая одна строка в таблице экземпляра отношения.

Схема БД

$$A$$ - множество всех атрибутов некоторой предметной области (универсальная схема отношения).

$$R_1, ..., R_n$$ - совокупность атрибутов.

Тогда $$\rho=(R_1, ..., R_n)$$ называется схемой БД.

Пример:

$$A = (A_1, A_2, A_3, A_4)$$

и две схемы: $$R_1 = (A_1, A_2)$ и $R_2 = (A_1, A_3, A_4)$$

Так как $$R_1\bigcup R_2 = A$$, то $$\rho = (R_1, R_2)$$.

Примеры схем БД

Пример "плохой" схемы БД

Пусть $$A = ($$идентификатор поставщика, адрес, товар, цена$$)$$

и есть одна схема $$\rho = R_1 = A$$

Данная схема БД обладает следующими недостатками (аномалиями):

  • избыточность. Адрес поставщика повторяется для каждого поставляемого им товара;
  • потенциальная противоречивость. Если у поставщика меняется адрес, то его необходимо изменить во всех кортежах, в которые он входит;
  • аномалия включения кортежа. В выбранном отношении $$R$$ пара атрибутов идентификатор-товар является ключом. При включении новой записи, атрибуты ключа не должны быть пустыми, поэтому в БД нельзя включить поставщика, если он в данный момент не поставляет товар;
  • аномалия удаления. При удалении всех товаров, поставляемых поставщиком, теряется информация о самом поставщике.

Первопричиной этих недостатков является то, что $$R_1$$ не находится в 3НФ

Пример "хорошей" схемы БД

Пусть $$A = ($$идентификатор поставщика, адрес, товар, цена$$)$$

$$R_1 = ($$идентификатор, адрес$$)$$

$$R_2 = ($$товар, цена$$)$$

Схема $$\rho = (R_1, R_2)$$ находится в 3НФ и не обладает перечисленными выше недостатками.

Основные операции реляционной алгебры

Объединение отношений

$$R=R_1\bigcup R_2$$

Объединение отношений - это отношение, каждый кортеж которого принадлежит либо $$R_1$$, либо $$R_2$$.

$$A_1$$ $$A_2$$
$$R_1$$ 1 2
3 4
$$A_1$$ $$A_2$$
$$R_2$$ 5 6
1 2
$$A_1$$ $$A_2$$
$$R$$ 1 2
3 4
5 6

Дублирование кортежей не допускается.

Пересечение отношений

$$R = R_1\bigcap R_2$$

Пересечение отношений - это отношение, каждый кортеж которого принадлежит и $$R_1$$, и $$R_2$$

$$A_1$$ $$A_2$$
$$R_1$$ 1 2
3 4
$$A_1$$ $$A_2$$
$$R_2$$ 5 6
1 2
$$A_1$$ $$A_2$$
$$R$$ 1 2

Разность отношений

$$R = R_1 - R_2$$

Разность отношений - это отношение, кортежи которого принадлежат $$R_1$$ и не принадлежат $$R_2$$

$$A_1$$ $$A_2$$
$$R_1$$ 1 2
3 4
$$A_1$$ $$A_2$$
$$R_2$$ 5 6
1 2
$$A_1$$ $$A_2$$
$$R$$ 3 4

Декартово произведение

$$R, S$$ - две схемы отношения со степенями $$k_1$$ и $$k_2$$

$$t = R \times S$$

Декартово произведение - это отношение $$t$$ со степенью $$k_1 + k_2$$, кортежи которого получаются конкатенацией кортежей из отношений $$R$$ и $$S$$.

$$A_1$$ $$A_2$$
$$R$$ 1 2
3 4
$$A_1$$ $$A_3$$
$$S$$ 5 6
7 8
$$R.A_2$$ $$A_2$$ $$S.A_1$$ $$A_3$$
$$t$$ 1 2 5 6
1 2 7 8
3 4 5 6
3 4 7 8

Проекция

$$t=\Pi_{A_{i1} ... A_{ik} }(R)$$

Проекция - это отношение, каждый кортеж которого состоит из значений атрибутов $$A_{i1} ... A_{ik}$$ исходного отношения $$R$$.

$$A_1$$ $$A_2$$ $$A_3$$ $$A_4$$
$$R$$ 1 2 3 4
7 8 9 10
3 4 5 6
3 4 7 6
$$A_1$$ $$A_4$$
$$t = \Pi_{A_1, A_4}(R)$$ 1 4
7 10
3 6

Селекция

$$t = \sigma_F(R)$$

Селекция - это отношение, каждый кортеж которого принадлежит исходному отношению $$R$$ и удовлетворяет логическому условию $$F$$.

$$A_1$$ $$A_2$$
$$R$$ 1 2
9 8
3 3
$$A_1$$ $$A_4$$
$$t = \sigma_{A_1\leq A_2}(R)$$ 1 2
3 3

Естественное соединение

$$t = R\bowtie S$$

Определение этой операции следует из способа построения естественного соединения.

$$A_1$$ $$A_2$$ $$A_3$$
$$R$$ 1 2 3
4 6 7
$$A_1$$ $$A_2$$ $$A_4$$ $$A_5$$
$$S$$ 1 2 7 8
8 9 10 11
5 6 9 16

Построение естественного соединения:

1) построить декартово произведение $$R\times S$$
$$R.A_1$$ $$R.A_2$$ $$A_3$$ $$S.A_1$$ $$S.A_2$$ $$A_4$$ $$A_5$$
$$t_1$$ 1 2 3 1 2 7 8
1 2 3 8 9 10 11
1 2 3 4 6 9 16
4 6 7 1 2 7 8
4 6 7 8 9 10 11
4 6 7 4 6 9 16
2) выбрать из этого произведения кортежи по условию $$R.A_{i1} = S.A_{i1} ... R.A_{ik} = S.A_{ik}$$, где $$A_1 = A_k$$ - общие атрибуты в схемах отношений $$R$$ и $$S$$ (предполагается, что эти атрибуты занимают одинаковое положение в отношениях. Хотя не обязательно)
$$R.A_1$$ $$R.A_2$$ $$A_3$$ $$S.A_1$$ $$S.A_2$$ $$A_4$$ $$A_5$$
$$t_2$$ 1 2 3 1 2 7 8
4 6 7 4 6 9 16
3) удалить из полученного отношения $$S.A_{i1} ... S.A_{ik}$$, потому что они будут дублирующими.
$$R.A_1$$ $$R.A_2$$ $$A_3$$ $$A_4$$ $$A_5$$
$$t_3$$ 1 2 3 7 8
4 6 7 9 16