Содержание
-
ПРОГРАММИРОВАНИЕ II
Модели данных и базы данных
-
План курса
Требования к моделям данных и средствам их хранения и обработки. Обзор ХМL. Реляционная модель данных. SQL. СУБД/программный интерфейс.
-
Литература
Гарсиа-Молина Г., Ульман Дж.Д., Уидом Д. Системы баз данных. Полный курс. – М.: Издательский дом “Вильямс”. 2003. Грабер М. Введение в SQL. – M.: Лори, 1996. Дейт К. Введение в системы баз данных. – М.: Наука, 1980. Имеется 6-е и 7-е издание, – М.: Издательский дом “Вильямс”, 1999 и 2001. Технологии XML. World Wide Web Consortium Home Page. http://www.w3.org.
-
Требования
Долговременное (persistent) хранение больших объемов данных (логическая и физическая организация). Данные могут быть типизированы и структурированы. Необходимо иметь средства для формального описания и программного использования этой информации о данных (модель/схема данных). Эффективное манипулирование данными (добавление, модификация, выбор, удаление), сохраняющее корректность, в том числе, в конкурентной среде исполнения. Реализуется СУБД (DBMS). Программный интерфейс доступа к данным, в том числе, конкурентные средства доступа. Реализуется прикладными программными интерфейсами (API)для разных языков программирования.
-
Транзакции. Свойство ACID
Транзакция (transaction, TR) —группа последовательных операций (добавление, модификация, выбор, удаление), которая представляет собой логическую единицу работы с данными. Атомарность (аtomicity)– TR либо выполняется полностью, либо не выполняется совсем. Согласованность (consistency) – результат выполнения TR не нарушает ограничений, налагаемых моделью данных. Изолированность (isolation) – TR выполняется так, как будто другие TRs при этом не выполняются. В частности, другие исполняемые в этот же промежуток времени TRs не видят промежуточных результатов этой TR. Устойчивость (durability) – результат выполненной TR не должен быть утрачен ни при каких обстоятельствах (включая физические причины, например, отключение электричества).
-
Пример: файловая система
Умеет хранить терабайты двоичных данных. Информация о типе файла (смысле хранимых в нем данных) скудна. Связи между элементами данных не поддерживаются. В основном управлением занимается менеджер файловой системы ОС. Транзакционность по минимуму. API – текстовые/бинарные операторы ввода/вывода и/или библиотечные функции языков программирования. Параллельная работа возможна в ограниченном виде.
-
eXtensibleMarkupLanguage
Разработан World Wide Web Consortium (W3C). Версия 1.0 спецификации – 1998 год. Вторая редакция версии 1.1 спецификации – 2006 год. XML – упрощенная версия SGML. Стандарт для разработки языков разметки: HTML/xhtml – язык разметки для гипертекста; MathML – язык разметки математических формул; CML – язык описания химических соединений; TTML – язык описания данных для составления расписаний... Определяет стандартные механизмы обработки. Сопутствующие стандарты и технологии: DTD/XSchema (модель данных), XPath (адресация элементов документа), XSL/XSLT (преобразование xml-документов), XQuery(организация запросов к документам), DOM (объектное представление документа и доступ к нему)...
-
XML – основные понятия
Элементы. Задают структуру документа. Документ обязан иметь единственный корневой элемент. Элемент может не иметь атрибутов и/или вложенных элементов. Атрибуты. Связаны с элементами и описывают их свойства. Могут иметь умолчательные значения. Сущности. Существуют предопределенные, могут определяться вне документа. Символьные данные. Произвольный текст. Модель/схема данных. Инструкции обработки.
-
Пример XML-данных
Я родилась 12 февраля в городе Кимры. < > & " ' ё -
DTD –I
DTD - Document Type Definition (определение типов документа). Используется проверяющим XML-процессором (validating processor)для проверки структуры документа, множества значений атрибутов и определения сущностей. Документ может как содержать DTD в самом себе, так и ссылаться на внешний файл:./University.dtd”>…
-
DTD – II
Элемент: - любое корректное содержимое - элемент не может иметь вложенных элементов- элемент может содержать только текст- любая последовательность (в том числе и пустая) из данных элементовв любом порядке - последовательность элементов и групп элементов в заданном порядке Атрибут: Сущности:
-
Пример DTD
-
XPath – основные понятия
Средства описания подмножеств элементов/атрибутов/…XML-документа, удовлетворяющих заданным условиям. Рассматривая XML-документ как дерево, состоящее из узлов разного типа, XPath оперирует понятием пути и шага, который в свою очередь состоит из точки отсчета, теста узла и предиката, проверяющего свойства узла./University//parent::Group[position()=1 or @LastName=‘Ли’] Имеются библиотечные функции, манипулирующие с числами, строками, ....//Student[local-name()!=‘Student’]
-
XPath:описание пути
. – описание пути, совпадающее собственно с текущей вершиной (контекстная вершина). .. – описание пути к отцу текущей вершины. / – описание пути до детей текущей вершины. // – путь до всех наследников текущей вершины. Примеры: /* или/University –корневой элемент документа. //* –все элементы документа. /University/Lectures//GroupItem ./../* –все братья текущего элемента и он сам.
-
XPath:описание точки отсчета
child– ребенок контекстной вершины. descendant– все наследники контекстной вершины. parent – отец контекстной вершины (если она существует). ancestor– все предшественники контекстной вершины. following-sibling– все следующие братья контекстной вершины. preceding-sibling– все предшествующие братья контекстной вершины. following– все следующие братья и их наследники. preceding– все предшествующие братья и их наследники. attribute– атрибуты контекстной вершины. self– собственно сама контекстная вершина. descendant-or-self– ... ancestor-or-self– ... ЗАМЕЧАНИЕ: ancestor, descendant, following, precedingиself– являются разбиением документа, т.е. множества, определяемые ими, не пересекаются, а их объединение дает весь документ.
-
Примеры описаний точек отсчета
. –» self::node() .. –» parent::node() // –» /descendant-or-self::node()/ ../title –» parent::node()/child::title .//author–» self::node()/descendant-or-self::node()/child::author chapter/section –» child::chapter/child::section //@ID–» /descendant-or-self::node()/attribute::ID following-sibling::*[attribute::Name=‘Петя’]–»following-sibling::node()[@Name=‘Петя’]
-
Примеры описаний предикатов
//section[paragraph] //section[not(@title)] ./chapter[3]/section[position()=2] .//section[position()=1 or position()=last()] //*[local-name()=‘Student’ and @FirstName!=‘Уи’] ./chapter[count(section/paragraph)!=0] //paragraph[id(‘P2345’)] //author[sum(book/@price) > 1000] //Student[starts-with(@LastName, ‘Я')]
-
DOM – Document Object ModelLevels 1-3, последняя версия 2004
Node Document Element Attr … NodeList NamedNodeMap DOMString DOMError DOMException …
-
Node интерфейс
interface Node { // NodeType const unsigned short ELEMENT_NODE = 1; const unsigned short ATTRIBUTE_NODE = 2; ... const unsigned short COMMENT_NODE = 8; const unsigned short DOCUMENT_NODE = 9; ... readonly attribute DOMString nodeName; attribute DOMString nodeValue; readonly attribute unsigned short nodeType; readonly attribute Node parentNode; readonly attribute NodeList childNodes; readonly attribute Node firstChild; readonly attribute Node lastChild; readonly attribute Node previousSibling; readonly attribute Node nextSibling; readonly attribute NamedNodeMap attributes; readonly attribute Document ownerDocument; Node insertBefore(in Node newChild, in Node refChild); Node replaceChild(in Node newChild, in Node oldChild); Node removeChild(in Node oldChild); Node appendChild(in Node newChild); boolean hasChildNodes(); Node cloneNode(in boolean deep); ... };
-
NodeList и NamedNodeMap интерфейсы
interface NodeList { Node item(in unsigned long index); readonly attribute unsigned long length; }; interface NamedNodeMap { Node getNamedItem(in DOMString name); Node setNamedItem(in Node arg); Node removeNamedItem(in DOMString name); Node item(in unsigned long index); readonly attribute unsigned long length; ... };
-
Document интерфейс
interface Document : Node {...readonly attribute Element documentElement; Element createElement(in DOMString tagName); Comment createComment(in DOMString data); Attr createAttribute(in DOMString name); EntityReference createEntityReference(in DOMString name);... NodeList getElementsByTagName(in DOMString tagname); Element getElementById(in DOMString elementId); readonly attribute DOMString xmlEncoding; attribute boolean xmlStandalone; attribute DOMString xmlVersion; attribute DOMString documentURI;... };
-
Element и Attr интерфейс
interface Element : Node { readonly attribute DOMString tagName; DOMString getAttribute(in DOMString name); void setAttribute(in DOMString name, in DOMString value); void removeAttribute(in DOMString name); ... Attr getAttributeNode(in DOMString name); Attr setAttributeNode(in Attr newAttr); Attr removeAttributeNode(in Attr oldAttr); ... void setIdAttribute(in DOMString name, in boolean isId); void setIdAttributeNode(in Attr idAttr, in boolean isId); ... boolean hasAttribute(in DOMString name); NodeList getElementsByTagName(in DOMString name); ... }; interface Attr : Node { readonly attribute DOMString name; readonly attribute boolean specified; attribute DOMString value; readonly attribute Element ownerElement; readonly attribute TypeInfo schemaTypeInfo; readonly attribute boolean isId; };
-
DOMError интерфейс
interface DOMError { // ErrorSeverity const unsigned short SEVERITY_WARNING = 1; const unsigned short SEVERITY_ERROR = 2; const unsigned short SEVERITY_FATAL_ERROR = 3; readonly attribute unsigned short severity; readonly attribute DOMString message; readonly attribute DOMString type; readonly attribute DOMObject relatedException; readonly attribute DOMObject relatedData; readonly attribute DOMLocator location; };
-
Пример: C++ (VS v6.0)
#include #import named_guids using namespace std; using namespace MSXML; void main() { ::CoInitialize(NULL); IXMLDOMDocumentPtr doc; doc.CreateInstance(CLSID_DOMDocument); doc->loadXML("dddeee"); coutGetxml(); IXMLDOMElementPtr el=doc->selectSingleNode("//b"); coutGetxml(); IXMLDOMNodeListPtr lst=doc->documentElement->selectNodes("//*"); coutlengthdocumentElement->firstChild; while (n) { coutGetnodeName()nextSibling; } }
-
EntityRelationship-модель данныхPeter Chen, 1976
ER-модель – семантическая модель данных, т.е. модель данных, главным предназначением которой удобное и адекватное моделирование смысла моделируемой предметной области (высокоуровневое моделирование). В общем случае она не описывает способов хранения данных и средств манипуляции ими. Разработаны формальные методы преобразования ER-моделей в другие модели данных. Преобразования поддерживаются программными средствами.
-
Элементы ER-модели
Cущности – классы элементов моделируемой семантической области. Атрибуты – индивидуальные характерис- тики сущностей. Отношения – описания взаимодействий моделируемых сущностей. Отношение общее-частное Students FirstName Member-of isa
-
Пример ER-модели
Gender Autobio Students FirstName Member-of LastName Groups Name Lectures Title Lecturer Lesson-for FirstName LastName Gender Autobio Students Name Groups Title Lecturer Lectures Consists-of Belongs-to Is-Read-for Visits >
-
Типы связей в ER-моделях
Если каждый член множества А посредством связи R может быть связан не более чем с одним членом множества B, то R является связью типа «многие к одному»(many-one relationship). Эта же связь, рассматриваемая в обратном направлении, имеет тип «один ко многим». Если связь R в обоих направлениях (т.е. от A к B и от B к A ) является связью «многие к одному», то это связь имеет тип «один к одному» (one-one relationship). Если связь R ни в одном из направлений не является связью «многие к одному», то эта связь имеет тип «многие ко многим» (many-many relationship).
-
Связи и роли
Если одна и та же сущность используется несколько раз в контексте одной и той же связи, то говорят, что разные концы связи описывают разные роли, в которых выступает данная сущность в этом случае. Movies Sequel-of Prequel-of Sequel Original Prequel Original
-
Многосторонние связии атрибуты связей
Actors Movies Contracts Studios Salary Name Title Address Year Length Name Address President
-
Преобразование многосторонних связей в бинарные
Actors Name Address Studios Name Address President Movies Title Year Length Salary Contracts Actor-of Movie-of Studio-of-Actor Producing-Studio Соединяющее множество сущностей (connecting entity set)
-
Подклассы в ER-модели
Подклассы (subclasses)служат для выделения в базовых классах (superclasses) сущностей, обладающих собственными атрибутами и/или связями. Используется для моделирования отношения «общее-частное» Actors Name Address Movies Title Year Length Cartoons Voices isa Peplum isa Technique
-
Моделирование ограничений
Ключ (key) – атрибут или подмножество атрибутов, уникальным образом определяющее экземпляр сущности среди множества других. Ограничение единственности (single-value constraint) – атрибут(ы)/связ(ь/и) в некотором контексте должны иметь единственное значение или не иметь его вообще. Ссылочная целостность (referential integrity constraint) –тот, на кого кто-то ссылается, должен обязательно существовать. Ограничение области значений (domain constraint) – значение атрибута принадлежит определенной области значений. Ограничение общего вида (general constraint).
-
Ограничение области значений
Типы значений атрибутов (логические, диапазоны чисел, перечисления, длины строк) должны адекватно представлять моделируемую предметную область. Вводимые ограничения должны нести семантическую нагрузку. ER-модель не имеет специальных средств представления этих ограничений. Допускаются произвольные сопроводительные тексты.
-
Ограничение единственности
Некоторый атрибут сущностиможет обладать не более чем единственным значением. Если допускается отсутствие значения атрибута, то появляется необходимость представлять этот факт каким-либо образом (выделенное «нулевое» значение). Наоборот, если некоторый атрибут обязан всегда иметь осмысленное значение (например, атрибут, входящий в ключ), то «нулевое» значение для него недопустимо. Связь R типа many-one между сущностями E1 и E2демонстрирует ограничение уникальности, указывающее, что для любого экземпляра E1, если эта связь существует, соответствует не более одного экземпляра E2.
-
Ограничение ссылочной целостности
Это ограничение (всюдуопределенное – total) требует, чтобы значение, выступающее в некоторой роли, имело в точности одно значение. Моделирует ситуацию отсутствия «висячих» (т.е. не определенных в данном контексте) ссылок. Если добавляется экземпляр A некоторой сущности, который обязан ссылаться на что-то (экземпляр B той же самой или другой сущности), то это что-то обязано уже существовать. Экземпляр B не может быть удален, пока не удалены все ссылающиеся на него экземпляры. Если удаление B обязательно, то должны быть удалены и все ссылающиеся на него экземпляры. Movies Studios Owns
-
Ограничения общего вида
Единственность Множественность Обязательность Общего вида Groups Name Lectures Title Lecturer Lesson-for 10 представляется на ER-диаграмме
-
Ключи в ER-моделях
Каждая сущность должна обладать ключом. Сущность без ключа вызывает вопросы о правильности модели предметной области. Ключ может состоять из нескольких атрибутов. Сущность может обладать несколькими ключами. Тем не менее целесообразно выделять один – первичный ключ (primary key) и далее полагать, что эта сущность обладает единственным ключом. Если некоторая сущность участвует в иерархии связей isa, необходимо гарантировать, чтобы корневая сущность обладала всеми атрибутами, необходимыми для формирования ключа, и ключ для каждой сущности из иерархии может быть определен на основе «корневого» ключа.
-
Пример: ключи
Students FirstName Member-of LastName Groups Name Lectures Title Lecturer Lesson-for Gender Autobio Year
-
Слабые сущности
В предметной области выделяется некоторое содержательное понятие – сущность с набором атрибутов. Однако оказывается, что на основе только этих атрибутов нельзя сформировать ключ для этой сущности. А с использованием атрибутов другой сущности (называемой владельцем) можно. Такая «невыразительная» сущность называется слабой. Ограничения: Между слабой сущностью и сущностью, используемой для ключа, должно быть отношение many-one. Это отношение должно быть обязательным (total). Пример: связывающее множество сущностей обычно не имеет атрибутов. Их ключи определяются на основе сущностей, которые они связывают.
-
Выбор ключевых атрибутов для слабых сущностей
Подмножества собственных атрибутов сущности E. Ключевые атрибуты сущностей, которые могут быть достигнуты посредством связей, соединяющих E с другими сущностями; такие связи называются поддерживающими (supporting relationships) для E. Они должны удовлетворять следующим условиям (ведут к сущности F): это бинарная связь типа many-one, ведущая от E к F и реализующая ограничения ссылочной целостности; атрибуты F, используемые для построения ключа E, должны быть ключом для F; если F само по себе является слабой сущностью, то для него аналогично отыскиваются его поддерживающее множество связей. От E к F может вести несколько различных поддерживающих связей и каждая может поставлять свою копию ключевых атрибутов F. Таким образом некоторый экземпляр E может иметь ключ, порожденный разными экземплярами F.
-
Пример: слабые сущности
Биологический вид именуется парой – именем рода, которому принадлежит вид, и собственно именем вида. Пример: Homo erectus, Homo habilis, Homo sapiens – названия видов рода «человек» (сответственно человек прямоходящий, человек умелый, человек разумный).Имя вида может быть неуникальным. Species Genera Belongs-to Name Name
-
Реляционная модель данных
D1, D2, …, Dn – множества (атомарных) значений (domains). R ⊆D1× D2 × … ×Dn – отношение (relation), подмножество произведениядоменов. Кортеж – отдельный элемент подмножества, определяемого отношением R. Схема данных: Students(FirstName,LastName,Gender,Age)Groups(Number,Year,Speciality)MemberOf(FirstName,LastName,Number,Year)
-
Преобразование ER-модели в реляционную.«Простая» часть
Students FirstName Member-of LastName Groups Year Lectures Title Lecturer Lesson-for Gender Autobio Speciality Преобразовать каждую «простую» сущность (т.е. которые не являются слабыми и не участвуют в иерархии isa) в отношение (таблицу) с тем же набором атрибутов. Преобразовать каждую «простую» связь (не-isa) в отношение, атрибутами которого являются ключи сущностей, соединяемых этой связью.Добавить собственные атрибуты связи в это отношение Students(FirstName,LastName,Gender,Autobio) Groups(Name,Year,Speciality) Lectures(Title,Lecturer) MemberOf(FirstName,LastName,Name,Year) LessonFor(Name,Year,Tite) Name
-
Преобразование ER-модели в реляционную.Объединение отношений
Имеется сущность E, соединенная связью R типа many-one с сущностью F внаправленииот E к F. Можно выполнить объединениеотношений, соответствующих E и R. Новое отношение получаетсяобъединением следующих атрибутов: все атрибуты E; ключевые атрибуты F; собственные атрибуты связи R. Если некоторый экземпляр E не имеет связи с экземплярами R, то атрибуты из пунктов 2 и 3 принимают значение NULL. Основное соображение в пользу преобразования – экономия памяти и эффективность манипулирования.
-
Пример:объединение отношений
Students(FirstName,LastName,Gender, Autobio,Name,Year) Groups(Name,Year,Speciality) MemberOf(FirstName,LastName,Name,Year)
-
Преобразование ER-модели в реляционную.Слабые сущности
Если W – слабая сущность, отношение для W строится следующим образом: включаются все атрибуты W; включаются все атрибуты поддерживающих связей для W; включаются все ключевые атрибуты каждого множества сущностей, соединенных с W поддерживающими связями. Любые поддерживающие связи для W игнорируются.
-
Пример: преобразование слабых сущностей
Genera(Name) Species(Name, NameOfGenera) Species Genera Belongs-to Name Name
-
Преобразование ER-модели в реляционнуюISA в стиле «сущность-связь»
Для каждой сущности в иерархии создается отношение. Если сущность не является корневой, соответствующее ей отношение, помимо собственных атрибутов, должно содержать ключевые атрибуты корневого множества (они также участвуют в связывании этой сущности с другими) Actors Name Address Movies Title Year Length Cartoons Voices isa Peplum isa Epoque Movies(Title,Year,Length) Actors(Name,Address) Cartoons(Title,Year) Peplum(Title,Year,Epoque) Voices(Title,Year,ActorName)
-
Преобразование ER-модели в реляционнуюISA в объектно-ориентированном стиле
Метод состоит в перечислении всевозможных поддеревьев ER-диаграммы, включающих корневую сущность, на основе которых создаются отношения, представляющих сущности. Они обладают всеми атрибутами поддерева. Movies(Title,Year,Length) MoviesCartoons(Title,Year,Length) MoviesPeplum(Title,Year,Length,Epoque) MoviesCartoonsPeplum(Title,Year,Length,Epoque) Actors(Name,Address) Voices(Title,Year,ActorName)
-
Преобразование ER-модели в реляционнуюISA в NULL-стиле
Все сущности иерархии объединяются водноотношение. При этом если для некоторогокортежа отношения (экземпляра некоторойсущности) значение какого-то атрибутане определено, оно представляется NULL. Movies(Title,Year,Length,Epoque) Actors(Name,Address) Voices(Title,Year,ActorName)
-
Преобразования отношений в реляционной модели
Функциональная зависимость между атрибутами отношения: если два кортежа отношения совпадают в атрибутах A1,A2,…,An, то они должны совпадать и в атрибутах В1,В2, …,Вm(функционально их обуславливают A1,A2, …,An→В1,В2,…,Вm). Movies(Title,Year,Length,StudioName,Actor) Title Year →Length Title Year →StudioName ? Title Year →Actor Множество функциональных зависимостей S следует из множества ФЗ T, если каждый экземпляр отношения, удовлетворяющий всем ФЗ T, также удовлетворяет всем ФЗ S. Множества функциональных зависимостей S и T являются эквивалентными, если они следуют одно из другого и наоборот.
-
Замыкание множества атрибутов
Замыканием (closure) {Ai}+ множестваатрибутов {Ai} обусловленным множеством функциональных зависимостей S называется множество атрибутов {Bi}, такое что ФЗ A→В следует из ФЗ S. Алгоритм построения замыкания: Инициализировать переменную Xмножеством {Ai}. Если существует ФЗ B1,…,Bn→C из S, такая, что {B1,…,Bn}⊆X, но C∉X, то добавить C в X. Выполнять шаг 2, пока множество X не стабилизируется. Пример: Отношение имеет множество атрибутов A, B, C, D, E,Fи удовлетворяет ФЗA,В→C, В,C→A,D, D→E, C,F→B. Замыкание {A,B}+={A,B,C,D,E} Свойство: ФЗ A1,A2, …,An→В1,В2, …,Вmследует из ФЗ S, тогда и только тогда В1,В2, …,Вm ∉{A1,A2, …,An}обусловленным ФЗ S.
-
Ключи и суперключи отношений
Множество атрибутов {Ai} называется ключом отношения R, если: эти атрибуты функционально обуславливают все остальные атрибуты; совпадение двух кортежей отношения R в этих атрибутах невозможно; ни одно из подмножеств {Ai} не обуславливает функционально все остальные атрибуты отношения R. Суперключ отношения – всякое множество атрибутов, содержащее в качестве подмножества ключ отношения. Чтобы определить, формирует ли множество атрибутов {Ai} ключ отношения, надо проверить совпадает ли {Ai}+ относительно известного Вам множества ФЗ со всем множеством атрибутов отношения, а любое подмножество {Ai}+ – нет.
-
Аномалии отношений
Избыточность (redundancy) данных. Аномалии изменения (update anomalies). Аномалии удаления (delete anomalies).
-
Декомпозиция отношений
Отношения S(s1,…,sn)иT(t1,…,tm)являются декомпозицией отношения R(r1,…,rk), если: {r1,…,rk}={s1,…,sn}⋃{t1,…,tm}. кортежи отношений SиTявляются проекциями всех кортежей отношения Rна их множества атрибутов (на {s1,…,sn}и {t1,…,tm}соответственно).
-
Нормальная форма Бойса-Кодда
Отношение Rудовлетворяет BCNF тогда и только тогда, когда для R существует нетривиальная ФЗ A1,A2, …,An→В1,В2, …,Вm (т.е. ∃ Вk∉ {A1,A2, …,An}) такая, что множество атрибутов {A1,A2, …,An} является суперключом для R. Отношение, удовлетворяющее BCNF, не содержит аномалий. Отношение, содержащее только два атрибута, удовлетворяет BCNF. Пример: {Title,Year,ActorName} – ключ исходного отношения. Однако это отношение не удовлетворяет BCNF, т.к. содержит ФЗ Title,Year→Length,FilmType,StudioName,у которой левая часть не является суперключом. Первое отношение декомпозиции, имеющее в качестве ключа {Title,Year}, удовлетворяетBCNF.
-
Пример: нормализованные отношения
Actors NormMovies StarsIn
-
Третья нормальная форма
BCNF иногда является слишком строгим условием и требует декомпозиции даже в тех случаях, когда наличие некоторых «ненормализованных» ФЗ целесообразно. Отношение Rудовлетворяет 3NF, если всякий раз, когда для R существует нетривиальная ФЗ A1,A2, …,An→В,множество атрибутов {A1,A2, …,An} является суперключом для R либо В является членом некоторого ключа. Если отношение Rудовлетворяет 3NF, но не удовлетворяет BCNF, существует некоторая вероятность, что отношение будет содержать избыточные данные.
-
Реляционная алгебра
Переменные, соответствующие неограниченным отношениям, и константы, являющиеся конечными отношениями. Операции: теоретико-множественные операции: объединение (union), пересечение (intersection) и разность (difference); операции удаления частей отношения: выбор (selection) и проекции (projection); операции сочетания кортежей отношений: декартово произведение (Cartesian product) и различные виды соединений (joins); операции переименования: атрибутов и отношений. Агрегирование, группировка и сортировка данных
-
Пример выбора и проекции
πActorName(σYear>1976(Movies)) σYear>1976(πTitle,Year(Movies))
-
Пример декартова произведенияи естественного соединения
S T S×T –декартово произведение S⋈T – естественное соединение (natural join) S⋈T = πS.A,S.B,T.C,T.D(σS.B=T.B(S×T))
-
Другие виды соединений
Тэта-соединение (Θ-join): S⋈ΘT =σΘ(S×T). Внешние соединения (outerjoins, left/right): Вненшние тэта-соединения. S T S⋈∘T S⋈T S⋈ºLT S⋈ºRT
-
SQL – Structured Query Languageпервая версия – конец 1970-х (IBM) текущий стандарт – 1999 (ANSI)
Создание/удаление таблиц (create/drop table) Изменение таблиц (alter table) Добавление/удаление данных (insert into/ delete from) Изменение данных (update) Выборка данных (select-from-where) Специальные возможности.
-
Создание/удаление/изменение таблиц
Типы данных SQL: INT/INTEGER, SHORTINT CHAR(n), VARCHAR(n) BOOLEAN FLOAT/REAL, DOUBLE PECISION, DECIMAL(n,d)/NUMERIC DATE, TIME, TIMESTAMP BLOB/MEMO CREATE TABLE Movies ( Title CHAR(200), Year INTEGER, Length INTEGER, FilmType CHAR(5) DEFAULT ’color’, StudioName VARCHAR(100) DEFAULT ’unknown’, ActorName VARCHAR(1000), Birthdate DATE DEFAULT DATE ’0000-00-00’, Gender BOOLEAN, PRIMARY KEY (Title, Year) ); DROP TABLE Movies; ALTER TABLE Movies ADD ActorEmail VARCHAR(512) DEFAULT ’admin@nsu.ru’; ALTER TABLE Movies DROP Gender;
-
Добавление/удаление/обновление данных
INSERT INTO Movies(Title,Year,ActorName) VALUES(’Titanic’,1997,’L. Di Caprio’); INSERT INTO Movies VALUES(’Titanic’,1997,240,’color’,’Universal’, ’K. Winslet’,’1972-03-08’,true); DELETE FROM Movies WHERE Year
-
Выборка данных I
Дальнейшая обработка пользователем. Использование в проверке условий. Использование при добавлении данных. Создание временных/виртуальных таблиц (например, денормализация отношений). SELECT * FROM Movies; SELECT Title, ActorName FROM Movies; WHERE Year>1970; π Title,ActorName(σYear>1970(Movies)) INSERT INTO Actors(Name) SELECT DISTINCT ActorName FROM Movies WHERE ActorName NOT IN (SELECT Name FROM Actors);
-
Выборка данных II
Movies(Title,Year,Length,FilmType,Studio) Actors(Name,Address,Gender,Birthdate,Photo) Studios(Name,Address) StarsIn(Title,Year,Name) SELECT DISTINCT Movies.Title, Std.Name AS StudioName, A.Name AS ActorName FROM Movies, Studios Std, Actors A, StarsIn S, StarsIn SS WHERE Movies.Title=S.Title AND Movies.Year=S.Year AND A.Name=S.Name AND Movies.Studio=Std.Name AND NOT (S.Name=SS.Name AND (S.TitleSS.Title OR S.YearSS.Year)) AND Std.Address NOT LIKE ’%USA’ ORDER BY Movies.Title, Std.Name ASC, A.Name DESC;
-
Выборка данных III
SELECT Address SELECT Address FROM Studios, Movies FROM Studios WHERE Name=Studio WHERE Name= AND Title=’Indiana Jones’; (SELECT Studio FROM Movies WHERE Title= ’Indiana Jones’); EXISTS (SELECT …) / NOT EXISTS (SELECT …) IN (SELECT …) / NOT IN (SELECT …) С операциями сравнения =, , , =применяется: X > ALL (SELECT …) X > ANY (SELECT …)
-
Выборка данных IV
SELECT Address FROM Studios, (SELECT Studio FROM Movies WHERE Title=’Indiana Jones’) Indy WHERE Name=Indy.Studio; SELECT NormMovies.*,StarsInMovies.Name,StarsInMovies.Photo, FROM NormMovies, (SELECT S.Title, S.Year, A.Name, A.Photo FROM StarsIn S, Actors A WHERE S.Name=A.Name) StarsInMovies WHERE NormMovies.Title=StarsInMovies.Title AND NormMovies.Year =StarsInMovies.Year;
-
Значения NULLи UNKNOWN
NULLиспользуется, когда: Значение не является известным на данный момент, Значение не является применимым в данном контексте, Значение закрыто для общего доступа. NULLне является константой и не может быть явно использован в выражениях. Для проверки, равно ли ли значение NULL, используется специальный предикаты SQL: IS NULLи IS NOT NULL (например, ActorPhoto IS NOT NULL). Если NULLвстречается в арифметических выражениях, то результатом будет NULL. В логических – UNKNOWN. Логика SQL трехзначная: FALSE (0), TRUE (1), UNKNOWN (½). Интерпретация логических связок: AND – минимум, OR– максимум, NOT – дополнение до единицы.
-
Операторы агрегирования
SUM, AVG, MIN, MAX – операторы над числовыми атрибутами (сумма, среднее, минимум, максимум). COUNT – количество записей, которые получены из таблиц, указанных в предложенииFROM, и удовлетворяют условию, указанному в предложении WHERE. COUNT(DISTINCT Attr)подсчитывает записи, различающиеся в атрибуте Attr. Предложение GROUP BY позволяет получить группы, в которых значения атрибутов из одинаковы, и применить операторы агрегирования в рамках групп. Условие на записи в группе указывается с помощью предложения HAVING.SELECT Studio, SUM(Length)FROM MoviesWHERE FilmType=‘bw’GROUP BY Studio;HAVING Max(Year)
-
Соединения в SQL
T1 CROSS JOIN T2– декартово произведение таблиц. T1 NATURAL JOIN T2– естественное соединение таблиц. T1 JOIN T2ON - тета-соединение таблиц. T1 NATURAL FULL OUTER JOIN T2,T1 NATURAL LEFT OUTER JOIN T2,T1 NATURAL RIGHT OUTER JOIN T2 – внешние соединения. T1 FULL OUTER JOIN T2ON,T1LEFT OUTER JOIN T2ON,T1 RIGHT OUTER JOIN T2ON – внешние тета-соединения. Первые три вида соединений можно выразить с помощью SELECT-FROM-WHERE.
-
Описание схемных ограничений – ключи
Объявление ключей с помощью UNIQUE может быть несколько; атрибуты, входящие в такой ключ, могут иметь значениеNULL. Объявление внешних ключей:CREATE TABLE NormMovies ( CREATE TABLE Actors ( Title CHAR(200), Name CHAR(1000) PRIMARY KEY, Year INTEGER, ... ... ); PRIMARY KEY (Title, Year) ); CREATE TABLE StarsIn ( Title CHAR(200), Year INTEGER, Name CHAR(1000) REFERENCES Actors(Name), FOREIGN KEY (Title,Year) REFERENCES NormMoveis(Title,Year), PRIMARY KEY (Title,Year,Name) ); Стратегии добавления записей, содержащих внешние ключи.
-
Пример: C++ (VS v6.0)
CDatabase db;CRecordset rs(&db); db.Open(NULL); db.ExecuteSQL("DROP TABLE myTable"); db.ExecuteSQL("CREATE TABLE myTable (myID INT PRIMARY KEY, myNum INT, myName VARCHAR(20))"); db.ExecuteSQL("INSERT INTO Tbl1 (Name) VALUES ('AAA')"); db.ExecuteSQL("UPDATE Tbl1 SET Tbl1.Number=Tbl1.Number+1 WHERE Tbl1.ID>Tbl1.Number"); db.ExecuteSQL("DELETE FROM Tbl1 WHERE Tbl1.Number=Tbl1.ID"); if (rs.Open(CRecordset::forwardOnly,"SELECT t1.*,(t1.Number+t2.Number) as SUM FROM Tbl1 t1, Tbl1 t2 WHERE t1.Number+t2.Number>t1.ID",CRecordset::none)) { cout
Нет комментариев для данной презентации
Помогите другим пользователям — будьте первым, кто поделится своим мнением об этой презентации.