Язык SQL

Назначение языка SQL. Операторы манипулирования данными. Группировка записей, объединение таблиц, многотабличные и вложенные запросы. Добавление, удаление, определение и обновление данных. Типы данных языка SQL. Методики проектирования, ER-моделирование.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 15.12.2015
Размер файла 84,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Реферат

Язык SQL

Содержание

§1. Назначение языка SQL. Операторы манипулирования данными

§2. Оператор SELECT

§3. Агрегатные функции

§4. Группировка записей

§5. Объединение таблиц

§ 6. Многотабличные запросы

§7. Вложенные запросы

§ 8. Конструкции ANY (SOME), ALL и EXISTS

§ 9. Добавление данных

§ 10. Удаление данных

§ 11. Обновление данных

§ 12. Определение данных. Типы данных языка SQL

§ 13. Транзакции

§ 14. Права пользователей

§15. Методики проектирования. ER-моделирование

§ 16. Нормализация отношений

ЛИТЕРАТУРА

§1. Назначение языка SQL. Операторы манипулирования данными

Язык структурированных запросов Structure Query Language (SQL) был создан в результате разработки реляционной модели данных и в настоящее время является фактическим стандартом языка реляционных СУБД. Язык SQL сегодня поддерживается огромным количеством СУБД различных типов.

Название языка SQL произносится обычно по буквам «эс-кью-эль». Иногда используют мнемоническое имя «See-Quel».

Язык SQL предоставляет пользователю (при минимальных усилиях с его стороны) следующие возможности:

- создавать базы данных и таблицы с полным описанием их структуры

- выполнять основные операции манипулирования данными: вставка, изменение, удаление данных

- выполнять как простые, так и сложные запросы.

Язык SQL является реляционно полным.

Структура и синтаксис его команд достаточно просты, а сам язык является универсальным, т. е. синтаксис и структура его команд не меняется при переходе от одной СУБД к другой.

Язык SQL имеет два основных компонента:

- язык DDL (Data Definition Language) для определения структур базы данных и управления доступом к данным

- язык DML (Data Manipulation Language), предназначенный для выборки и обновления данных.

Язык SQL является непроцедурным, т. е. при его использовании необходимо указывать то, какая информация должна быть получена, а не то, как ее можно получить. Команды языка SQL представляют собой обычные слова английского языка (SELECT, INSERT и др.). Рассмотрим вначале операторы SQL DML:

- SELECT - выборка данных из базы

- INSERT - вставка данных в таблицу

- UPDATE - обновление данных в таблице

- DELETE - удаление данных из таблицы

§2. Оператор SELECT

Оператор выборки SELECT выполняет действия, эквивалентные следующим операциям реляционной алгебры: выборка, проекция и соединение.

Простейший SQL-запрос с его использованием выглядит следующим образом:

SELECT col_name FROM tbl

После ключевого слова select следует список столбцов, разделенных запятыми, данные которых будут возвращены в результате запроса. Ключевое слово from, указывает, из какой таблицы (или представления) извлекаются данные.

Результатом запроса select всегда является таблица, которая называется результирующей таблицей. Более того, результаты запроса, выполненного при помощи оператора select, могут быть использованы для создания новой таблицы. Если результаты двух запросов к разным таблицам имеют одинаковый формат, их можно объединить в одну таблицу. Также таблица, полученная в результате запроса, может стать предметом дальнейших запросов.

Для выборки всех столбцов и всех строк таблицы достаточно сделать запрос SELECT * FROM tbl;

Рассмотрим таблицу Product, содержащую сведения о цене на различные виды продукции:

Type_id

Type

Price

1

автовесы

3000

3

Ж/д весы

3500

4

Напольные весы

400

Результатом запроса

SELECT * FROM Product;

будет вся таблица Product.

Выбрать конкретные столбцы таблицы можно с помощью запроса

SELECT col1, col2, … , coln FROM tbl;

Так, результатом запроса

SELECT Type, Price FROM Product;

будет таблица

Type

Price

автовесы

3000

Ж/д весы

3500

Напольные весы

400

К списку столбцов в операторе select прибегают и в том случае, если необходимо изменить порядок следования столбов в результирующей таблице:

Для того чтобы выбрать лишь те строки таблицы, которые удовлетворяют некоторым ограничениям, используется специальное ключевое слово where, после которого следует логическое условие. Если запись удовлетворяет такому условию, она попадает в результат. В противном случае такая запись отбрасывается.

Например, выбор тех товаров из таблицы Product, цена которых удовлетворяет условию Price <3200, можно осуществить, используя запрос

SELECT * FROM Product where Price <3200;

Его результат:

Type_id

Type

Price

1

автовесы

3000

4

Напольные весы

400

Условие может быть составным и объединяться при помощи логических операторов NOT , AND, OR, XOR, например: where id_ Price>500 AND Price<3500. Допускается также использование выражений в условии: where Price>(1+1) и строковых констант: where name= 'автовесы'.

Применение конструкции BETWEEN var1 AND var2 позволяет проверить, попадают ли значения какого-либо выражения в интервал от var1 до var2 (включая эти значения):

SELECT * FROM Product where Price BETWEEN 3000 AND 3500;

Type_id

Type

Price

1

автовесы

3000

3

Ж/д весы

3500

Конструкция NOT BETWEEN var1 AND var2 возвращает значения, не входящие в интервал между var1 и var2.

Выражения, находящиеся не в диапазоне, а в списке, возвращает оператор IN:

SELECT * FROM Product where Type_id IN (3, 4);

Type_id

Type

Price

3

Ж/д весы

3500

4

Напольные весы

400

По аналогии с оператором NOT BETWEEN существует оператор NOT IN.

Имена столбцов, указанные в предложении SELECT, можно переименовать. Для этого используется ключевое слово AS, которое, впрочем, можно опустить, т. к. неявно подразумевается. Например, запрос

SELECT Type AS model, Type_id AS num FROM Product where Type_id =3

вернет (имена псевдонимов следует записывать без кавычек):

model

num

Ж/д весы

3

Оператор LIKE предназначен для сравнения строки с образцом:

SELECT * FROM tbl where col_name LIKE 'abc'

Этот запрос возвращает лишь те записи, которые содержат в столбце col_name строковое значение abc.

В образце разрешается использовать два трафаретных символа: "_" и "%". Первый из них заменяет в шаблоне один произвольный символ, а второй - последовательность произвольных символов. Так, 'abc%' соответствует любой строке, начинающейся на abc, 'abc_' - строке из 4-х символов, начинающейся на abc, '%z' - произвольной строке, заканчивающейся на z, и, наконец, '%z%' - последовательности символов, содержащих z.

Найти все записи таблицы Product, в которых значение Type начинается с буквы "a" можно так:

SELECT * FROM Product where Type LIKE 'а%';

