Лекция_1 (1119133), страница 5
Текст из файла (страница 5)
главы баз данных. Лекция 167Типы данных SQL (31)Типы временных интервалов (1)Временным интервалом называется разность между двумязначениями даты или времениВ SQL определены две категории типов временныхинтервалов: «год-месяц» и «день-время суток»Временные интервалы языка SQL не привязываются кначальному и/или конечному значению даты/времени, аописывают только протяженность во времениВ общем случае при определении столбца типа временногоинтервала указывается INTERVAL start (p) [ TO end (q) ], где вкачестве «start» и «end» могут задаваться YEAR, MONTH, DAY,HOUR, MINUTE и SECOND◦ параметр p задает требуемую точность лидирующего поляинтервала (число десятичных цифр)◦ параметр q может задаваться только в том случае, когда в качествеend используется SECOND, и указывает точность долей секунды20.05.2016Доп.
главы баз данных. Лекция 168Типы данных SQL (32)Типы временных интервалов (2)Возможны следующие вариации типов временныхинтервалов.Типы категории «год-месяц»◦ можно определить столбцы следующих типов:◦ INTERVAL YEAR, INTERVAL YEAR (p) значения этих типов – временные интервалы в годах◦ INTERVAL MONTH, INTERVAL MONTH (p) значения этих типов – временные интервалы в месяцах◦ INTERVAL YEAR TO MONTH, INTERVAL YEAR (p) TO MONTH значения этих типов – временные интервалы в годах и месяцах.◦ если значение параметра p не указывается явно, поумолчанию принимается его значение «2»20.05.2016Доп. главы баз данных.
Лекция 169Типы данных SQL (33)Типы временных интервалов (3)Типы категории «день-время суток»◦ при определении столбца можно использовать следующие комбинации:INTERVAL DAY (p), INTERVAL DAY,INTERVAL DAY (p) TO HOUR, INTERVAL DAY TO HOUR,INTERVAL DAY (p) TO MINUTE, INTERVAL DAY TO MINUTE,INTERVAL DAY (p) TO SECOND (q), INTERVAL DAY TO SECOND (q),INTERVAL DAY (p) TO SECOND, INTERVAL DAY TO SECOND,INTERVAL HOUR (p), INTERVAL HOUR,INTERVAL HOUR (p) TO MINUTE, INTERVAL HOUR TO MINUTE,INTERVAL HOUR (p) TO SECOND (q), INTERVAL HOUR TO SECOND (q),INTERVAL HOUR TO SECOND, INTERVAL MINUTE (p),INTERVAL MINUTE, INTERVAL MINUTE (p) TO SECOND (q),INTERVAL MINUTE TO SECOND (q), INTERVAL MINUTE (p) TO SECOND,INTERVAL MINUTE TO SECOND, INTERVAL SECOND (p, q), INTERVALSECOND (p), INTERVAL SECOND◦ если значение параметра p не указывается явно, по умолчанию принимается егозначение «2»◦ значением параметра q по умолчанию является «6»20.05.2016Доп.
главы баз данных. Лекция 170Типы данных SQL (34)Типы временных интервалов (4)Приведем только один пример литерала одной изразновидностей типа INTERVAL:◦ INTERVAL ’10:20’ MINUTE TO SECOND – временной интервалв 10 минут и 20 секунд.Над значениями темпоральных типов могут выполнятьсяарифметические операции, смысл которых определяетсяследующей таблицей:20.05.2016Доп. главы баз данных. Лекция 171Типы данных SQL (35)Булевский тип (1)При определении столбца булевского типауказывается просто спецификацияBOOLEAN◦ булевский тип состоит из трех значений: true,false и unknown◦ соответствующие литералы обозначаются TRUE,FALSE и UNKNOWNПоддерживается возможность построениябулевских выражений, которыевычисляются в трехзначной логике20.05.2016Доп. главы баз данных. Лекция 172Типы данных SQL (36)Булевский тип (2)Таблицы истинности основных логических операций показанына рисунке20.05.2016Доп.
главы баз данных. Лекция 173Типы данных SQL (37)Типы коллекций (1)Начиная с SQL:1999, в языке поддерживаетсявозможность использования типов данных,значения которых являются коллекциями значенийнекоторых других типов Обычно под термином коллекция понимается одноиз следующих образований: массив, список,множество и мультимножество В варианте SQL:1999, принятом в 1999 г., былиспецифицированы только типы массивов В стандарте SQL:2003 появилась спецификациятипа мультимножества20.05.2016Доп.
главы баз данных. Лекция 174Типы данных SQL (38)Типы коллекций (2)Любой возможный тип массива получается путем примененияконструктора типов ARRAYПри определении столбца, значения которого должныпринадлежать некоторому типу массива, используетсяконструкция dt ARRAY [ mc ], где◦ dt специфицирует некоторый допустимый в SQL тип данных, а◦ mc является литералом некоторого точного числового типа снулевой длиной шкалы и определяет максимальное числоэлементов в значении типа массива в терминологии SQL:1999 это значение называется максимальнойкардинальностью массиваВ стандарте SQL:1999 многомерные массивы и массивымассивов не поддерживалисьОднако в стандарте SQL:2003 это ограничение было снято, итеперь типом элементов любого типа коллекций может бытьлюбой допустимый в SQL тип данных, кроме самогоконструируемого типа коллекции20.05.2016Доп.
главы баз данных. Лекция 175Типы данных SQL (39)Типы коллекций (3)Элементам каждого значения типа массива соответствуют ихпорядковые номера, называемые индексамиЗначение индекса всегда должно принадлежать отрезку [1,mc]Значениями типа массива dt ARRAY [mc] являются всемассивы, состоящие из элементов типа dt, максимальноезначение индекса которых cs не превосходит значения mcПри сохранении в базе данных значения типа массивазанимает столько памяти, сколько требуется для сохраненияcs элементовОбеспечивается доступ к элементам массива по их индексам◦ в частности, можно объявить столбец типа INTEGER ARRAY [10] ипри вставке строки в соответствующую таблицу задать значениетолько пятого элемента массива◦ тогда в строку будет занесен массив из пяти элементов, причемпервые четыре элемента будут содержать неопределенноезначение (NULL)20.05.2016Доп.
главы баз данных. Лекция 176Типы данных SQL (40)Типы коллекций (4)Основными операциями надмассивами являются:◦ выборка значения элемента массива поего индексу,◦ изменение некоторого элемента массиваили массива целиком и◦ конкатенация (сцепление) двух массивов◦ кроме того, для любого значения типамассива можно узнать значение его cs20.05.2016Доп. главы баз данных. Лекция 177Типы данных SQL (41)Типы коллекций (5)При определении столбца таблицы типамультимножеств используетсяконструкция dt MULTISET, где◦ dt задает тип данных элементов конструируемоготипа мультимножествЗначениями типа мультимножеств являютсямультимножества, т.
е. неупорядоченныеколлекции элементов одного и того же типа,среди которых допускаются дубликаты◦ например, значениями типа INTEGER MULTISETявляются мультимножества, элементами которых— целые числа. Примером такого значения можетбыть мультимножество {12, 34, 12, 45, -64}20.05.2016Доп. главы баз данных. Лекция 178Типы данных SQL (42)Типы коллекций (6)В отличие от массива, мультимножество являетсянеограниченной коллекцией◦ при конструировании типа мультимножеств не указываетсяпредельная кардинальность значений этого типаОднако это не означает, что возможность вставкиэлементов в мультимножество действительно неограничена◦ стандарт всего лишь не требует явного объявления границыСитуация аналогична той, которая возникает приработе с таблицами, для которых в SQL необъявляется максимально допустимое число строк20.05.2016Доп.
главы баз данных. Лекция 179Типы данных SQL (43)Типы коллекций (7)Для типов мультимножеств поддерживаются операции:◦ преобразования типа значения-мультимножества к типу массивовили другому типу мультимножеств с совместимым типомэлементов (операция CAST),◦ удаления дубликатов из мультимножества (функция SET),◦ определения числа элементов в заданном мультимножестве(функция CARDINALITY),◦ выборки элемента мультимножества, содержащего в точностиодин элемент (функция ELEMENT)Кроме того, для мультимножеств обеспечиваются операции◦ объединения (MULTISET UNION),◦ пересечения (MULTISET INTERSECT) и◦ определения разности (MULTISET EXCEPT)Каждая из операций может выполняться в режиме ссохранением дубликатов (режим ALL) или с устранениемдубликатов (режим DISTINCT)20.05.2016Доп.
главы баз данных. Лекция 180Типы данных SQL (44)Типы коллекций (8)Расширенные в SQL:2003 возможности работы с типамиколлекций являются принципиально важнымиДаже при наличии определяемых пользователями типовданных и типов массивов SQL:1999 не предоставлял полныхвозможностей для преодоления исторически присущегореляционной модели данных вообще и SQL в частностиограничения «плоских таблиц»После появления конструктора типов мультимножеств иустранения ограничений на тип данных элементов коллекцииэто историческое ограничение полностью ликвидированоМультимножество, типом элементов которого являетсяанонимный строчный тип, представляет собой полный аналогтаблицыТем самым, в базе данных допускается произвольнаявложенность таблиц◦ возможности выбора структуры базы данных безгранично расширяются20.05.2016Доп.
главы баз данных. Лекция 181Типы данных SQL (45)Анонимные строчные типы (1)Анонимный строчный тип – это конструктортипов ROW, позволяющий производитьбезымянные типы строк (кортежей)Любой возможный строчный тип получается путемиспользования конструктора ROWПри определении столбца, значения которогодолжны принадлежать некоторому строчному типу,используется конструкция ROW (fld1, fld2, ѕ, fldn ),◦ где каждый элемент fldi, определяющий поле строчноготипа, задается в виде тройки fldname, fldtype, fldoptions◦ подэлемент fldname задает имя соответствующего полястрочного типа◦ подэлемент fldtype специфицирует тип данных этого поля.20.05.2016Доп.
главы баз данных. Лекция 182Типы данных SQL (46)Анонимные строчные типы (2)В качестве типа данных поля строчного типа можноиспользовать любой допустимый в SQL тип данных,включая типы коллекций, определяемыепользователями типы и другие строчные типыНеобязательный подэлемент fldoptions можетзадаваться для указания применяемого поумолчанию порядка сортировки, еслисоответствующий подэлемент fldtype указывает натип символьных строк, а также должен задаваться,если fldtype указывает на ссылочный типСтепенью строчного типа называется число егополей20.05.2016Доп. главы баз данных.
Лекция 183Типы данных SQL (47)Типы, определяемые пользователем (1)Индивидуальные типы (Distinct Types) Можно определить долговременно хранимый,именованный тип данных, опираясь наединственный предопределенный тип◦ например, можно определить индивидуальный тип данныхPRICE, опираясь на тип DECIMAL (5, 2)◦ тогда значения типа PRICE представляются точно так же,как значения типа DECIMAL (5, 2)Однако в SQL:1999 индивидуальный тип ненаследует от своего опорного типа набор операцийнад значениями20.05.2016Доп. главы баз данных. Лекция 184Типы данных SQL (48)Типы, определяемые пользователем (2)◦ Например, чтобы сложить два значения типа PRICEтребуется явно сообщить системе, что с этими значенияминужно обращаться как со значениями типа DECIMAL (5, 2)◦ Другая возможность состоит в явном определении методов,функций и процедур, связанных с данным индивидуальнымтипом нет наследованияПохоже, что в будущих версиях стандарта появятсяи другие, более удобные возможности20.05.2016Доп.