1626434760-4c9f92f9ed5188f8fc024fed893742bb (844133), страница 15
Текст из файла (страница 15)
Такимобразом, атрибут Дата_Окончания транзитивно зависит отатрибута Номер_Сл.15Проектирование реляционных баз данныхОтношение СЛУЖАЩИЙ приводитсярасщепления на два отношениякНФ-3путемегоСЛУЖАЩИЙ (Номер Сл, Имя_Сл, Зарплата, Номер_Проекта),ПРОЕКТ (Номер Проекта, Дата_Окончания).СЛУЖАЩИЙПРОЕКТНомер СлНомер ПроектаИмя_СлДата_ОкончанияЗарплатаНомер_Проекта16Проектирование реляционных баз данныхОтношение СЛУЖАЩИЙ в примере 1 имело следующиенедостатки:1) до момента привлечения хотя бы одного сотрудника впроект дату окончания проекта некуда было записать;2) если бы все сотрудники прекратили работу над проектом ион был бы приостановлен до привлечения новыхсотрудников, в БД были бы уничтожены все кортежи ипропала бы дата окончания проекта;3) изменение даты окончания проекта потребовало быизменений в нескольких кортежах.Отношения в НФ-3 лишены таких недостатков, так как не содержаттранзитивных и неполных зависимостей.17Проектирование реляционных баз данных4.
Схема нормализацииНормализация отношений базы данных состоит из трех основныхэтапов:1) переход от произвольных структур данных(ненормализованной формы) к двумерным отношениям(приведение к НФ-1);2) устранение неполных зависимостей (приведение к НФ-2);3) устранение транзитивных зависимостей (приведение к НФ-3).18Схема нормализацииПриведение к НФ-2:AB⇒CAABDCDПриведение к НФ-3:ABCABBC⇒19Проектирование реляционных баз данныхВ определении взаимозависимости данных у пользователя имеетсянекоторая свобода.
Можно выбирать разные схемы отношенийи разные ключи.Однако, рекомендуется выбирать такие атрибуты и отношения,которые наиболее устойчивы к изменениям и пополнениямБД.При выборе первичного ключа надо учитывать, что при изменениибазы данных атрибуты, составляющие первичный ключ, могутперестать быть таковыми.Например, если в качестве первичного ключа отношенияСЛУЖАЩИЙ выбрать атрибут Имя_Сл, то нужно быть готовымк тому, что при появлении в БД однофамильцев он уже не будетпервичным ключом.20Язык реляционных баз данных SQLЯзык SQL (Structured Query Language) появился в середине 70-хгодов и был разработан в рамках экспериментальной реляционнойСУБД System R.В основу SQL положена комбинация реляционного исчислениякортежей и реляционной алгебры. При этом возможности SQL шире,чем у этих средств.SQL в том или ином варианте присутствует практически во всехкоммерческих СУБД.Существует несколько стандартов языка, но все они во многомсводятся в основном к аккуратной технической обработке идей SQL,впервые появившегося в системе System R.1Язык реляционных баз данных SQLПервоначально SQL был ориентирован главным образом на удобнуюи понятную пользователю формулировку запросов.
Позже в негопомимо операторов формулирования запросов были включены идругие средства, делающие его полным языком БД, такие как:• определение схемы БД и манипулирование ею;• определение ограничений целостности и триггеров(процедур, поддерживающих ограничение целостности);•определение структур физического уровня (индексов);•определение представлений БД;•определение авторизации доступа к отношениям и их полям;•определение точек сохранения транзакций и откатов;• поддержка встраивания SQL в языки программирования идинамического исполнения операторов языка SQL.2Формулирование запросов к РБДЗапрос к РБД формулируется оператором выборки данных SELECT.Средствами SQL можно формулировать простые запросы ксоединениям нескольких отношений и вложенных подзапросов впредикатах (условиях) выборки. В предикатах с вложеннымиподзапросами можно употреблять теоретико-множественныеоперации сравнения, использовать кванторы и т.п.Результатом выполнения оператора SELECT будет некотороеотношение, в общем случае являющееся не множеством, амультимножеством кортежей (в нем могут присутствоватькортежи-дубликаты).В результирующем отношении могут выполняться различныегруппирования данных по полям в соответствии с заданнымиусловиями.3Оператор выборки данных SELECTВ простейшем случае оператор SELECT выглядит следующимобразом:SELECT <имена столбцов> FROM <имена таблиц>В полной форме оператора могут присутствовать дополнительныеразделы:SELECT <имена столбцов>FROM <имена таблиц>WHERE <условие соединения> AND <условие выборки записей>GROUP BY <имена столбцов >HAVING <условие выборки групп>ORDER BY <имена столбцов>4Оператор выборки данных SELECTРезультатом выполнения оператора SELECT в простейшей формеSELECT <имена столбцов> FROM <имена таблиц>будет таблица, составленная из заданных столбцов указанныхтаблиц (или одной таблицы).Если в выборке участвует несколько таблиц, то для однозначнойидентификации их столбцов указывается полное имя столбца:<имя таблицы>.<имя столбца>Если вместо списка имен столбцов указать символ *, торезультирующая таблица будет состоять из всех столбцов всехуказанных таблиц.5Оператор выборки данных SELECTВместо имени столбца в операторе может быть указано любоевыражение, в том числе и константа.
В этом случае в качествезначений этого столбца будут выступать результаты вычисленияуказанного выражения для каждой записи результирующейтаблицы.Использование в запросе выражений позволяет вычислятькомбинацию данных из нескольких столбцов, а использованиеконстант позволяет вставлять столбцы с комментариями.В большинстве случаев имена столбцов в результирующей таблицесовпадают с именами столбцов из исходных таблиц, однако онимогут быть изменены для сохранения уникальности:SELECT <имя столбца> AS <новое имя>, ...FROM <имена таблиц>.Для столбцов-выражений имена порождаются автоматически.6Оператор выборки данных SELECTДля имен таблиц, указанных в запросе, можно задавать синонимы:SELECT <имена столбцов>FROM <имя таблицы> <синоним>, ...В этом случае во всех остальных частях запроса вместо имен этихтаблиц следует использовать их синонимы.Такой прием в частности может быть использован, когда в запросеуказано более одного вхождения одной и той же таблицы.При выполнении запроса в таблице (например, в результатепроекции) могут оказаться одинаковые записи.
Чтобы исключитьдублирующиеся записи, перед именами полей в команде нужнопоместить ключевое слово DISTINCT:SELECT DISTINCT <имена столбцов> FROM <имена таблиц>.7Оператор выборки данных SELECT1. Соединение таблиц в запросеС точки зрения реляционной алгебры результат выполненияоператора SELECT представляет собой проекцию прямогопроизведения отношений. На практике же обычно требуетсяполучить не прямое произведение отношений, а их соединение.Для этого в операторе SELECT нужно указать условие соединения:SELECT <имена столбцов> FROM <имена таблиц>WHERE <условие соединения>В качестве условия соединения может выступать сравнение двухатрибутов таблиц, а также конъюнкция таких условий (спомощью логической связки AND).8Оператор выборки данных SELECT2.
Задание условий выборки записейКроме условия соединения, в запросе может быть указано также иусловие выборки. В этом случае оно обязательно должноследовать после условия соединения (если последнее задано):SELECT <имена столбцов> FROM <имена таблиц>WHERE <условие соединения> AND <условие выборки>Задание условия выборки позволяет включать в результирующуютаблицу не все записи, а только те из них, которыеудовлетворяют этому условию.Условие выборки может быть простым или содержать подзапрос, атакже может состоять из нескольких частей, соединенныхлогическими связками AND, OR и NOT.9Оператор выборки данных SELECTК простым условиям выборки относятся:● сравнение значения атрибута со значением другого атрибута илилюбого выражения:<атрибут> <сравнение> <атрибут><атрибут> <сравнение> <выражение>,где в качестве операции сравнения могут использоваться символыравенства (=), неравенства (< >, !=, #) и меньше/больше (<, <=, >,>=);● проверка на принадлежность (не принадлежность) значенияатрибута заданному интервалу:<атрибут> BETWEEN <начало> AND <конец><атрибут> NOT BETWEEN <начало> AND <конец>;10Оператор выборки данных SELECT● проверка на принадлежность (не принадлежность) значенияатрибута заданному множеству значений:<атрибут> IN ( <набор значений> )<атрибут> NOT IN ( <набор значений> );● проверка на соответствие (не соответствие) значения символьногоатрибута заданному образцу:<атрибут> LIKE <образец><атрибут> NOT LIKE <образец>,где в качестве образца может выступать любая строка, содержащаяспециальные символы:“_” − сопоставляющийся с любым одним символом,“%” − сопоставляющийся с любым количеством любых символов.11Оператор выборки данных SELECTУсловия с подзапросом содержат внутри себя вложенный запрос ктем же или другим таблицам.
Этот подзапрос долженформировать таблицу, состоящую из одного столбца, которыйинтерпретируется как множество значений для последующейпроверки истинности условия.К таким условиям относятся:● проверка на непустоту результата подзапроса:EXISTS (<подзапрос>)т.е. существует ли хотя бы одна запись во множестве, образованномрезультатом подзапроса;● сравнение значения атрибута со всеми значениями результатаподзапроса:<атрибут> <сравнение> ALL (<подзапрос>)т.е. сравнимо ли значение атрибута со всеми значениями измножества, образованного результатом подзапроса;12Оператор выборки данных SELECT● сравнение значения атрибута с хотя бы одним значениемрезультата подзапроса:<атрибут> <сравнение> SOME (<подзапрос>)т.е.
сравнимо ли значение атрибута хотя бы с одним значением измножества, образованного результатом подзапроса;● проверка на принадлежность (не принадлежность) значенияатрибута множеству, образованному результатом подзапроса:<атрибут> IN (<подзапрос>)<атрибут> NOT IN (<подзапрос>)т.е.