Скачиваний:
102
Добавлен:
02.05.2014
Размер:
2.3 Mб
Скачать

11.6. Замечание по поводу атрибутов, содержащих в качестве значений отношения

Как было показано в главе 5, отношение может содержать атрибут, значения которо­го также являются некоторыми отношениями (рис. 11.17). Конечно, следствием этого является тот факт, что переменная-отношение, в свою очередь, также может содержать атрибуты, значениями которых являются некоторые переменные-отношения. Однако с точки зрения процедуры проектирования базы данных использовать подобные перемен­

ные-отношения обычно не рекомендуется, поскольку для них характерна асимметрич-ностьи (не говоря уже о том, что их предикаты, как правило, весьма сложны) и эта асимметричность способна вызвать разные проблемы практического характера. Напри­мер, для случая, показанного на рис. 11.17, сведения о поставщиках и деталях представ­лены асимметрично. Рассмотрим два приведенных ниже симметричных запроса.

  1. Получить список номеров поставщиков (St) детали с номером 'Р1'.

  2. Получить список деталей (Pi), поставляемых поставщиком с номером 'S1'.

Из-за асимметричности переменной-отношения SPQ их формулировки оказываются совершенно различными

  1. ( SPQ WHERE Pi ( 'PI' ) IN PQ { Pi } ) { Si }.

  2. ( ( SPQ WHERE Si = St ( 'SI' ) ) { PQ } ) { Pi }.

В данном примере предполагается, что SPQ — это переменная-отношение, допусти­мыми значениями которой являются отношения, аналогичные показанному на рис. 11.17.

SPQ

s#

PQ

SI

P#

QTY

PI

300

P2

200

|P6

100

S2

P#

QTY

PI

300

P2

200

P#

QTY

Рис 11 17 Переменная-отношение SPQ с атрибутом, содержащим в качестве значений другое отношение

Еще хуже обстоит дело с операциями обновления. Рассмотрим следующие две опера­ции обновления.

  1. Ввести сведения о новой поставке 500 деталей типа 'Р5' поставщиком с номером 'S6'.

  2. Ввести сведения о новой поставке 500 деталей типа 'Р5' поставщиком с номером 'S2'.

" Фактически подобные переменные-отношения ранее даже не были узаконены и назывались ненормализованными, т е такими, которые не находятся даже в первой нормальной форме [10 4] (см также главу 5)

При работе с обычной переменной-отношением S? между двумя подобными обнов­лениями нет никакой принципиальной разницы, так как в обоих случаях речь идет о вставке в переменную-отношение единственного кортежа. В противоположность этому при работе с переменной-отношением SPQ выполняемые обновления будут существенно отличаться (не говоря уже о том, что в данной ситуации обе эти операции будут намного сложнее, чем при работе с переменной-отношением SP).

1. INSERT INTO SPQ RELATION

{ TUPLE { St Si ( 'S6' ),

PQ RELATION { TUPLE { Pi ( 'P5' ),

QTY QTY ( 500 ) } } } };

2. UPDATE SPQ WHERE Si = Si ( 'S2' )

INSERT INTO PQ RELATION {TUPLE { Pi ( 'P5' ),

QTY QTY ( 500 ) } };

Переменные-отношения (по крайней мере, базовые переменные-отношения) пред­почтительнее создавать без использования подобных атрибутов, принимающих в качест­ве значений другие отношения, так как в этом случае они обладают более простой логи­ческой структурой, что существенно упрощает выполнение с ними различных операций. Однако это замечание следует воспринимать лишь как рекомендацию, но не как обяза­тельное правило. На практике вполне могут существовать такие ситуации, когда имеет смысл использовать атрибут со значениями-отношениями в некоторой переменной-отношении и даже в базовой переменной-отношении. Например, на рис. 11.18 показано (частично) возможное содержимое переменной-отношения каталога RVK, в которой хра­нятся сведения о переменных-отношениях некоторой базы данных с указанием их по­тенциальных ключей. Атрибут СК в этой переменной-отношении содержит значения-отношения. Причем он одновременно является компонентом единственного потенциаль­ного ключа переменной-отношения RVK! Определение этой переменной-отношения мо­жет выглядеть так, как показано ниже.

VAR RVK BASE RELATION

{ RVNAME NAME, СК RELATION { ATTRNAME NAME } } KEY { RVNAME, CK };

Замечание. В ответе к упр. 11.3 показано, как можно исключить атрибуты со значе­ниями-отношениями, если такое исключение является желательным (что обычно имеет место на практике)12. См. также обсуждение оператора UNGR0UP в главе 6 (раздел 6.8).

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]