Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.rtf
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.87 Mб
Скачать

Третья нормальная форма (3нф)

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

Чтобы перейти от 2НФ ->3НФ, нужно выполнить следующие действия:

1.) Определить все поля, от которых зависят все поля.

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

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

16.11.2012

Преимущество языка SQL.

1)Стандартность; 2)независимость от конкретных СУБД; 3)возможность переноса с одной вычислительной системы на другую; 4)язык прост для изучения; 5)SQL обеспечивает пользователям немедленный доступ к данным (интерактивные запросы); 6)возможность программного доступа к БД; 7)обеспечение различного представления данных; 8)возможность динамического изменения и расширения структуры БД; 9)поддержка архитектуры клиент-сервер.

Запись SQL операторов:

Оператор SQL состоит из служебных слов и слов определяемых пользователя.

Идентификаторы языка SQL предназначены для обозначения объектов в БД. Стандарт SQL задает следующий набор символов который используется по умолчанию: строчные и прописные латинские буквы, цифры и символы подчеркивания. На формат идентификатора накладываются следующие ограничения: 1)длинна до 128 символов; 2)должен начинаться с буквы; 3)не может содержать пробел; 4)компоненты языка не чувствительны к регистру.

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

Типы данных SQL:

1)CHAR или CHAR(n) – символьные строки фиксированной длинны.

2)VARCHAR(n) – символьная строка переменной длинны.

3)INTEGER или INT – целое длинной 4 байта.

4)SMALLINT – короткое целое число размером в 2 байта.

5)FLOAT и SMALLFLOAT – вещественные числа с плавающей точкой (размером 8 и 4 байта).

6)DECIMAL(p) – тип аналогичный типу FLOAT с числом значащих цифр p.

7)DECIMAL(p,n) – аналогична предыдущему, но указывается общее количество цифр p и количество цифр после запятой n.

8)MONEY(p,n) – аналогичен предыдущему но для него существуют специальные методы форматирования.

9)DATE – тип данных для хранения данных.

10)TIME – тип данных для хранения времени.

11)INTERVAL – тип данных для хранения временного интервала.

12)DATETIME – тип данных для хранения моментов времени.

13)BINARY, BYTE, BLOB – двоичные типы данных.

14)SERIAL – тип данных на основе INTEGER но он работает как счетчик.

Для всех типов данных имеется общее значение NULL (не определено).

CREATE TABLE <имя_таблицы>

(<имя_столбца> <тип_столбца>

[NOT NULL]

[UNIQUE / PRIMARY KEY]

[REFERENCES <имя_мастер_таблицы> (<имя столбца>)]

, …)

CREATE TABLE authors (

Au_id INTEGER PRIMARY KEY,

Author VARCHAR (35) NOT NULL

);

CREATE TABLE book (

Book_id INTEGER PRIMARY KEY,

Book_name VARCHAR (40) NOT NULL,

Author INT REFERENCES authors (au_id)

);

23.11.2012

Модификация и удаление таблиц

Специальная команда Alter Table предназначена для модификации структуры таблицы. С ее помощью можно выполнять следующие функции: 1)добавить в таблицу новый столбец; 2)удалить столбец из таблицы; 3)добавить или удалить первичный ключ таблицы; 4)добавить или удалить внешний ключ таблицы; 5)добавить или удалить условие уникальности; 6)добавить или удалить условие назначения.

1)Добавление столбца

ALTER TABLE <имя_таблицы> ADD

(<имя_столбца> <тип_столбца>

[NOT NULL]

[UNIQUE / PRIMARY KEY]

[PERFERENCES <имя_мастер_таблицы>

[<имя_столбца>]]

,…)

Команда добавляет поле цена в таблицу book

ALTER TABLE book ADD zena INTEGER NOT NULL

2)Модификация столбца

ALTER TABLE <имя_таблицы>

ALTER COLUMN (<имя_столбца> <тип_столбца>

[NOT NULL]

[UNIQUE / PRIMARY KEY]

[PERFERENCES]

<имя_мастер_таблицы> <имя_столбца>]]

,…)

Изменяем тип поля цена

ALTER TABLE book

ALTER COLUMN zena CHAR(10)

Замечание: изменение столбца не возможно если: 1)столбец участвует в ограничениях как первичный или внешний ключ; 2)на столбец наложены ограничения целостности; 3)со столбцом связанно значение по умолчанию.

Замечание2: определяя для столбца новый тип необходимо помнить что старый тип данных должен конвертироваться в новый

3)Удаление столбца

ALTER TABLE <имя_таблицы> DROP

(<имя_столбца>

,…)

Удаление столбца цена

ALTER TABLE book DROP zena

Замечание: нельзя удалять столбцы с ограничениями целостности.

4)Удаление таблиц

DROP TABLE <имя_таблицы>

DROP TABLE book.

Замечание: невозможно удалить таблицу если на нее ссылается другая таблица.

24.11.2012

Операторы манипулирования данными

1)INSERT INTO

INSEPT INTO authors(author,aulid)

VALUES(“Пушкин А.А.”,1)

