W Cat - SQL за 24 часа
Мне кажется, что нормализация все же предпочтительнее денормализации. Разве не так?
Нормализация может быть предпочтительной. Но, в зависимости от ситуации, может быть более предпочтительной и Денормализация. Не забывайте, что здесь выбор зависит от очень большого числа факторов. Наверное, вы сначала нормализуете свою базу данных, чтобы уменьшить число повторений, но после этого так же вероятно, что вы проведете частичную денормализацию, чтобы улучшить производительность.
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
Тесты
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 не обязательно должен соответствовать списку столбцов в определении соответствующей таблицы, а вот список вводимых значений должен обязательно соответствовать списку избранных столбцов
Ввод данных из другой таблицы
В таблицу можно вводить данные, полученные в результате запроса к другой таблице, воспользовавшись комбинацией операторов INSERT и SELECT. Коротко говоря, запрос - это обращение к базе данных, имеющее целью получение данных. О запросах будет идти речь в ходе урока 7. Запрос можно сравнить с вопросом пользователя к базе данных, а возвращенные данные - с полученным ответом. Если скомбинировать операторы INSERT и SELECT, имеется возможность ввести в таблицу данные, полученные в результате запроса.