
- •1)Первый этап — базы данных на больших эвм
- •18) Любой фрагмент предметной области может быть представлен как множество сущностей, между которыми существует некоторое множество связей. Дадим определения:
- •23) Реляционная алгебра — замкнутая система операций над отношениями в реляционной модели данных. Операции реляционной алгебры также называют реляционными операциями.
- •37) Вторая нормальная форма (2nf)
- •60) После создания общей структуры базы данных можно приступить к созданию таблиц, которые представляют собой отношения, входящие в состав проекта базы данных.
37) Вторая нормальная форма (2nf)
Основная статья: Вторая нормальная форма
Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме, и при этом любой его атрибут, не входящий в состав потенциального ключа, функционально полно зависит от каждого потенциального ключа. Функционально полная зависимость означает, что атрибут функционально зависит от всего составного потенциального ключа, но при этом не находится в функциональной зависимости от какой-либо из входящих в него частей. Или другими словами: в 2NF нет неключевых атрибутов, зависящих от части составного потенциального ключа.
Второе важное значение второй нормальной формы состоит в том, что она по определению запрещает наличие неключевых атрибутов, которые вообще не зависят от потенциального ключа. Таким образом, 2NF запрещает создавать отношения как несвязанные (хаотические, случайные) наборы атрибутов.
38) Нормальная форма Бойса — Кодда (BCNF)
Основная статья: Нормальная форма Бойса — Кодда
Отношение находится в BCNF тогда и только тогда, когда каждая ее нетривиальная и неприводимая слева функциональная зависимость имеет в качестве своего детерминанта некоторый потенциальный ключ.
Это более строгая версия третьей нормальной формы, которая приобретает актуальность при наличии в отношении нескольких потенциальных ключей, хотя бы один из которых является составным. Если в отношении только один потенциальный ключ или все потенциальные ключи являются простыми (несоставными), то BCNF заведомо эквивалентна 3NF.
39) SQL (англ. Structured Query Language — «язык структурированных запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL основывается на исчислении кортежей. SQL является, прежде всего, информационно-логическим языком, предназначенным для описания, изменения и извлечения данных, хранимых в реляционных базах данных. SQL нельзя назвать языком программирования[источник не указан 252 дня].[6]
Изначально, SQL был основным способом работы пользователя с базой данных и позволял выполнять следующий набор операций:
создание в базе данных новой таблицы;
добавление в таблицу новых записей;
изменение записей;
удаление записей;
выборка записей из одной или нескольких таблиц (в соответствии с заданным условием);
а, также, изменение структур таблиц. Со временем, SQL усложнился — обогатился новыми конструкциями, обеспечил возможность описания и управления новыми хранимыми объектами (например, индексы, представления, триггеры и хранимые процедуры) — и стал приобретать черты, свойственные языкам программирования.
40) Язык SQL определяет:
операторы языка, называемые иногда командами языка SQL;
типы данных;
набор встроенных функций.
По своему логическому назначению операторы языка SQL часто разбиваются на следующие группы:
язык определения данных DDL (Data Definition Language);
язык манипулирования данными DML (Data Manipulation Language).
41) SELECT применяется для извлечения строк, выбранных из одной или нескольких таблиц. Выражение select_expression задает столбцы, в которых необходимо проводить выборку. Кроме того, оператор SELECT можно использовать для извлечения строк, вычисленных без ссылки на какую-либо таблицу. Например:
mysql> SELECT 1 + 1;
-> 2
При указании ключевых слов следует точно соблюдать порядок, указанный выше. Например, выражение HAVING должно располагаться после всех выражений GROUP BY и перед всеми выражениями ORDER BY.
Используя ключевое слово AS, выражению в SELECT можно присвоить псевдоним. Псевдоним используется в качестве имени столбца в данном выражении и может применяться в ORDER BY или HAVING. Например:
Псевдонимы столбцов нельзя использовать в выражении WHERE, поскольку находящиеся в столбцах величины на момент выполнения WHERE могут быть еще не определены.
Выражение FROM table_references задает таблицы, из которых надлежит извлекать строки. Если указано имя более чем одной таблицы, следует выполнить объединение. Для каждой заданной таблицы по желанию можно указать псевдоним.
42)
43)В этой главе мы покажем вам как извлекать информацию из таблиц. Вы узнаете как опускать или переупорядочивать столбцы и как автоматически устранять избыточность данных из вашего вывода. В заключение, вы узнаете как устанавливать условие( проверку ) которую вы можете использовать чтобы определить какие строки таблицы используются в выводе. Эта последняя особенность, будет далее описана в более поздних главах и является одной из наиболее изящных и мощных в SQL.
СОЗДАНИЕ ЗАПРОСА
Как мы подчеркивали ранее, SQL символизирует собой Структурированный Язык Запросов. Запросы - вероятно наиболее часто используемый аспект SQL. Фактически, для категории SQL пользователей, маловероятно чтобы кто-либо использовал этот язык для чего-то другого. По этой причине, мы будем начинать наше обсуждение SQL с обсуждения запроса и как он выполняется на этом языке.
ЧТО ТАКОЕ ЗАПРОС ?
Запрос - команда которую вы даете вашей программе базы данных, и которая сообщает ей чтобы она вывела определенную информацию из таблиц в память. Эта информация обычно посылается непосредственно на экран компьютера или терминала которым вы пользуетесь, хотя, в большинстве случаев, ее можно также послать принтеру, сохранить в файле ( как объект в памяти компьютера ), или представить как вводную информацию для другой команды или процесса.
44)
45)
46)
47)
48)
49)
50)
51)Оператор EXISTS используется чтобы указать предикату, - производить
ли подзапросу вывод или нет. В этой главе, вы узнаете как использовать
этот оператор со стандартными и ( обычно ) соотнесенными подзапросами.
Мы будем также обсуждать специальные расмышления которые перейдут в
игру когда вы будете использовать этот оператор как относительный аг-
регат, как пустой указатель NULL, и как оператор Буля. Кроме того, вы
можете повысить ваш профессиональный уровень относительно подзапросов
исследуя их в более сложных прикладных программах чем те которые мы
видели до сих пор.
========== КАК РАБОТАЕТ EXISTS? ==========
EXISTS - это оператор, который производит верное или неверное значе-
ние, другими словами, выражение Буля ( см. Главу 4 для обзора этого
термина ). Это означает что он может работать автономно в предикате
или в комбинации с другими выражениями Буля использующими Булевы опе-
раторы AND, OR, и NOT. Он берет подзапрос как аргумент и оценивает его
как верный если тот производит любой вывод или как неверный если тот
не делает этого. Этим он отличается от других операторов предиката, в
которых1 он не может быть неизвестным. Например, мы можем решить, изв-
лекать ли нам некоторые данные из таблицы Заказчиков если, и только
если, один или более заказчиков в этой таблице находятсяся в San Jose
( вывод для этого запроса показывается в Рисунке 12.1 ):
SELECT cnum, cname, city
FROM Customers
WHERE EXISTS
( SELECT *
FROM Customers
WHERE city = " San Jose` );
Внутренний запрос выбирает все данные для всех заказчиков в San Jo-
se. Оператор EXISTS во внешнем предикате отмечает, что некоторый вывод
был произведен подзапросом, и поскольку выражение EXISTS было полным
предикатом, делает предикат верным. Подзапрос( не соотнесенный ) был
выполнен только один раз для всего внешнего запроса, и следовательно,
=============== SQL Execution Log ============
| |
| SELECT snum, sname, city |
| FROM Customers |
| WHERE EXISTS |
| (SELECT * |
| FROM Customers |
| WHERE city = `San Jose`); |
| ============================================= |
| cnum cname city |
| ----- -------- ---- |
| 2001 Hoffman London |
| 2002 Giovanni Rome |
| 2003 Liu San Jose |
| 2004 Grass Berlin |
| 2006 Clemens London |
| 2008 Cisneros San Jose |
| 2007 Pereira Rome |
=============================================
Рисунок 12.1 Использование оператора EXISTS
имеет одно значение во всех случаях. Поэтому EXISTS, когда использует-
ся этим способом, делает предикат верным или неверным для всех строк
сразу, что это не так уж полезно для извлечения определенной информа-
ции.
52)и54) Операторы SOME и ANY - взаимозаменяемы везде и там где мы используем ANY, SOME будет работать точно так же. Различие в терминологии состоит в том чтобы позволить людям использовать тот термин который наиболее однозначен. Это может создать проблему; потому что, как мы это увидим, наша интуиция может иногда вводить в заблуждение.
Имеется новый способ нахождения продавца с заказчиками размещенными в их городах ( вывод для этого запроса показывается в Рисунке 13.1 ):
SELECT *
FROM Salespeople
WHERE city = ANY
(SELECT city
FROM Customers );
Оператор ANY берет все значения выведенные подзапросом, ( для этого случая - это все значения city в таблице Заказчиков ), и оценивает их как верные если любой(ANY) из их равняется значению города текущей строки внешнего запроса.
=============== SQL Execution Log ============
| SELECT * |
| FROM Salespeople |
| WHERE city = ANY |
| (SELECT city |
| FROM Customers); |
| ============================================= |
| cnum cname city comm |
| ----- -------- ---- -------- |
| 1001 Peel London 0.12 |
| 1002 Serres San Jose 0.13 |
| 1004 Motika London 0.11 |
=============================================
Рисунок 13. 1: Использование оператора ANY
Это означает, что подзапрос должен выбирать значения такого же типа как и те, которые сравниваются в основном предикате. В этом его отличие от EXISTS, который просто определяет, производит ли подзапрос результаты или нет, и фактически не использует эти результаты.
53) С помощью ALL, предикат является верным, если каждое значение выбранное подзапросом удовлетворяет условию в предикате внешнего запроса. Если мы хотим пересмотреть наш предыдущий пример чтобы вывести только тех заказчиков чьи оценки, фактически, выше чем у каждого заказчика в Париже, мы можем ввести следующее чтобы произвести вывод показанный в Рисунке 13.9:
SELECT *
FROM Customers
WHERE rating > ALL
(SELECT rating
FROM Customers
WHERE city = Rome ):
=============== SQL Execution Log ============
| |
| SELECT * |
| FROM Customers |
| WHERE rating > ALL |
| (SELECT rating |
| FROM Customers |
| WHERE city = 'Rome'); |
| ============================================= |
| cnum cname city rating snum |
| ----- -------- ---- ------ ------ |
| 2004 Grass Berlin 300 1002 |
| 2008 Cisneros San Jose 300 1007 |
=============================================
Рисунок 13.9: Использование оператора ALL
Этот оператор проверяет значения оценки всех заказчиков в Риме. Затем он находит заказчиков с оценкой большей чем у любого из заказчиков в Риме. Сама высока оценка в Риме - у Giovanni( 200 ). Следовательно, выбираются только значения выше этих 200.
55)
56) Объединение таблиц
В этом уроке вы узнаете, что такое объединения, для чего они применяются и как следует оформлять операторы SELECT, использующие объединения.
Что такое объединения
Одной из самых мощных особенностей реализаций языка SQL является возможность "на лету" объединять таблицы при выполнении запросов на выборку данных. Объединения — это самые мощные операции, которые молено выполнить с использованием оператора SELECT языка SQL, поэтому тщательное изучение объединений и их синтаксиса является чрезвычайно важной частью процесса освоения SQL.
Прежде чем вы сможете эффективно использовать объединения, вам следует уяснить, что такое реляционные таблицы, и ознакомиться с основами построения реляционных баз данных. В этой книге полностью осветить эту тему не удастся, но сказанного будет достаточно для того, чтобы вы могли получить полное представление об этом предмете и двигаться дальше.
Что такое реляционные таблицы
Понять, что представляют собой реляционные таблицы, поможет пример из реальной жизни.
Предположим, что некоторая таблица базы данных содержит каталог продуктов, в котором для каждого предмета, включенного в каталог, выделена одна строка. Информация, которая хранится о каждом предмете, должна включать описание продукта и его цену, а также сведения о поставщике и компании, выпустившей данный продукт. Теперь предположим, что вы получили обширный каталог от одного из поставщиков. Где вы должны хранить инфор-
57) Добавление данных в таблицу
Теперь у нас есть пустая таблица; так что рассмотрим два способа добавления в нее данных. Вот первый способ:
USE sysadm
INSERT hosts
VALUES (
'shimmer',
'192.168.1.11',
'shim shimmy shimmydoodles',
'David Davis',
'Software',
'Main',
'309',
'Sun',
'UItra60'
)
В первой строке мы сообщаем серверу, что собираемся работать с объектами из базы данных sysadm. Во второй строке выбирается таблица hosts и в нее добавляются строки - по одному полю за один раз.
Такой вариант команды INSERT добавляет в таблицу всю строку целиком (ту, в которой определены все поля). Чтобы добавить строку только частично, можно указать, какие поля следует дописать, например, так:
USE sysadm
INSERT hosts (name.ioaddr.owner)
VALUES (
'bendir',
'192.168.1.3',
'Cindv Coltrane
)
Команда INSERT завершится с ошибкой, если попытаться добавить строку, в которой определены не все обязательные (NOT NULL) поля.
INSERT можно использовать и для добавления данных из одной таблицы в другую, такое применение будет рассмотрено позже. Во всех остальных примерах будем считать, что таблица hosts заполнена до конца при помощи команды INSERT в первой форме.
58) Удаление базы данных осуществляется командой:
DROP DATABASE имя_базы_данных [,...n]
Удаляются все содержащиеся в базе данных объекты, а также файлы, в которых она размещается. Для исполнения операции удаления базы данных пользователь должен обладать соответствующими правами.
59) Большинство действий по изменению конфигурации базы данных выполняется с помощью следующей конструкции:
<изменение_базы_данных> ::=
ALTER DATABASE имя_базы_данных
{ ADD FILE <определение_файла>[,...n]
[TO FILEGROUP имя_группы_файлов ]
| ADD LOG FILE <определение_файла>[,...n]
| REMOVE FILE логическое_имя_файла
| ADD FILEGROUP имя_группы_файлов
| REMOVE FILEGROUP имя_группы_файлов
| MODIFY FILE <определение_файла>
| MODIFY FILEGROUP имя_группы_файлов
<свойства_группы_файлов>}
Как видно из синтаксиса, за один вызов команды может быть изменено не более одного параметра конфигурации базы данных. Если необходимо выполнить несколько изменений, придется разбить процесс на ряд отдельных шагов.
В базу данных можно добавить (ADD) новые файлы данных (в указанную группу файлов или в группу, принятую по умолчанию) или файлы журнала транзакций.
Параметры файлов и групп файлов можно изменять (MODIFY).
Для удаления из базы данных файлов или групп файлов используется параметр REMOVE. Однако удаление файла возможно лишь при условии его освобождения от данных. В противном случае сервер не разрешит удаление.
В качестве свойств группы файлов используются следующие:
READONLY – группа файлов используется только для чтения; READWRITE – в группе файлов разрешаются изменения; DEFAULT – указанная группа файлов принимается по умолчанию.