Создание таблиц
А.М. Гудов 2Заключение Имеется несколько способов соединения таблиц: –Эквисоединение –Не-эквисоединение –Внешнее соединение –Соединение с собой WHEREОтсутствие предложения WHERE приводит к возникновению декартова произведения таблиц. Использование псевдонимов таблиц ускоряет доступ к базе данных. Для соединения таблицы с собой использование псевдонимов обязательно.
А.М. Гудов 3 Структуры данных База данных Oracle7 может содержать многочисленные структуры данных. Table –Таблица (Table)Хранит данные View –ПредставлениеПодмножество данных из (View)одной или нескольких таблиц Sequence –Последователь-Генерирует значения ность (Sequence)первичного ключа Index –Индекс (Index)Повышает производительность некоторых запросов Определять структуры таблиц следует на этапе проектирования базы данных.
А.М. Гудов 4 Создание таблиц: синтаксис CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint],... [table_constraint]); [table_constraint]); CREATE TABLE [schema.]table (column datatype [DEFAULT expr] [column_constraint],... [table_constraint]); [table_constraint]); DEFAULT Параметр DEFAULT задает значение столбца по умолчанию при вставке строк. SYSDATEUSER Допускаются строковые константы, выражения и такие функции SQL, как SYSDATE и USER. Недопустимыми значениями являются имена других столбцов и псевдостолбцы. Тип данных значения, используемого по умолчанию, должен совпадать с типом данных столбца.... start_date DATE DEFAULT SYSDATE,...
А.М. Гудов 5 Ссылки на таблицы других пользователей Ограничения должны ссылаться на таблицы в пределах одной базы данных. Таблицы других пользователей отсутствуют в схеме данного пользователя. Имя владельца следует использовать в качестве префикса к имени таблицы. Правила присвоения имен Должны начинаться с буквы. Могут включать от 1 до 30 символов. Могут содержать только символы A-Z, a-z, 0-9, _ (подчеркивание), $ и #. Не могут совпадать с именем другого объекта, принадлежащего этому же пользователю. Не могут совпадать с зарезервированным словом сервера Oracle7.
А.М. Гудов 6 Типы данных VARCHAR2(размер) CHAR(размер) NUMBER NUMBER(p,s) DATELONG RAW и LONG RAW Описание Символьные значения переменной длины Символьные значения фиксированной длины Числа с плавающей точкой Числовые значения Значения даты и времени Символьные значения переменной длины размером до 2Гб VARCHAR2LONG Эквиваленты VARCHAR2 и LONG для двоичных данных
А.М. Гудов 7Ограничения Реализуют правила по обеспечению целостности данных на уровне таблицы. Предотвращают удаление таблицы при наличии взаимозависимостей. В Oracle7 существуют следующие виды ограничений: –NOT NULL –UNIQUE –PRIMARY KEY –FOREIGN KEY –CHECK Имена ограничениям присваивайте сами. В противном случае сервер может создать имя в формате SYS_Cn. Создавайте ограничения: –В момент создания таблицы. –После создания таблицы. Используйте ограничения на уровне столбца или таблицы.
А.М. Гудов 8 Ограничение: синтаксис Ограничение на уровне столбца Ограничение на уровне таблицы column [CONSTRAINT constraint_name] constraint_type, column,... [CONSTRAINT constraint_name] constraint_type [CONSTRAINT constraint_name] constraint_type (column,...), (column,...),column,... [CONSTRAINT constraint_name] constraint_type [CONSTRAINT constraint_name] constraint_type (column,...), (column,...),
А.М. Гудов 9 Ограничение NOT NULL Не допускает неопределенных значений в столбце. Задается на уровне столбца. Пример: CREATE TABLEfriend... phoneVARCHAR2(15) NOT NULL,... phoneVARCHAR2(15) NOT NULL,... last_nameVARCHAR2(25) last_nameVARCHAR2(25) CONSTRAINT friend_last_name_nn NOT NULL,... CONSTRAINT friend_last_name_nn NOT NULL,... CREATE TABLEfriend... phoneVARCHAR2(15) NOT NULL,... phoneVARCHAR2(15) NOT NULL,... last_nameVARCHAR2(25) last_nameVARCHAR2(25) CONSTRAINT friend_last_name_nn NOT NULL,... CONSTRAINT friend_last_name_nn NOT NULL,...
А.М. Гудов 10 Ограничение UNIQUE Задает один или несколько столбцов, значение или комбинация значений в которых не могут повторяться в двух строках таблицы. UNIQUEДопускает неопределенные значения, если ключ UNIQUE создан по одному столбцу. Может быть задано как для таблицы, так и для столбца. Автоматически создает уникальный индекс.... phoneVARCHAR2(10) CONSTRAINT s_emp_phone_uk UNIQUE,... CONSTRAINT s_emp_phone_uk UNIQUE, phoneVARCHAR2(10) CONSTRAINT s_emp_phone_uk UNIQUE,... CONSTRAINT s_emp_phone_uk UNIQUE,...
А.М. Гудов 11 Ограничение PRIMARY KEY Создает первичный ключ таблицы. Каждая таблица может иметь только один первичный ключ. Обеспечивает отсутствие повторяющихся столбцов. Не допускает неопределенных значений ни в одной компоненте первичного ключа. Может быть задано как на уровне таблицы, так и на уровне столбца. Автоматически создает уникальный индекс.... idNUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,... CONSTRAINT s_emp_id_pk PRIMARY KEY, idNUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,... CONSTRAINT s_emp_id_pk PRIMARY KEY,...
А.М. Гудов 12 Ограничение FOREIGN KEY Задает столбец или набор столбцов в качестве внешнего ключа таблицы. Устанавливает связь с первичным или уникальным ключом в той же самой таблице или между таблицами. Может быть задано как на уровне таблицы, так и на уровне столбца. NULLЗначение внешнего ключа должно совпадать с существующим значением в родительской таблице или быть неопределенным (NULL).... dept_idNUMBER(7) CONSTRAINT s_emp_dept_id_fk CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),... REFERENCES s_dept(id), dept_idNUMBER(7) CONSTRAINT s_emp_dept_id_fk CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id),... REFERENCES s_dept(id),...
А.М. Гудов 13 Ключевые слова ограничения FOREIGN KEY FOREIGN KEYFOREIGN KEY –Определяет столбец в дочерней таблице как внешний ключ. REFERENCESREFERENCES –Указывает таблицу и столбец в родительской таблице. ON DELETE CASCADEON DELETE CASCADE –Разрешает удаление в родительской таблице и удаление зависимых строк в дочерней таблице.
А.М. Гудов 14 Ограничение CHECK Задает условие, которому должна удовлетворять каждая строка. В выражениях запрещены: CURRVAL NEXTVALLEVELROWNUM –Ссылки на псевдостолбцы CURRVAL, NEXTVAL, LEVEL и ROWNUM. SYSDATEUIDUSER USERENV –Вызовы функций SYSDATE, UID, USER и USERENV. –Запросы со ссылками на другие значения в других строках. Это ограничение может быть задано как на уровне таблицы, так и на уровне столбца.
А.М. Гудов 15 Создание таблицы на основе бланка экземпляра таблицы CREATE TABLE имя_таблицы 1.Создать командный файл. Включить команду CREATE TABLE имя_таблицы. 2.Отобразить имена столбцов, типы данных и их длину. NOT NULL PRIMARY KEY 3.Ограничение NOT NULL задавать на уровне столбцов во всех случаях, кроме главного ключа (PRIMARY KEY). PRIMARY KEY 4.Задать ограничение PRIMARY KEY. UNIQUECHECKFOREIGN KEY 5.Задать ограничения UNIQUE, CHECK и FOREIGN KEY. 6.Сохранить и выполнить командный файл.
А.М. Гудов 16 Бланк экземпляра таблицы: S_DEPT Имя столбцаIDNAMEREGION_ID Тип ключа Тип ключаPKFK NN/UK NN/UKNN, UNN, U2U2 Таблица FK Таблица FK S_REGION Столбец FK Столбец FK ID Тип данных Тип данныхNUMBERCHARNUMBER Длина Длина7257 Пример данных Пример данных10Finance1 31Sales1 32Sales2 33Sales3
А.М. Гудов 17 Создание таблицы: пример SQL> CREATE TABLE s_dept 2 (idNUMBER(7) 3 CONSTRAINT s_dept_id_pk PRIMARY KEY, 4 nameVARCHAR2(25) 5 CONSTRAINT s_dept_name_nn NOT NULL, 6 region_idNUMBER(7) 7 CONSTRAINT s_dept_region_id_fk REFERENCES 8 s_region (id), 9 CONSTRAINT s_dept_name_region_id_uk UNIQUE 10 (name, region_id));
А.М. Гудов 18 Создание таблицы: пример SQL> CREATE TABLE s_emp 2 (idNUMBER(7) 3 CONSTRAINT s_emp_id_pk PRIMARY KEY, 4 last_nameVARCHAR2(25) 5 CONSTRAINT s_emp_last_name_nn NOT NULL, 6 first_nameVARCHAR2(25), 7 useridVARCHAR2(8) 8 CONSTRAINT s_emp_userid_nn NOT NULL 9 CONSTRAINT s_emp_userid_uk UNIQUE, 10 start_dateDATE DEFAULT SYSDATE, 11 commentsVARCHAR2(25), 12 manager_idNUMBER(7), 13 titleVARCHAR2(25), 14 dept_idNUMBER(7) 15 CONSTRAINT s_emp_dept_id_fk REFERENCES 16 s_dept (id), 17 salaryNUMBER(11,2), 18 commission_pctNUMBER(4,2) 19 CONSTRAINT s_emp_commission_pct_ck CHECK 20 (commission_pct IN(10,12.5,15,17.5,20))); SQL> CREATE TABLE s_emp 2 (idNUMBER(7) 3 CONSTRAINT s_emp_id_pk PRIMARY KEY, 4 last_nameVARCHAR2(25) 5 CONSTRAINT s_emp_last_name_nn NOT NULL, 6 first_nameVARCHAR2(25), 7 useridVARCHAR2(8) 8 CONSTRAINT s_emp_userid_nn NOT NULL 9 CONSTRAINT s_emp_userid_uk UNIQUE, 10 start_dateDATE DEFAULT SYSDATE, 11 commentsVARCHAR2(25), 12 manager_idNUMBER(7), 13 titleVARCHAR2(25), 14 dept_idNUMBER(7) 15 CONSTRAINT s_emp_dept_id_fk REFERENCES 16 s_dept (id), 17 salaryNUMBER(11,2), 18 commission_pctNUMBER(4,2) 19 CONSTRAINT s_emp_commission_pct_ck CHECK 20 (commission_pct IN(10,12.5,15,17.5,20)));
А.М. Гудов 19 Создание таблицы посредством подзапроса Количество заданных столбцов должно совпадать с количеством столбцов в подзапросе. Для столбцов можно указать только имя, значение по умолчанию и правила целостности CREATE TABLE table [column(, column...)] [column(, column...)] AS subquery; AS subquery; CREATE TABLE table [column(, column...)] [column(, column...)] AS subquery; AS subquery; Создание таблицы и вставка строк с помощью команды CREATE TABLEAS подзапрос CREATE TABLE и параметра AS подзапрос.
А.М. Гудов 20 Создание таблицы с данными о всех сотрудниках отдела номер 41 из таблицы S_EMP. Помните о том, что копируется только ограничение NOT NULL. Создание таблицы посредством подзапроса CREATE TABLE emp_41 AS SELECTid, last_name, userid, start_date FROMs_emp WHERE dept_id = 41;
А.М. Гудов 21Заключение CREATE TABLE Таблицы базы данных создаются с помощью команды CREATE TABLE SQL. При создании таблицы указывается следующее: –Имя таблицы. –Имена столбцов, типы данных и их длина. –Ограничения, направленные на сохранение целостности данных. CREATE TABLE [schema.]table (column datatype [column_constraint],... [table_constraint]); [table_constraint]); CREATE TABLE [schema.]table (column datatype [column_constraint],... [table_constraint]); [table_constraint]);
А.М. Гудов 22Заключение Типы ограничений –NOT NULL –UNIQUE –PRIMARY KEY –FOREIGN KEY –CHECK UNIQUEИндексы по уникальным ключам (UNIQUE) PRIMARY KEYUNIQUE –Создаются автоматически при наличии ограничений PRIMARY KEY и UNIQUE. DESCRIBEКоманда DESCRIBE SQL*Plus –Показывает структуру таблицы.
А.М. Гудов 23 Задания для практического занятия