|
Программирование >> Sql: полное руководство
инженера. Тот факт, что их количество переменно, для объектной модели не составляет проблемы, поскольку переменное количество однородных элементов всегда можно представить в виде массива внутри объекта, хранящего данные об инженере. Таблица ENGINEERS
Внешний ключ
Рис 23 5. Реляционная модель информации об инженерах и их ученых степенях Объектно-реляционные СУБД поддерживают множества, массивы и другие типы коллекций. Их можно использовать для определения столбцов таблиц. Такой столбец будет содержать не одно значение в каждой ячейке, а целый набор значений. С помошью специальных расширений синтаксиса SQL пользователь или хранимая процедура могут маниттулировать коллекцией данных как единым целым или обращаться к ее отдельным элементам. Создание коллекций в Informix Universal Server существует три типа коллекций: Список (list) - это упорядоченный набор значений одного типа. В списке есть первый, последний и п-ный элемент. Элементы списка не обязательно должны быть уникальными. Например, сггасок имен сотрудников, нанятых в текущем году, может быть таким (в порядке приема на работу): {Jim, Магу, Sam, Jim, John}. Мультимножество (multiset) - это неупорядоченный набор значений одного типа. В нем нет ни первого, ни последнего, ни и-ного элемента - все они равнозначны. Элементы мультимножества не обязательно должны быть уникальными. Например, список имен сотрудников будет мультимножеством, если вас не интересует порядок их найма: {Jim, Sam, John, Mary, Jim}. Множество (set) - это неупорядоченный набор уникальных значений одного типа. В нем тоже нет ни первого, ни последнего, ни -ного элемента, но все элементы множества обязательно должны иметь уникальные значения. Например, приведенный выше список имен сотрудников не можег считаться множеством, а вот набор их фамилий - может- {Johnson, Samuels, Wnght, Jones, Smith}. Чтобы проиллюстрировать концепцию коллекций, мы расширим таблицы нашей ОРБД следующим образом: Таблица reps будет включать плановые объемы продаж на первый, второй, третий и четвертый кварталы. Квартальные планы логичнее всего представить в виде списка, так как они имеют естественный порядок (от первого до четвертого), один и тот же тип данных (денежный) и их значения не обязательно уникальны (т.е. планы первого и второго квартала вполне могут совпадать). Таблица engineers будет включать информацию об ученых степенях инженеров. Эта информация будет состоять из двух компонентов собственно степени (BS - бакалавр естественных наук, PhD - доктор философии и т.п) и учебного заведения, в котором она получена. Данньге будут храниться в виде мультимножества, поскольку инженер может иметь две степени одного уровня, например бакалавра естественных наук и бакалавра бизнеса, полученные в одном и том же учебном заведении. Таблица technicians будет включать информацию о проектах, в которых участвует каждый технолог. Технолог может участвовать и в нескольких проектах, но у каждого проекта будет уникальное название Поэтому данные о проектах будут храниться в виде множества. Вот инструкции alter table, которые вносят в структуру таблиц нашей базы данных все эти изменения: alter table reps add QTR TGT list(money (9, 2)); /* четыре квартальных плана */ alter table technicians add projects SET(varchar(15)); /* проекты */ alter table engineers add degrees multiset(row( /* ученые степени */ degree varchar(3), school varchar(15)); Результирующие таблицы представлены на рис. 23.6. Получившуюся структуру можно назвать таблицей в таблице . Как видите, коллекции вносят серьезные изменения в реляционную модель, основанную на хранении строк и столбцов с атомарными элемента.ми. С появление.м каялекций таблицы как бы растягиваются, чтобы вместить дополнительные данные. InfoTmix Universal Server допускает самое широкое использование коллекций. Коллекция может быть полем записи, а сами записи могут быть элементами коллекции. При желании можно даже определить коллекцию в коллекции. Например, проекты в нашем примере могут состоять из подчиненных проектов, участие в которых тоже можно отслеживать в базе данных. С добавлением каждого нового уровня сложности усложняется как SQL, так и язык хранимых процедур, которым нужны средства для манипулирования новыми типами данных. Таблица REPS
Таблица TECHNICIANS
Таблица ENGINEERS
P C 23.6. ТфблИЦЫ CO стояЙцоА*ф% I коллекцин Oracle подцерживает коллекции двух типов: Массив переменного размера (varray) - это упорядоченный набор значений одного типа. Элементы массива не обязаны быть уникальными. При создании столбца этого типа следует задать максимальное количество элементов массива. Для доступа к отдельным элементам массивов в Oracle поддерживается расширенный синтаксис SQL. Вложенная таблица (table) - это самая настоящая таблица в таблице. Столбец данного типа содержит ячейки, которые сами являются таблицами. Oracle хранит содержимое вложенной таблицы отдельно от главной таблицы, но поддерживает расширенный синтаксис SQL, позволяющий обращаться к вложенной таблице как к столбцу главной таблицы. В отличие от массива переменной длины вложенная таблица может содержать любое количество строк.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |