Выбрать главу
Тесты

1. Верно ли следующее утверждение: "Нормализация - это процесс группировки данных в логически связанные группы?"

2. Верно ли следующее утверждение: "Отсутствие повторяющихся и избыточных данных и, таким образом, нормализация базы данных - в любом случае лучше всего?"

3. Верно ли следующее утверждение: "Если данные находятся в третьей нормальной форме, они автоматически находятся и в первой, и во второй нормальной формах?"

4. Какое главное преимущество имеет денормализованная база данных по сравнению с нормализованной?

5. Каковы основные недостатки денормализации?

Упражнения

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

Служащие:

Анжела Смит, секретарь, 317-545-6789, просп. Широкий, 1, п. я. 73, Гринс-бург, шт. Индиана, 47890, $9,50 в час, приступила к работе 22 января 1996 г., идент. код 323149669.

Джек Ли Нельсон, продавец, ул. Главная, 3334, Браунсбург, шт. Индиана, 45687, 317-852-9901, $35000 в год, идент. код 312567342, работает с 28.10.95. Клиенты:

Дичь и охотничьи аксессуары Роберта, просп. Лафайет, 5612, Индианапо-лис, шт. Индиана, 46224, 317-291-7888, код клиента 432А.

Молочный бар Рида, 10-я Западная улица, Индианаполис, шт. Индиана, 46245, 317-271-9823, код клиента 117А.

Заказы:

Код клиента 117А, дата последнего заказа 20 декабря 1999 г., заказанный товар - салфетки, код товара - 661.

5-й час Манипуляция данными

На этом уроке вы ознакомитесь с той частью SQL, которая называется языком манипуляций данными (Data Manipulation Language - DML). DML является частью SQL, используемой при изменении данных и таблиц в реляционных базах данных

Основными на этом уроке будут следующие темы.

• Обзор языка манипуляций данными

• Инструкции по манипуляции данными в таблицах

• Концепции, лежащие в основе размещения данных в таблицах

• Удаление данных из таблиц

• Изменение данных в таблицах

Обзор возможностей манипуляции данными

Язык манипуляций данными (DML) является частью SQL, обеспечивающей пользователю базы данных возможность вносить реальные изменения в данные реляционной базы данных. С помощью DML пользователь может пополнять таблицы новыми данными, обновлять уже имеющиеся данные и удалять их из таблиц. С помощью команд DML можно также выполнять и некоторые типы запросов.

В SQL имеется три основных команды DML.

INSERT UPDATE DELETE

Команда SELECT, которую тоже можно использовать с командами DML, будет обсуждаться подробно в ходе урока 7, "Знакомство с запросами".

Заполнение таблиц новыми данными

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

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

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

Ввод данных в таблицу

Чтобы ввести новые данные в таблицу, используйте оператор INSERT. Как ясно из показанного ниже его базового вида, оператор INSERT имеет несколько опций.

insert into имя схемы.имя таблицы

VALUES ('значение!', 'значение2', [ NULL ] );

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

В следующем примере новая запись вводится в таблицу PRODUCTS_TBL.

Структура таблицы:

products_tbl

Имя столбца Null? Тип данных

PROD_ID NOT NULL VARCHAR2(10)

PROD_DESC NOT NULL VARCHAR2(25)

COST NOT NULL NUMBER(6,2)

Пример использования оператора INSERT:

INSERT INTO PRODUCTSJTBL

VALUES ('7725','КОЖАНЫЕ ПЕРЧАТКИ',24.99);

1 строка создана.

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

Имя столбца

Null?

Тип данных

PROD ID PROD DESC COST

NOT NULL

NOT NULL

NOT NULL

VARCHAR2 (10)

VARCHAR2 (25)

NUMBER (6, 2)

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

Ввод данных в определенные столбцы таблицы

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

INSERT INTO EMPLOYEE_TBL

(EMP_ID, LAST_NAME, FIRST_NAME, MIDDLE_NAME, ADDRESS, CITY, STATE, ZIP, PHONE) VALUES

('123456789','SMITH', 'JOHN', 'JAY', •12 BEACON ST', •INDIANAPOLIS', 'IN', '46222', '3172996868');

1 строка создана

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

INSERT INTO ИМЯ_СХЕМЫ.ИМЯ_ТАБЛИЦЫ ('СТОЛБЕЦ!', 'СТОЛБЕЦ2') VALUES ('ЗНАЧЕНИЕ!', 'ЗНАЧЕНИЕ2');

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

Структура таблицы:

ORDERSJTBL

Имя столбца Null? Тип данных

ORD_NUM NOT NULL VARCHAR2(10)

CUST_ID NOT NULL VARCHAR2(10)

PROD_ID NOT NULL VARCHAR2(10)

QTY NOT NULL NUMBER(4)

ORD_DATE DATE

Пример использования оператора INSERT:

insert into orders_tbl (ord_num,cust_id,prod_id,qty)

VALUES ('23A16',409','7725',2);

1 строка создана.

Здесь после имени таблицы в скобках указан список столбцов. Это список всех столбцов, в которые вводятся данные. В данном случае в списке нет только столбца ORD_DATE. Из определения таблицы видно, что столбец ORD_DATE не требует обязательного наличия данных в каждой строке, поскольку в определении таблицы для этого столбца не указано NOT NULL. NOT NULL означает, что пустые значения для столбца не допускаются. Порядок в списке значений должен соответствовать порядку ввода значений в таблицу, задаваемому списком столбцов.

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