|
Программирование >> Хронологические базы данных
PRIMARY KEY { Si, Pi, Jl } FOREIGN KEY { Si } REFERENCES S FOREIGN KEY { Pi } REFERENCES P FOREIGN KEY { Jl } REFERENCES J; 5.5. Ниже приводятся примеры типичных значений для каждого атрибута. Начнем с переменной-отношения S. 5.6. SNAME STATUS CITY Sl(Sl) NAME(Smith) 20 London Переменная-отношение P. PNAME COLOR WEIGHT CITY PI ( PI ) NAME ( Nut ) COLOR { Red ) WEIGHT ( 12.0 ) London Переменная-отношение J. Jl JNAME CITY Jl ( Jl ) NAME ( Sorter Paris а) Корректно; BOOLEAN. б) He корректно; NAME (THE NAME(JNAME) THE NAME(PNAME)). Замечание. Идея состоит в том, чтобы соединить два допустимых строковых представления, а затем преобразовать полученную строку обратно в тип NAME. Разумеется, если полученная строка не является корректным именем, преобразование выполнено не будет. в) Корректно; QTY. г) Не корректно; QTY + QTY(IOO). д) Корректно; STATUS. е) Корректно; BOOLEAN. ж) Не корректно; THE COLOR(COLOR) = P.CITY. з) Корректно. 5.7. TYPE LENGTH POSSREP ( RATIONAL ) ; TYPE POINT POSSREP ( X RATIONAL, Y RATIONAL ) ; TYPE CIRCLE POSSREP ( R LENGTH, CTR POINT ) ; /* R - длина радиуса окружности, */ /* a CTR - ее центр */ Единственный оператор выбора для типа CIRCLE выглядит следующим образом. CIRCLE (г, ctr) /* Возвращает окружность с радиусом г и центром ctr*/ Операторы ТНЕ будут такими. THE R(c) /* Возвращает длину радиуса окружности с */ THE CTR(c) /* Возвращает точку, которая является центром окружности с */ а) OPERATOR DIAMETER ( С CIRCLE ) RETURNS ( LENGTH ) ; RETURN ( 2 * THE R ( С ) ) ; END OPERATOR ; OPERATOR CIRCUMFERENCE ( С CIRCLE ) RETURNS ( LENGTH ) ; RETURN ( 3.14159 * DIAMETER ( С ) ) ; END OPERATOR ; OPERATOR AREA ( С CIRCLE ) RETURNS ( AREA ) ; RETURN ( 3.14159 * ( THE R ( С ) ** 2 ) ) ; END OPERATOR ; Мы предполагаем, что результат умножения целого числа на значение типа LENGTH принадлежит типу LENGTH и что результат умножения двух значений типа LENGTH принадлежит типу AREA (где AREA - новый тип, определенный пользователем). б) OPERATOR DOUBLE R ( С CIRCLE ) UPDATES ( С ) ; BEGIN ; THE R ( С ) := 2 * THE R ( С ) ; RETURN ; END ; END OPERATOR ; 5.8. Следует отметить, что при определении типа множество соответствующих значений не создается. Концептуально эти значения уже существуют и всегда будут существовать (задумайтесь, например, о типе INTEGER). Таким образом, все операторы определения типов , т.е. операторы TYPE языка Tutorial D, в действительности вводят в употребление имя, которое далее будет использоваться для ссылок на это множество значений. Подобным образом оператор DROP TYPE фактически удаляет не соответствующие значения, а только имя, установленное соответствующим оператором TYPE. Отсюда следует, что обновление существующего типа означает удаление существующего имени типа, а затем повторное присвоение этого же имени другому множеству значений. Разумеется, для упрощения этой процедуры ничто не мещает нам использовать какое-либо сокращение наподобие оператора ALTER TYPE. 5.9. Отношение с пустым множеством кортежей имеет вполне разумный смысл и в действительности является обычным отношением (аналогом файла, в котором нет записей). В частности, естественно, каждая базовая переменная-отношение имеет пустое множество кортежей, когда она впервые создается, как показано в разделе 5.4. Такое отношение принято называть, хотя это и несколько неточно, пустым отношением. Но вот что, возможно, является совсем невероятным, так это то, что отношение с пустым множеством атрибутов тоже имеет вполне разумный смысл! На самом деле такие отношения оказываются исключительно важными, почти в той же степени, в какой пустые множества важны в общей теории множеств. Чтобы рассмотреть это понятие подробнее, вначале обсудим вопрос о том, могут ли отношения без атрибутов иметь кортежи. В действительности такие отношения могут иметь не более одного кортежа, а именно - 0-кортеж (т.е. кортеж, не имеюший значений атрибутов). Таких кортежей не может быть более одного, поскольку все 0-кортежи дублируют друг друга. Поэтому существует ровно два отношения степени 0: одно, содержащее ровно один кортеж, и одно, совсем не содержащее кортежей. Эти отношения настолько важны, что, следуя Дарвену [5.5], мы называем их ласковыми именами: первое - TABLE DEE и второе - TABLE DUM, или для краткости DEE и DUM (DEE имеет 0-кортеж, а DUM не имеет). Мы не станем углубляться в детали этого вопроса в данный момент и удовлетворимся лишь следующим: значение этих отношений так важно еще и потому, что DEE соответствует истине (true, или yes), а DUM соответствует лжи (false, или по). В упражнениях и ответах к ним в главах 6 и 8 предлагается более детальное изложение данного материала. Подробная информация приводится в [5.5]. 5.10. Можно согласиться с тем, что кортеж похож на запись (имеется в виду вхождение, а не тип), а атрибут похож на поле (подразумевается тип, а не вхождение). Однако это сходство только приблизительное. О базовой переменной-отношении следует говорить не как об обычном файле, а как о дисциплинированном файле (см. подраздел Свойства отношений в разделе 5.3). Такая дисциплинированность позволяет упростить структуру данных, а следовательно, и операторы, использующиеся для обработки этих данных, и, как следствие, весь пользовательский интерфейс в целом. 5.11. В принципе, ответ- можно. Изменять каталог можно с помощью обычных средств, т.е. операций INSERT, UPDATE и DELETE. Однако возможность использования таких операций могла бы быть потенциально очень опасной, поскольку она позволяет легко разрушить всю информацию в каталоге (по небрежности или по иным причинам), после чего система уже не сможет корректно функционировать. Предположим, например, что для каталога базы данных отделов и служащих допустима следующая операция DELETE. DELETE RELVAR WHERE RVNAME = NAME ( EMP ) ; В результате ее выполнения из переменной-отношения RELVAR удаляется кортеж, описывающий переменную-отношение ЕМР. С точки зрения системы переменной-отношения ЕМР больше не существует, т.е. система больше не имеет никаких сведений об этой переменной-отношении. Значит, все последующие попытки обращения к этой переменной-отношению будут безуспешными. Поэтому в большинстве реальных продуктов операции UPDATE, DELETE и INSERT для каталога или не разрешены вовсе (это обычная практика), или разрешены лишь для пользователей, наделенных очень высокими правами (возможно, лишь для администратора базы данных). Вместо этих операторов для изменения каталога используются операторы определения данных (CREATE DOMAIN, CREATE BASE RELATION и т.п.). Например, в результате выполнения оператора CREATE BASE RELATION для переменной-отношения ЕМР формируется элемент в переменной-отношении RELVAR и набор из четырех элементов (по одному для каждого из четырех атрибутов переменной-отношения ЕМР) в переменной-отношении ATTRIBUTE. (Выполнение этого оператора вызывает также множество других последствий, ко-
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.061
При копировании материалов приветствуются ссылки. |