2)Модификация записей

UPDETE <имя_табл> SET <имя_столб>=<зн>,…

[WHERE <условие>]

Если указано условие то, команда модификации применяется только к тем записям для которых оно выполняется. А если условие не задано то команда применяется ко всем записям.

UPDATE book SET book_name=”Сказки”

WHERE author=”Пушкин А.С.”

Замечание: в качестве условия используется логические выражения над константами и полями. В условиях допускаются: 1)операции сравнения(>,<,<=,>=,=,<>); 2)операции проверки поля на значение 0(IS NULL; IS NOT NULL); 3)операции проверки на вхождение в диапазон(BETWEEN; NOT BEETWEEN); 4)операции проверки на вхождение в список(IN; NOT IN); 5)операции проверки на вхождение подстроки(LIKE; NOT LIKE); 6)отдельные операции соединяются связями AND, OR, NOT и группируются с помощью скобок.

3)Удаление записей

DELETE FROM <имя таблицы>

[WHERE <условие>]

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

WHERE FROM book

WHERE book_name=”Сказки”

28.11.2012

Организация запросов на выборку данных при помощи языка SQL.

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

SELECT [ALL / DISTINCT] <список_выбора>

FROM <имя_таблицы>

[ WHERE <условие> ]

[ GROUP BY <имя_столбца>,… ]

[ HAVING <условие> ]

[ORDER BY <имя_столбца> [ASC / DESC],… ]

Рассмотрим простую форму этого оператора. Этот оператор всегда начинается с ключевого слова SELECT. В конструкции список выбора определяется столбец или столбцы которые необходимо отразить в результате. Если список выбора состоит из одного символа «*», то это значит что в результат необходимо включить все столбцы указанной таблицы.

SELECT authors FROM authors.

SELECT * FROM authors.

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

SELECT book_name FROM book WHERE yearpub >1996.

SELECT book_name FROM book WHERE yearpub >=1995 AND yearpub <=1997

SELECT book_name FROM book WHERE yearpub BETWEEN 1995 AND 1997

SELECT book_name FROM book WHERE yearpub IN (1995,1996,1997)

Рассмотрим организацию вложенных запросов на следующем примере. Предположим необходимо найти все книги у которых автор Пушкин.

SELECT book_name FROM book WHERE author IN

(SELECT au_id FROM authors WHERE author=’Пушкин А.С.’)

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

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

WHERE <имя_столбца> LIKE <образец> [ESCEPE<ключевой_символ>]

Образец заключается в кавычки и должен содержать шаблон подстроки для поиска. Для задания шаблона можно использовать специальные символы:

Несколько символов – a*a (aa, aBa, aBBBa)

*ab* (abc, AABB, Xab)

Специальные символы – a[*]a (a*a)

Несколько символов – ab* (abcdefg, abc)

Один символ – a?a (aaa, a3a, aBa)

Символ в определенном – [a-z] (f,p,j)

Символы вне определенного – [!a-z] (9,&,%)

Не цифра – [!0-9] (A., a, &)

Тогда для поиска книг со сказками реализуем следующий запрос:

SELECT book_name FROM book WHERE book_name LIKE ‘*сказки*’

При выполнении оператора SELECT результат может иметь несколько записей с одинаковыми значениями. Что бы исключить повторяющиеся записи используют ключевое слово DISTINCT, а если в результат нужно включить все строки, то используют ключевое слово ALL.

5.12.2012

Функции в запросах SQL.

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

Функции SUM, AVG, MIN, MAX, COUNT…

Рассмотрим использование простейших функций в SQL, таких как сумма, минимальное и максимальное значение, среднее значение и т.п.

Пусть в нашей таблице book есть поле price(цена).

1)Рассмотрим пример вывода среднего значения цены все книг:

SELECT AVG(book.price) AS / средняя цена книг / FROM book

2)Аналогично можно вычислить минимальное и максимальное значения (MIN, MAX), общую сумму (SUM) и т.д.

Перечисленные выше функции для определения своего значения используют результат запроса целиком. Такие функции называются агрегатными.

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

3)Примером такой функции является SQL функция вычисления длинны текстового поля LEN.

Вычислим длину текстового поля с названием книг для каждой записи:

SELECT book_name, LEN(book.book_name) AS/длинна/FROM book

4)А теперь вычислим максимальное значение длины поля book_name.

SELECT MAX (LEN(book.book_name) AS/максимальная длина/FROM book

5)Ну и в заключении все вместе:

SELECT

SUM(book.price) AS/Сумма/,

AVG(book.price) AS/Среднее/,

MIN(book.price) AS/Минимум/,

MAX(book.price) AS/максимум/,

COUNT(*) AS/Количество записей/,

MAX(LEN(book.book_name)) AS/Максимальная длина/

FROM book;

Обратите внимание на аргументы функции COUNT. Мы указали в качестве аргумента (*), поскольку хотим получить именно общее число записей. Если указать, например COUNT(book_name), то результатом будет число непустых значений book_name.

Преобразование текста

Часто, текстовые значения заполняются