Type_id

Type

Price

1

автовесы

3000

Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE. Этот управляющий символ должен использоваться в образце перед трафаретным символом, сообщая о том, что последний следует трактовать как обычный символ. Например, если в некотором поле следует отыскать все значения, содержащие символ "_", то шаблон '%_%' приведет к тому, что будут возвращены все записи из таблицы. В данном случае шаблон следует записать следующим образом:

'%|_%' ESCAPE '|'

Для проверки значения на соответствие строке "20%" можно воспользоваться таким оператором:

LIKE '20#%' ESCAPE '#'

Оператор IS [NOT] NULL позволяет проверить отсутствие (наличие) NULL-значения в полях таблицы. Использование в этих случаях обычных операторов сравнения может привести к неверным результатам, так как сравнение со значением NULL дает результат UNKNOWN (неизвестно). Таким образом, условие отбора должно выглядеть так:

where col_name IS NULL, вместо where col_name=NULL.

Результат выборки по умолчанию возвращает записи, расположенные в том же порядке, в котором они хранятся в базе данных. Если требуется отсортировать записи по одному из столбцов, необходимо применить конструкцию ORDER BY, после которой указывается имя этого столбца:

SELECT * FROM tbl ORDER BY col_name;

В результате этого запроса записи будут возвращены в порядке возрастания значения атрибута col_name.

Сортировку записей можно производить и по нескольким столбцам. Для этого их названия надо указать после ORDER BY через запятую:

SELECT * FROM tbl ORDER BY col_name1, col_name2.

Записи будут отсортированы по полю col_name1; если встречается несколько записей с совпадающим значением в колонке col_name1, то они будут отсортированы по полю col_name2.

Если требуется отсортировать записи в обратном порядке (например, по убыванию даты), требуется указать ORDER BY col_name DESC.

Для прямой сортировки существует ключевое слово ASC, которое принято в качестве значения по умолчанию.

Если результат выборки содержит сотни и тысячи записей, их вывод и обработка занимают значительное время.

Поэтому информацию часто разбивают на страницы и предоставляют ее пользователю порциями. Постраничная навигация используется при помощи ключевого слова limit, за которым следует число выводимых записей. В следующем запросе извлекаются первые 10 записей, при этом одновременно осуществляется обратная сортировка по полю col_name1:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Для того чтобы извлечь следующие 10 записей, используется ключевое слово limit с двумя значениями: первое указывает позицию, начиная с которой необходимо вывести результат, а вторая -- количество извлекаемых записей:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10,10

Для извлечения следующих 10 записей необходимо использовать конструкцию LIMIT 20, 10.

§3. Агрегатные функции

Для получения статистической информации стандарт SQL предусматривает следующие агрегатные функции, перечисленные в таблице 4.

Таблица 4. Агрегатные функции.

COUNT(*)

Возвращает количество строк источника записей

COUNT()

Возвращает количество значений в указанном столбце (отличных от )

SUM()

Возвращает сумму значений в указанном столбце

AVG()

Возвращает среднее значение в указанном столбце

MIN()

Возвращает минимальное значение в указанном столбце

MAX()

Возвращает максимальное значение в указанном столбце

Все эти функции принимают в качестве аргумента имя столбца и возвращают единственное значение. Разница между функцией COUNT(*) и COUNT(col_name) состоит в том, что вторая (как и остальные агрегатные функции) при подсчете не учитывает NULL-значения. Функции COUNT, MIN и МАХ применимы к любым типам данных, в то время как SUM и AVG используются только для числовых полей.

Найдем количество записей в таблице Product, а также максимальное и минимальное значение поля Price.

SELECT COUNT(*) as all min(Price) as min_ Price,

max(Price) as max_ Price FROM Product;

all

min_ Price

max_ Price

3

400

3500

Использовать агрегатные функции в выражении WHERE нельзя.

§4. Группировка записей

Для удаления из результатов выборки повторяющихся строк используется ключевое слово DISTINCT:

SELECT DISTINCT col_name from tbl.

Для определения статистической информации по группам выходных строк используется конструкция GROUP BY. Результирующие строки при этом разбиваются на группы, характеризуемые одинаковыми значениями в столбце (столбцах), перечисленных после ключевого слова GROUP BY. К этим группам могут применяться агрегатные функции.

Например, запрос

SELECT Type_id, COUNT(Type_id) from Maker

GROUP BY Type_id ORDER BY Type_id;

примененный к таблице Maker

Type_id

Maker_id

1

1

1

3

2

2

2

5

даст результат

Type_id

COUNT(Type_id)

1

2

2

2

Если предложение GROUP BY отсутствует и используются агрегатные функции, то все столбцы с именами, упомянутыми в SELECT, должны быть включены в агрегатные функции (которые будут применяться ко всему набору строк). В противном случае все столбцы списка SELECT, не вошедшие в агрегатные функции, должны быть указаны в предложении GROUP BY (и агрегатные функции будут применены к каждой группе).

Для GROUP BY все значения NULL трактуются как равные. Если в списке GROUP BY указано несколько столбцов, то группировка произойдет по комбинации их значений.

Использование конструкции WHERE совместно с GROUP BY допустимо с использованием столбцов, не входящих в агрегатные функции (WHERE располагается перед GROUP BY).

Условие на выборку по результату группировки налагается при помощи конструкции HAVING (которая располагается вслед за ключевым словом GROUP BY). В условии HAVING можно применять также и группирующие столбцы.

SELECT Type_id, COUNT(Type_id) from Maker

GROUP BY Type_id

HAVING Type_id <2

ORDER BY Type_id

Type_id

COUNT(Type_id)

1

2

§5. Объединение таблиц

Если формат результирующих таблиц (число, порядок следования и тип столбцов) совпадает, то возможно объединение результатов выполнения двух операторов select в одну результирующую таблицу. Это достигается с помощью оператора union.

Рассмотрим результаты запросов

SELECT Maker_id FROM Maker; и SELECT Type_id FROM Product;

Type_id

1

3

4

Maker_id

1

3

2

5

Объединить результаты из этих двух таблиц можно, соединив два запроса select:

SELECT Maker_id FROM Maker

UNION

SELECT Type_id FROM Product;

В результате получим таблицу:

Maker_id

1

3

2

5

4

Если результирующая таблица содержит повторяющиеся строки, дубликаты отбрасываются. Использование ключевого слова union all приведет к возвращению всех строк из обеих результирующих таблиц. Каждый из приведенных SELECT-запросов может использовать любые допустимые конструкции, кроме конструкции order by , которая применяется лишь к объединенной таблице. Причем столбцы в результирующей таблице именуются по столбцам первого SELECT-запроса.

Стандарт ISO языка SQL помимо оператора UNION предусматривает также операторы INTERSECT и EXCEPT для выполнения операций пересечения и разности таблиц соответственно. Однако они поддерживаются не всеми диалектами SQL (используемыми в различных СУБД).

§ 6 Многотабличные запросы

Запросы, которые обращаются одновременно к нескольким таблицам, называются многотабличными запросами. Для осуществления запроса сразу к нескольким таблицам их имена перечисляются после ключевого слова from через запятую.

Пусть у нас имеются две таблицы: Name и Type:

id

name

1

A

2

B

3

C

id

type

2

E

3

F

4

G

Двухтабличный запрос

SELECT * FROM Name, Type

реализует операцию декартова произведения этих таблиц (см. выше). Такой запрос называют также перекрестным соединением.

Если в результат выборки должны входить столбцы с именами, содержащимися сразу в нескольких соединяемых таблицах, необходимо использовать полные имена столбцов. Полное имя включает имя таблицы и столбца, разделенные точкой, например Name. id:

SELECT Name.id FROM Name, Type.

Для символа *, указывающего на необходимость выборки всех столбцов таблицы, также можно использовать полное имя: Name.*.

Полные имена можно использовать для обращения не только в пределах одной базы данных, но и для объединения таблиц из разных баз данных. Для этого полное имя столбца предваряется именем базы данных. Если таблицы name и code расположены в базах данных dbl и db2, то к столбцам Name.id и Type.id можно обратиться по именам db1.Name.id и db2.Type.id соответственно. При этом названия таблиц следует также записывать полным именем: dbl.Name и db2.Type.

Тета-соединение таблиц реализуется при помощи условия where.

Следующий запрос производит естественное соединение таблиц Name и Type при условии совпадения полей Name.id и Type.id:

SELECT Name.id, Name.name, Type.type

FROM Name, Type WHERE Name.id=Type.id;

id

name

code

2

B

E

3

C

F

Использование псевдонимов таблиц приводит к более короткому запросу:

SELECT t1.id, t1.Name, t2.Type

FROM Name as t1, Type as t2

WHERE t1.id= t2.id

После назначения псевдонимов таблицам, участвующим в запросе, использовать исходные имена таблиц в конструкциях WHERE, GROUP BY, ORDER BY и списке столбцов после ключевого слова SELECT уже нельзя.

Назначение псевдонимов позволяет осуществлять многотабличые запросы к одной таблице. Такие запросы называют еще самообъединением таблицы. Для этого достаточно назначить одной и той же таблице разные псевдонимы:

SELECT t1.id, t2. Name

FROM Name as t1, Name as t2;

В качестве примера рассмотрим таблицу Name1:

id

name

1

A

2

B

3

C

4

A

5

B

Выведем пары значений атрибута id, для которых совпадают значения name. Для того чтобы исключить повторяющиеся пары, различающиеся лишь порядком следования величин, а также пары с одинаковым значением id, добавим в условие выбора выражение a.id< b.id:

SELECT a.id as id1, b.id as id2

FROM Name1 as a, Name1 as b

WHERE a.name=b.name AND a.id< b.id;

id1

id2

1

4

2

5

Возможно объединение не только двух, но и трех, четырех и более таблиц. Однако с увеличением количества таблиц в запросе резко возрастает объем работы, необходимой для выполнения запроса, поэтому по возможности в запросе не следует использовать больше трех-четырех таблиц.

Соединение таблиц реализуется также с использованием оператора JOIN. Данный оператор располагается в SQL-запросе между именами объединяемых таблиц после ключевого слова FROM. Без дополнительных ключевых слов объединение при помощи оператора JOIN аналогично перекрестному соединению таблиц (декартову произведению). Так, запросы

SELECT * FROM Name, Type WHERE Name.id= Type.id;

и

SELECT * FROM Name JOIN Type WHERE Name.id= Type.id;

дадут одинаковый результат:

id

name

id

type

2

B

2

Е

3

C

3

F

Для формирования условия в запросах, использующих объединение JOIN, вместо ключевого слова WHERE предпочтительно указывать ключевое слово ON, как это продемонстрировано в следующем примере:

SELECT * FROM Name JOIN Type ON Name.id=Type.id.

Ключевое слово JOIN имеет два синонима: CROSS JOIN и INNER JOIN.

Левое внешнее и правое внешнее соединение таблиц реализуются при помощи конструкций LEFT JOIN и RIGHT JOIN соответственно:

SELECT * FROM Name LEFT JOIN Type ON Name.id= Type.id;

id

name

id

type

1

А

NULL

NULL

2

В

2

Е

3

С

3

F

SELECT * FROM Name RIGHT JOIN Type ON Name.id= Type.id;

id

name

id

type

2

В

2

Е

3

С

3

F

NULL

NULL

4

G

Ключевые слова LEFT JOIN и RIGHT JOIN имеют синонимы LEFT OUTER JOIN и RIGHT OUTER JOIN соответственно.

Существует также оператор FULL JOIN, реализующий полное внешнее соединение.

§7. Вложенные запросы

Вложенный запрос позволяет использовать результирующую таблицу одного запроса в другом запросе. Возможность применения одного запроса внутри другого отражает слово "структурированный" в названии языка SQL. Так как из SQL- операторов результат возвращает только оператор выборки select, то в качестве вложенного запроса, как правило, выступает запрос с оператором SELECT. В качестве внешнего запроса может выступать запрос с участием любого SQL-оператора. Например, результатом запроса

SELECT id, name FROM Name

WHERE id IN (SELECT id from Type);

будет таблица

id

name

2

В

3

С

Здесь в качестве внешнего выступает запрос

SELECT id, name FROM Name

а в качестве вложенного -

SELECT id from Type

Результат вложенного запроса (id) применяется в качестве элемента внешнего запроса. Вложенный запрос всегда помещается в круглые скобки.

В большинстве случаев запросы можно представить как при помощи одного из соединений (перекрестного, левого, правого), так и при помощи вложенных запросов, но все же имеется ряд задач, которые решаются лишь при помощи вложенных запросов.

Так, выбрать запись таблицы Name с максимальным значением id, можно следующим образом:

SELECT * FROM Name WHERE id =(SELECT max(id) FROM name)

Здесь вложенный запрос SELECT max(id) FROM Name возвращает максимальное значение id из таблицы Name и подставляет это значение во внешний запрос на место своего выполнения.

Степень вложенности запросов не ограничена вторым уровнем - могут использоваться трехуровневые и многоуровневые вложенные запросы.

§ 8. Конструкции ANY (SOME), ALL и EXISTS

Если подзапрос возвращает несколько строк, то в конструкции WHERE основного запроса может потребоваться сравнить некоторую величину поочередно с каждым значением, которое возвращает вложенный запрос.

Такая возможность предоставляется операторами ANY (SOME) и ALL. При использовании оператора ANY условие основного запроса считается выполненным, если оно выполняется хотя бы для одного результата подзапроса. Иными словами, запрос вида

WHERE A>ANY(SELECT B…)

следует читать как "где A больше хотя бы одного из выбранных B".

Выведем, например, записи из таблицы Name, для которых значение id меньше хотя бы одного из значений id таблицы Type.

SELECT name FROM Name

WHERE id<ANY(SELECT id FROM Type);

name

А

В

С

Ключевое слово ANY имеет синоним SOME.

При использовании оператора ALL условие основного запроса считается выполненным, если оно выполняется для всех результатов подзапроса. Иными словами, запрос вида

WHERE A>ALL(SELECT B…)

следует читать как "где A больше всех выбранных B".

Выведем записи из таблицы Name, для которых значение id меньше всех из значений id таблицы Type:

SELECT name FROM Name

WHERE id< ALL (SELECT id FROM Type);

name

А

Если подзапрос не возвращает ни одной строки, то при использовании оператора ALL основное условие считается выполненным, а при использовании оператора ANY - нет.

Для поверки того, является ли результирующая таблица пустой (т. е. не содержит ни одной строки), предназначены ключевые слова EXISTS и NOT EXISTS. Если вложенный запрос возвращает более одной строки, EXISTS возвращает TRUE, в противном случае - FALSE:

SELECT * FROM Name

WHERE EXISTS(SELECT * FROM Type WHERE Type.id= Name.id)

id

name

2

В

3

С

Внешний запрос последовательно перебирает все строки таблицы Name и для каждой из них выполняет вложенный запрос, который проверяет, есть ли в таблице Type запись с текущим id.

Важно, что в условии WHERE вложенного запроса допускается использование столбцов внешнего запроса при обращении к нему по полному имени. При этом обращение к текущей строке внешнего запроса из подзапроса называется внешней ссылкой. Вложенный запрос, содержащий внешнюю ссылку, называется кореллированным вложенным запросом.

Ключевое слово NOT EXISTS действует противоположным образом.

Заметим, что использование вложенных запросов допустимо везде, где допускаются ссылки на таблицы. Так, вложенный запрос может использоваться вместо имени таблицы в предложении FROM. Однако при этом необходимо назначать псевдоним результирующей таблице, т. к. каждая таблица в конструкции FROM должна иметь имя.

§ 9. Добавление данных

Для вставки новых записей в таблицу используется оператор INSERT.

Так, добавить в таблицу Product новую запись можно при помощи следующего запроса:

INSERT INTO Product VALUES (5,'бытовые весы', 500);

В таблице Product появится строка, в которой значение Type_id будет равно 5, значение Type _ "бытовые весы", а значение Price - 500:

Type_id

Type

Price

1

автовесы

3000

3

Ж/д весы

3500

4

Напольные весы

400

5

бытовые весы

500

Список столбцов, размещенный после имени таблицы, позволяет задать порядок вставки данных в столбцы. В результате запроса

INSERT INTO Product (Type, Type_id, Price)

VALUES ('ручные весы', 6, 300);

сначала будет добавлено название Type, затем первичный ключ Type_id, а затем значение Price.

При вставке оператором insert не обязательно указывать все столбцы. Те столбцы, которые не указаны в списке, получат значение по умолчанию. Так, в следующем запросе значение Type_id не передается оператору insert:

INSERT INTO Product (Type_id, Type) VALUES (7,'весы')

Значение Price по умолчанию принимает значение null.

Допускается добавление полностью пустых строк:

INSERT INTO tbl () VALUES ();

При этом поля таблицы примут значения по умолчанию.

Еще одной формой оператора insert является синтаксис с ключевым словом SET:

INSERT INTO Product SET Type_id = 10;

Такая форма оператора insert с ключевым словом set позволяет более гибко добавлять записи. Если имя столбца после set не встречается, полю присваивается значение умолчанию.

Многострочный оператор insert совпадает по форме с однострочным оператором. В нем используется ключевое слово values, после которого добавляется не один, а несколько списков столбцов. Так, в следующем запросе добавляется сразу три записи при помощи одного оператора insert:

INSERT INTO tbl VALUES (a,b, …),

(c, d, …),

(e, f, …);

§ 10 Удаление данных

Для удаления записей из таблиц, предусмотрен оператор DELETE.

Следующий запрос, удалит в таблице Product все записи со значением Type_id больше трех:

DELETE FROM Product WHERE Type_id > 3;

Если в операторе DELETE отсутствует условие WHERE, то из таблицы удаляются все записи:

DELETE FROM tbl;

Ограничение LIMIT позволяет задать максимальное число записей, которые могут быть уничтожены. В следующем запросе удаляется не более трех записей:

DELETE FROM tbl LIMIT 3;

§ 11. Обновление данных

Для обновления существующих записей предназначен оператор update. Он позволяет обновлять отдельные поля в уже существующих записях:

UPDATE tbl SET col1=value1, col2=value2, …

WHERE coln=cond;

В предложении set перечисляются столбцы, которые подвергаются обновлению, и устанавливаются их новые значения. Необязательное условие WHERE позволяет задать критерий отбора строк -- обновлению будут подвергнуты только те строки, которые удовлетворяют условию WHERE.

Изменения можно проводить не только над отдельными записями, но и над всей таблицей в целом. Следующий запрос увеличивает стоимость товаров в таблице Product в 1.2 раза:

UPDATE Product SET Price = Price*1.3;

Как и в случае оператора DELETE инструкции LIMIT и ORDER BY позволяют ограничить число записей, подвергающихся изменению.

§ 12. Определение данных. Типы данных языка SQL

Язык SQL DDL позволяет создавать, уничтожать и изменять основные объекты баз данных.

Процедура создания базы данных зависит от используемой СУБД. В некоторых диалектах языка SQL существует оператор CREATE DATABASЕ:

CREATE DATABASE base_name;

Для создания схем предусмотрен оператор CREATE SCHEMA:

CREATE SCHEMA shema_name;

Создание таблиц осуществляется с помощью оператора CREATE TABLE, который имеет общий синтаксис:

