План
1 INSERT
2 1я нормальная форма
3 2я нормальная форма
Оператор INSERT
Оператор INSERT вставляет новые записи в таблицу.
При этом значения столбцов могут представлять собой
литеральные константы, либо являться результатом
выполнения подзапроса. В первом случае для вставки
каждой строки используется отдельный оператор INSERT;
во втором случае будет вставлено столько строк,
сколько возвращается подзапросом.
Синтаксис оператора следующий:
INSERT INTO <имя таблицы>[(<имя столбца>,…)]
{VALUES (<значение столбца>,…)}
| <выражение запроса>
| {DEFAULT VALUES}
Как видно из представленного синтаксиса, список столбцов
не является обязательным (об этом говорят квадратные скобки
в описании синтаксиса). В том случае, если он отсутствует,
список вставляемых значений должен быть полный, то есть
обеспечивать значения для всех столбцов таблицы.
При этом порядок значений должен соответствовать порядку,
заданному оператором CREATE TABLE для таблицы, в которую
вставляются строки. Кроме того, эти значения должны
относиться к тому же типу данных, что и столбцы,
в которые они вносятся.
Пример
INSERT INTO Product (type, model, maker)
VALUES (‘PC’, 1157, ‘B’);
INSERT INTO Product_D
SELECT *
FROM Product
WHERE type = ‘PC’;
Первая нормальная форма
Отношение находится в первой нормальной форме, если все его
атрибуты имеют простые (атомарные) значения. Другими словами,
значения в домене каждого атрибута отношения не являются ни списками,
ни множествами простых или сложных значений.
Определить понятия атомарности трудно. Значение, атомарное в
одном приложении, может быть неатомарным в другом. Можно
руководствоваться общим принципом, что значение не атомарно, если в
приложении оно используется по частям. Рассмотрим пример отношения,
представленного в табл. 6.4.
Таблица 6.4. Отношение РОЖДЕНИЕ
Имя Дата рождения
Анна 5 марта 1986
Александр 25 января 1987
Ольга 1 ноября 1987
Федор 14 сентября 1986
Если значение атрибута Дата рождения предполагается
использовать целиком, то в этом случае данное отношение находится в
1НФ. Если бы потребовалось выделить и отдельно использовать, скажем,
год, число, месяц, то это отношение не находилось бы в 1НФ, так как
требуемые данные являются только частями значения атрибута Дата
рождения. Чтобы перевести такое отношение в 1НФ, атрибут Дата
рождения должен быть разбит на части так, как показано в табл. 6.5.
Таблица 6.5. Отношение РОЖДЕНИЕ
Имя День рождения Месяц рождения Год рождения
Анна 5 Март 1986
Александр 25 Январь 1987
Ольга 1 Ноябрь 1987
Федор 14 Сентябрь 1986
Или, например, табл. 6.6 является ненормализованной, и она не
находится в 1НФ потому, что включает величины, являющиеся
совокупностью атомарных значений. Чтобы получить отношение РОД,
находящееся в 1НФ, необходимо его представить так, как это сделано в
табл. 6.7.
Таблица 6.6. Ненормализованная таблица РОД
Имя | Пол |
{Александр, Федор} | Мужской |
Ольга | Женский |
Таблица 6.7. Отношение РОД
Имя | Пол |
Александр | Мужской |
Федор | Мужской |
Ольга | Женский |