CREATE TABLE table_name(

{col_name datatype[NOT NULL][UNIQUE]

[DEFAULT option][CHECK(cond)]}

{[PRIMARY KEY (col_list)]

[UNIQUE(col_list)]}

{[FOREIGN KEY (col_list)

REFERENCES table [(col_list)]

[ON UPDATE

{CASCADE|SET NULL|NO ACTION|RESTRICT|SET DEFAULT}]

[ON DELETE

{CASCADE|SET NULL|NO ACTION|RESTRICT|

SET DEFAULT}]

{[CHECK(cond)]}

});

После выполнения этого оператора создается таблица с именем table_name, содержащая один или несколько столбцов типа datatype. Перечислим основные типы данных языка SQL:

- логический (BOOLEAN)

- символьный (CHAR, VARCHAR и др.)

- битовый (BIT)

- точные числа (INTEGER, NUMERUC, SMALLINT и др.)

- приближенные числа (FLOAT, DOUBLE и др.)

- календарные (DATE, TIME, TIMESTAMP и др.)

- интервальный, для представления периодов времени (INTERVAL)

- «большой объект» (BINARY LARGE OBJECT, CHARACTER LARGE OBJECT).

Значение, применяемое по умолчанию при вставке, задается необязательной конструкцией DEFAULT (все необязательные конструкции заключены в квадратные скобки). В случае если значение столбца не должно принимать значение NULL, используется конструкция NOT NULL. Ключевое слово CHECK позволяет задать ограничения на значения столбца (ограничения для домена) или ограничения для таблицы в целом. Ключевое слово UNIQUE позволяет гарантировать уникальность значений столбца (подразумевается, что данный атрибут является альтернативным ключом таблицы). Первичный ключ задает конструкция PRIMARY KEY, которая может указываться в таблице лишь один раз. Конструкция FOREIGN KEY позволяет создавать внешние ключи.

Реализовать одну из стратегий поддержания ссылочной целостности при поступлении операторов UPDATE или DELETE позволяют ключевые слова ON UPDATE и ON DELETE конструкции FOREIGN KEY.

Приведем пример создания таблицы staff, которая содержит информацию о сотрудниках некоторой фирмы и является дочерней по отношению к таблице branch.

CREATE TABLE staff (

id_user INT(11) NOT NULL AUTO_INCREMENT,

age INT(2) NOT NULL DEFAULT '0',

sex CHAR NOT NULL CHECK(sex IN ('M', 'F'))

PRIMARY KEY (id_ staff),

FOREIGN KEY (id_branch) REFERENCES branch (id_ branch)

ON DELETE CASCADE

ON UPDATE CASCADE

)

Для введения ограничений целостности данных, не связанных с определениями таблиц, предназначен оператор CREATE ASSERTION:

CREATE ASSERTION assertion_name

CHECK (cond)

Для создания домена предусмотрен оператор CREATE DOMAIN.

Индекс (особая структура, позволяющая выполнять ускоренный доступ к строкам таблицы по значениям в одном или нескольких столбцах) может быть создан при определении структуры таблицы или при помощи оператора CREATE INDEX. При создании индекса по некоторому столбцу СУБД генерирует его копию, которая затем постоянно поддерживается в отсортированном состоянии. Поиск по такому столбцу осуществляется очень быстро, т. к. заранее известно, где необходимо искать нужное значение.

Следует отметить, что создание индексов возможно лишь для таблиц, но не для представлений. Индексы могут иметь собственные имена, не совпадающие с именами индексируемых столбцов. Один индекс может быть определен по одному или нескольким столбцам. В одной таблице может быть несколько индексов.

Синтаксис оператора CREATE INDEX имеет вид

CREATE [UNIQUE] INDEX idex_name ON tale(col1 [ASC|DESC], col2, …)

.Для построения представления (виртуальной таблицы) используется оператор

CREATE VIEW view_name[col1, col2, …] AS subselect

где subselect - это подзапрос SELECT.

Заметим, что для корректного обновления данных с помощью представления СУБД должна иметь возможность однозначно отобразить любую его строку или столбец на соответствующую строку или столбец исходной таблицы.

Модификация таблиц производится с помощью оператора ALTER TABLE, позволяющего добавить (конструкция ADD) или удалить (конструкция DROP) столбец (ограничение) таблицы или задать значение столбца, используемое по умолчанию.

ALTER TABLE table_name

{ADD colname datatype[NOT NULL][UNIQUE]

[DEFAULT option][CHECK(cond)]}

{DROP colname [RESTRICT|CASCADE]}

{ALTER SET DEFAULT option}

{ALTER DROP DEFAULT};

Например, так можно изменить таблицу staff:

ALTER TABLE staff

DROP age CASCADE;

Оператор ALTER TABLE предусмотрен не во всех диалектах SQL.

Для удаления объектов базы данных используется оператор DROP:

DROP DATABASE base_name;

DROP DOMAIN domain_name;

DROP SCHEMA schema_name;

DROP INDEX index_name;

DROP TABLE table_name [RESTRICT|CASCADE];

DROP VIEW view_name [RESTRICT|CASCADE];

§ 13. Транзакции

язык запрос данные таблица

Механизм транзакций входит в стандарт языка SQL и поддерживается большинством диалектов SQL (в различных СУБД).

Под транзакцией понимают выполнение группы SQL-запросов как единой неделимой операции. Иными словами либо выполняются все эти запросы, либо (если на каком-то этапе произошел сбой) отменяются все результаты их работы.

До завершения транзакции блокируется доступ к тем объектам базы данных, которые подвергаются обработке; т. о. транзакции выполняются независимо друг от друга. Выполнение отдельного оператора SQL воспринимается СУБД как транзакция. Транзакции не могут быть вложенными, т.к. всякий оператор, начинающий новую транзакцию, завершает предыдущую.

Определение транзакции производится при помощи оператора SET TRANSACTION. Для того чтобы завершить транзакцию, используется оператор COMMIT. Откат, т. е. отказ от выполнения всех изменений, выполняется оператором ROLLBACK. Приведем пример определения транзакции:

SET TRANSACTION

INSERT INTO staff VALUES (NULL, 20, 'F');

SELECT * FROM staff;

COMMIT

§ 14. Права пользователей

Для защиты баз данных и таблиц в большинстве СУБД существует механизм регистрации пользователей и ограничения прав их доступа к данным. Стандартом SQL определены следующие привилегии: SELECT, INSERT, UPDATE, DELETE и REFERENCES (право ссылаться на столбцы указанной таблицы при реализации поддержки целостности данных). Все эти привилегии могут распространяться как на отдельные столбцы таблиц, так и на таблицы целиком. Для предоставления (отмены) привилегий отдельным пользователям предназначены операторы GRANT и REVOKE соответственно:

GRANT {priv1, priv2, … | ALL PRIVILEGES}

ON object_name

TO {user1, user2, … | PUBLIC}

[WITH GRANT OPTION]

Конструкция ALL PRIVILEGES позволяет предоставить указанным пользователям все привилегии. Ключевое слово PUBLIC означает предоставление указанных привилегий всем пользователям (даже тем, которые будут зарегистрированы впоследствии). Параметр object_name представляет имя таблицы, представления, домена и т. д. Наконец, конструкция WITH GRANT OPTION позволяет пользователям user1, user2 и т. д., получившим привилегии priv1, priv2 и т. д., передавать их другим пользователям.

В следующем примере пользователю admin предоставляются права на все операции с таблицей staff:

GRANT ALL PRIVILEGES

ON staff

TO admin WITH GRANT OPTION;

Общий синтаксис оператора REVOKE, который служит для отмены привилегий, таков:

REVOKE [GRANT OPTION FOR]

{ priv1, priv2, … | ALL PRIVILEGES}

ON object_name

FROM {user1, user2, … | PUBLIC} [RESTRICT|CASCADE]

Ключевое слово ALL PRIVILEGES означает отмену всех привилегий для указанного пользователя. Конструкция GRANT OPTION FOR отменяет возможность передачи привилегий. Следующий пример отменяет право выборки из таблицы staff для всех пользователей:

REVOKE SELECT

ON staff

FROM PUBLIC

Подробное описание языка SQL можно найти в [1-4].

§15. Методики проектирования. ER-моделирование

Процесс разработки базы данных начинается с определения предметной области - части реального мира, информацию о которой необходимо отразить в базе. Предметной областью может быть, например, деятельность некоторой организации.

Основная цель моделирования данных (моделирования предметной области) - это изучение семантики данных и требований к этим данным.

На первом этапе проектирования создается логическая модель данных, которая описывает объекты предметной области (сущности), их взаимосвязь, а также ограничения на данные, налагаемые предметной областью. Логическая модель не зависит от таких подробностей реализации базы данных, как тип выбранной СУБД и особенности физической реализации.

На втором этапе проектирования создается физическая модель данных, которая описывает информацию средствами конкретной СУБД. На этом этапе создаются таблицы, описывающие типы сущностей, чьи атрибуты становятся столбцами таблиц. Домены преображаются в типы данных, принятые в данной СУБД и т. д.

Подробное описание методик проектирования баз данных приведено, например, в [1], [2].

Существует два подхода к логическому проектированию баз данных: нисходящий и восходящий. При нисходящем подходе, более подходящем для проектирования сложных баз данных, сначала выявляются основные (имеющие первостепенное значение) сущности и связи между ними; затем в модель вносится дополнительная информация о сущностях и атрибутах более низкого уровня. Примером такого подхода может служить построение ER-модели (Entity-Relationship, модели «сущность-связь»). Для схематического изображения ER-моделей используются ER-диаграммы.

При построении ER-диаграммы каждый тип сущности изображается в виде прямоугольника с имением сущности внутри него. Каждый тип связи между сущностями изображается в виде линии, соединяющей соответственные типы сущностей, и обозначается именем связи. Имя связи обычно представляет собой глагол. Например, «принадлежит» или «владеет». На схеме обычно указывается направление связи, например, «книга принадлежит библиотеке» (рис. 1):

Книга

принадлежит

Отдел иностранной литературы

Рис. 1. Изображение типов сущностей и связи в схеме «сущность-связь».

Связи с несколькими участниками обозначаются ромбами, направленная стрелка не применяется.

На рис. 2 представлена трехсторонняя связь «читатель берет книгу в библиотеке».

Рис. 2. Трехсторонняя связь «читатель берет книгу в библиотеке».

Если сущность некоторого типа должна отображаться на схеме вместе со своими атрибутами, то прямоугольник, изображающий эту сущность, делится на две части. В верхней части прямоугольника указывается имя сущности, а в нижней - список имен атрибутов. Первым в списке атрибутов следует первичный ключ. Он помечается дескриптором {PK} (primary key) или выделяется подчеркиванием. Внешний ключ помечается дескриптором {FK} (foreign key). На рис. 3 изображена сущность «книга» с ее атрибутами.

Книга

Код {PK}

Название

Издатальство

Рис. 3. Изображение сущности с ее атрибутами в схеме «сущность-связь».

Существуют двухсторонние связи трех типов: «один к одному», «один ко многим» и «многие ко многим».

Связь типа «один к одному» (сокращенное обозначение 1:1) означает, что не более одного экземпляра сущности А соответствует не более чем одному экземпляру сущности В. Если экземпляру сущности А может отвечать нуль или один экземпляр сущности В, то при построении ER-диаграммы рядом с изображением сущности В помещается обозначение 0..1. А если любому экземпляру В всегда соответствует один экземпляр сущности А, рядом с изображением сущности А помещается обозначение 1..1. На рис. 4 представлена ER-диаграмма связи «сотрудник руководит отделом», где количество сотрудников организации, управляющих одним отделом равно нулю или единице, а каждым отделом руководит ровно один сотрудник.

Сотрудник

руководит

отдел

1..1 0..1

Рис.4 Связь «сотрудник руководит отделом».

Связь типа «один ко многим» (обозначается 1:*) означает, что не более одного экземпляра сущности А соответствует нескольким экземплярам сущности В. Для указания того, что каждому экземпляру сущности А соответствует несколько экземпляров сущности В, на схеме около изображения сущности В помещается обозначение 0..*. Если каждому экземпляру сущности В отвечает ноль или один экземпляр сущности А, то рядом с изображением сущности А на ER-диаграмме помещается обозначение 0..1. На рис. 5 изображена связь «гражданин имеет счет в банке». Каждый гражданин может иметь ноль или несколько банковских счетов, но каждый счет в банке имеет только один гражданин.

Гражданин

имеет

Счет в банке

1..1 0..*

Рис. 5 Связь «гражданин имеет счет в банке».

Связь типа «многие ко многим» (обозначается *:*) означает, что один или более экземпляр сущности А соответствует нескольким экземплярам сущности В. Если каждому экземпляру сущности А соответствует ноль и более экземпляров сущности В, то на схеме около изображения сущности В помещается обозначение 0..*. Если же каждому экземпляру сущности В отвечает один или более экземпляр сущности А, то рядом с изображением сущности А помещается обозначение 1:*. На рис. 6 изображена связь «фирма поставляет комплектующие». Каждая фирма, сотрудничающая с некоторым предприятием, может поставлять ноль или несколько комплектующих. При этом каждое комплектующее поставляет одна или несколько фирм.

Фирма

поставляет

комплектующие

1..* 0..*

Рис. 6. Связь «фирма поставляет комплектующие».

Существуют и альтернативные способы схематического изображения ER-моделей.

Для построения правильной логической модели необходимо четко понимать смысл существующих между объектами связей. Неправильная интерпретация смысла этих связей порождает так называемые дефекты соединения. Среди них выделяют «дефект типа разветвление» и «дефект типа разрыв». В первом случае отображаемая связь между сущностями неоднозначно определяет связь между отдельными экземплярами этих сущностей. Во втором случае модель предполагает связь между сущностями, но связь между отдельными экземплярами этих сущностей отсутствует.

В настоящее время существуют программные продукты (CASE средства _ Computer-Aided System Engineering), предоставляющие графические инструменты для создания и редактирования диаграмм, описывающих модели баз данных, а также генерацию схем баз данных (как правило, на языке SQL) для наиболее распространенных СУБД.

§ 16. Нормализация отношений

При восходящем подходе к моделированию данных (применяемом для разработки небольших баз данных) анализируют свойства сущностей и связей между ними и на основе этого анализа строят систему отношений таким образом, чтобы свести к минимуму избыточность данных. Этот процесс называется нормализацией и основывается на понятии нормальных форм. Говорят, что отношение находится в некоторой нормальной форме, если оно удовлетворяет определенному набору условий.

На каждом шаге процесса нормализации, предложенного Э.Ф. Коддом, происходит переход от имеющегося отношения (системы отношений) к эквивалентной системе отношений (находящихся в нормальной форме высшего порядка), более приемлемой с точки зрения проектирования базы данных.

Разделяют первую, вторую и третью нормальные формы отношений (1НФ, 2НФ и 3НФ), а также нормальную форму Бойса-Кодда (НФБК) и нормальные формы высших порядков (4НФ и 5НФ).

Определение Первая нормальная форма - отношение, в котором на пересечении каждого столбца и каждой строки содержится только одно значение.

При манипуляциях с данными, хранящимися с избыточностью, возможны проблемы, которые называются аномалиями обновления. Их разделяют на аномалии вставки, удаления и модификации.

Рассмотрим в качестве примера отношение Проект_Сотрудник_Отдел, находящееся в 1НФ:

№ проекта

проект

Этап проекта

№ сотрудника

ФИО

№ отдела

Название отдела

1

Автовесы

4

S001

Иванов

001

Отделпроизводства

2

Ж/д весы

3

S001

Иванов

001

Отделпроизводства

1

Автовесы

2

S002

Кузнецов

003

Отдел разработок

2

Ж/д весы

1

S002

Кузнецов

003

Отдел разработок

2

Ж/д весы

1

S003

Петров

003

Отдел разработок

Это отношение имеет составной первичный ключ (№ проекта, № сотрудника) и хранит данные о сотрудниках, занятых в различных проектах, с большой избыточностью: значения атрибутов повторяются в разных записях.

Аномалии вставки возникнут, например, при попытке добавить сведения о новом отделе, в котором не работает ни один сотрудник: придется присвоить значение NULL атрибутам первичного ключа, что повлечет нарушение целостности сущностей.

Если название одного из отделов будет изменено, придется изменить значения атрибута Название отдела во всех строках таблицы. Если по ошибке это исправление будет внесено не везде, данные разных записей станут противоречивыми. Это пример аномалии модификации.

Если все сотрудники некоторого отдела будут уволены, и данные о них будут удалены из таблицы, это приведет к потере данных о самом отделе. Это пример аномалии удаления.

Определение Будем говорить, что атрибут В функционально зависит от атрибута А, если каждое значение атрибута А связано только с одним значением атрибута В. Иначе, если значения атрибута А совпадают в нескольких записях, то и значения атрибутов В должны совпадать в этих записях. При этом атрибуты А и В могут быть составными.

Определение Атрибут А называется детерминантом функциональной зависимости.

Определение Вторая нормальная форма (2НФ) - отношение, которое находится в первой нормальной форме и каждый неключевой атрибут функционально зависит от первичного ключа в целом, но не зависит ни от одного подмножества первичного ключа.

Отношение, имеющее простой (состоящий из одного атрибута) первичный ключ, и находящееся в 1НФ, всегда находится в 2НФ.

Для того чтобы избежать аномалий вставки в отношении Проект_Сотрудник_Отдел, необходимо привести это отношение к 2НФ. Алгоритм приведения к 2НФ таков: нужно определить атрибуты, зависящие от части первичного ключа и выделить их вместе с копией детерминанта в отдельные отношения.

В отношении Проект_Сотрудник_Отдел, атрибуты ФИО, № отдела и Название отдела зависят от ключевого атрибута № сотрудника, а атрибут проект - от ключевого атрибута № проекта. Атрибут Этап проекта зависит от обоих атрибутов первичного ключа.

Образуем отношения Отдел_Сотрудник, Проект и Этапы_ Проектов (рис. 7):

№ отдела

Название отдела

№ сотрудника

ФИО

001

Отдел продаж

S001

Иванов

003

Отдел разработок

S002

Кузнецов

003

Отдел разработок

S003

Петров

Отношение Отдел_Сотрудник.

№ проекта

Проект

1

Автовесы

2

Ж/д весы

1

Автовесы

2

Ж/д весы

2

Ж/д весы

Отношение Проект.

№ проекта

Этап проекта

№ сотрудника

1

4

S001

2

3

S001

1

2

S002

2

1

S002

2

1

S003

Отношение Этапы_Проектов.

Рис. 7. Отношения в 2НФ.

Отношения Отдел_Сотрудник, и Проект находятся в 2НФ, т. к. имеют простые ключи. Отношение Этапы_Проектов также находятся в 2НФ, т к. имеет один неключевой атрибут, зависящий от первичного ключа (№ проекта, № сотрудника) в целом.

Отношения в 2НФ все еще обладают избыточностью данных и подвержены аномалиям вставки. Решить проблему может приведение к третьей нормальной форме (3НФ).

Определение Третьей нормальной формой (3НФ) называется отношение, находящееся в 2НФ, и в котором все неключевые атрибуты не находятся в функциональной зависимости друг от друга.

Для, преобразования отношения, которое уже находится в 2НФ, в третью нормальную форму, необходимо определить зависящие друг от друга неключевые атрибуты и выделить их в отдельные отношения.

В отношении Отдел_Сотрудник (рис. 7) атрибут Название отдела зависит от неключевого атрибута № отдела. Вынесем эти атрибуты в отношение Отдел (рис. 8). Оставшиеся атрибуты образуют отношение Сотрудник(№ сотрудника, ФИО). Отношения Проект, Этапы_Проектов и Сотрудник уже находятся в 3НФ, т. к. все неключевые атрибуты в них зависят лишь от первичного ключа.

Система отношений, находящихся в 3НФ и отвечающих отношению Проект_Сотрудник_Отдел, представлена на рис. 8

№ отдела

Название отдела

001

Отдел продаж

003

Отдел разработок

Отношение Отдел.

№ сотрудника

ФИО

S001

Иванов

S002

Кузнецов

S003

Петров

Отношение Сотрудник.

№ проекта

Проект

1

Автовесы

2

Ж/д весы

1

Автовесы

2

Ж/д весы

2

Ж/д весы

Отношение Проект.

№ проекта

Этап проекта

№ сотрудника

1

4

S001

2

3

S001

1

2

S002

2

1

S002

2

1

S003

Отношение Этапы_Проектов.

Рис. 8. Отношения в 3НФ.

Сильно нормализованные отношения (находящиеся, по крайней мере, в 3НФ) лучше, чем слабо нормализованные (1НФ, 2НФ), отражают предметную область (в такие отношения проще внести изменения, отвечающие изменениям в предметной области), легче в сопровождении, требуют меньше программного кода для обработки данных. Наконец, для них быстрее выполняются операции модификации данных. Однако операция выборки для таких отношений выполняется несколько медленнее.

Тем не менее, существуют системы, для которых более предпочтительными оказываются слабо нормализованные модели данных. Это хранилища данных, системы интеллектуального анализа данных и т. д. Они предназначены, в основном, для нахождения зависимостей между данными и оперируют с большими массивами данных, добавляющимися относительно редко. Запросы к таким системам обычно весьма сложны, а скорость выполнения запросов не критична.

Третья нормальная форма в большинстве случаев достаточна для построения адекватной модели данных. Но бывают ситуации, когда и отношение в 3НФ содержит избыточность и может подвергаться аномалиям вставки (например, когда первичный ключ является составным и значения отдельных его атрибутов могут повторяться). Такая проблема решается путем дальнейшей нормализации, т. е. приведением к нормальной форме Бойса-Кодда.

Определение Нормальная форма Бойса-Кодда (НФБК) - это отношение, находящееся в 3НФ, в котором каждый атрибут, зависящий от первичного ключа, является потенциальным ключом.

Переход от 3НФ к НФБК, как и прежде, производится с помощью декомпозиции. Однако такой переход не всегда приводит к желаемым результатам, т. к. после него иногда разрываются функциональные зависимости и часть информации может быть потеряна. Поэтому решение о переходе к НФБК принимается, исходя из требований конкретной ситуации.

НФБК устраняет любые аномалии, связанные с функциональными зависимостями. Однако между атрибутами отношения может существовать еще один тип зависимости, приводящий к избыточности - многозначная зависимость.

Определение Многозначная зависимость между атрибутами А, В, и С (обозначается , ) возникает, если для каждого значения атрибута А существуют соответствующие множества значений атрибутов В и С, причем эти два множества не зависят друг от друга. Если или , то многозначная зависимость , называется тривиальной.

Определение Четвертой нормальной формой (4НФ) называется отношение, которое находится в НФБК и не содержит нетривиальных многозначных зависимостей.

Еще одной из форм зависимости является т. н. зависимость соединения.

Отношение R с произвольными подмножествами множества атрибутов А, В, С,…,Z удовлетворяет зависимости соединения тогда и только тогда, когда каждое допустимое значение R равно соединению его проекций по подмножествам А, В, С,…,Z множества атрибутов.

Если некоторое отношение подчиняется зависимости соединения, то его можно разбить на меньшие компоненты - проекции, определяемые этой зависимостью. Процесс декомпозиции может длиться до тех пор, пока все результирующие отношения не будут находиться в пятой нормальной форме.

Определение Пятая нормальная форма - это отношение без зависимостей соединения.

Итак, процедуру нормализации обобщенно можно представить в следующей форме:

-исходное отношение, находящееся в 1НФ, нужно разбить на проекции, исключив все функциональные зависимости, где детерминанты не являются потенциальными ключами (переход к НФБК).

- для перехода к 5НФ систему отношений в НФБК необходимо разбить на проекции, позволяющие исключить все многозначные зависимости и все зависимости соединения.

- процесс разбиения на проекции должен выполняться без потерь (т. е. быть обратимым).

Необходимо отметить, что технологии нисходящего проектирования также позволяют получить набор полностью нормализованных отношений.

Литература

1. Конноли Т., Бегг К. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. 3-е издание. - М.: Издательский дом "Вильямс", 2013. - 1440 с.

2. Дейт К. Дж. Введение в системы баз данных, 8-е издание. . - М.: Издательский дом "Вильямс", 2006. - 1328 с.

3. Кузнецов М. В., Симдянов И. В. MySQL5.- СПб.: БХВ-Петербург, 2006. - 1024 с.

4. Моисеенко С. И. SQL. Задачи и решения. - СПб.: Питер, 2006. - 256 с.: ил.

Размещено на Allbest.ru


Подобные документы

  • Изучение и анализ функциональных возможностей СУБД. Структура языка реляционных БД SQL (Structured Query Language). Типы данных SQL. Операторы DDL - операторы определения объектов базы данных. Примеры использования операторов манипулирования данными.

    курсовая работа [39,6 K], добавлен 21.07.2012

  • Объекты модели хранения данных базы данных ORACLE. Взаимосвязь между логическими структурами. Средства манипулирования данными языка SQL, данными языка SQL. Структура выполнения простейших запросов. Формирование критерия отбора. Сортировка данных.

    презентация [120,1 K], добавлен 14.02.2014

  • Внутренний язык СУБД для работы с данными. Результат компиляции DDL-операторов. Описание DML-языка, содержащего набор операторов для поддержки основных операций манипулирования содержащимися в базе данными. Организация данных и управление доступом в SQL.

    лекция [131,0 K], добавлен 19.08.2013

  • Типы ограничений, поддерживающие целостность в реляционной модели данных. Определение значения поля первичного ключа с помощью генератора. Добавление, изменение и удаление записей в таблицу базы данных "Библиотека" на языке программирования SQL.

    лабораторная работа [30,5 K], добавлен 10.10.2012

  • Структура таблицы и типы данных. Ввод данных в ячейки таблицы. Создание запросов на выборку, удаление, обновление и добавление записей, на создание таблицы. Основное различие между отчетами и формами, их назначение. Создание отчетов для базы данных.

    курсовая работа [1,9 M], добавлен 17.06.2014

  • Работа с хранящейся в базах данных информацией. Язык описания данных и язык манипулирования данными. Распространение стандартизованных языков. Структурированный язык запросов SQL. Язык запросов по образцу QBE. Применение основных операторов языка.

    презентация [76,2 K], добавлен 14.10.2013

  • Использование баз данных менеджерами автосалонов для повышения качества и скорости обслуживания клиентов. Создание запросов на добавление, удаление, обновление данных. Запросы перекрестный, на выборку. Кнопочная форма базы данных с практичным интерфейсом.

    курсовая работа [1,6 M], добавлен 10.02.2014

  • Классификация моделей построения баз данных. Работа с реляционными базами данных: нормализация таблиц, преобразование отношений полей, преобразование функциональной модели в реляционную. Понятие языка определения данных и языка манипуляции данными.

    реферат [123,0 K], добавлен 22.06.2011

  • Назначение и виды запросов в Microsoft Access. Реляционная база данных. Разработка запроса в режиме конструктора. Технология решения задачи в Excel. Запросы на обновление, добавление и удаление данных. Перенос слов при вводе в ячейку длинных заголовков.

    курсовая работа [1,3 M], добавлен 23.04.2013

  • Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.

    контрольная работа [31,2 K], добавлен 12.12.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.