Брешенков А.В., Галямова Е.В., Сурков М.Н. - Предварительное знакомство с Oracle, Проектирование таблиц в Oracle Database 10g (1075562), страница 6
Текст из файла (страница 6)
Однако создавать такие индексывручную не рекомендуется, т. к. уникальность значения — понятие логическое, а нефизическое. Oracle автоматически создает уникальные индексы при задании правилцелостности unique и primary key.Создается индекс командой create index, синтаксис которой приведен ниже:create [ unique | bitmap ] index <имя> on <имя таблицы>(<имя столбца> {,<имя столбца>})Ключевое слово unique позволяет создать уникальный индекс.Ключевое слово bitmap создает индекс, построенный на битовых картах.
Такиеиндексы могут быть значительно эффективнее и компактнее традиционных индексов,основанных на B-деревьях1. В bitmap-индексах индексируются все значения, включаяnull. Составной bitmap-индекс может быть использован для поиска по любому изполей, входящих в индекс, при этом порядок перечисления полей в составном индексе неимеет значения. Однако, у bitmap-индексов есть ряд недостатков, существенноограничивающих их применение. Во-первых, они эффективны только при небольшомколичестве различных значений столбца.
Индексировать, например, даты или суммыпроводок следует традиционными индексами. Во-вторых, bitmap-индексы теряютэффективность при частом обновлении данных в таблице.Индекс в любой момент может быть уничтожен — это не повлияет наработоспособность приложений, хотя может существенно их замедлить.Уничтожается индекс командой drop index: drop index <имя>371.4.ПоследовательностиПоследовательности — объекты, генерирующие неповторяющиеся номера.
Этиобъекты полезны для генерации первичных ключей.Создаются последовательности командой create sequence:create sequence <имя> [start with <число>] [increment by<число>] [maxvalue <число>] [minvalue <число>] [cycle | nocycle][cache <число> | nocache] [order | noorder]Значения start with и increment by задают начальное значениепоследовательности и шаг, с которым будет увеличиваться значение. Задание начальногозначения и шага, отличных от 1, может оказаться полезным в распределенной базе данных— если, например, на двух серверах заданы начальные значения 1 и 2 и шаг 10, то ключи,сгенерированные разными серверами, будут уникальны в пределах обоих серверов.Oracle не следит, чтобы все значения, выбранные из последовательности, были както использованы. Если, например, транзакция, выбравшая очередное значение, будетотменена, то выбранное значение будет утеряно.Параметры minvalue и maxvalue определяют минимальное и максимальноезначения, которые могут быть выбраны из последовательности.
Если минимальное(максимальное) значение будет достигнуто, то очередное обращение кпоследовательности приведет к ошибке:ORA-08004: sequence <имя>.NEXTVAL exceeds MAXVALUE andcannot be instantiatedЕсли указан параметр cycle, то по достижении одной из границпоследовательность будет снова генерировать числа, начиная с другой границы. Параметрcache управляет кэшированием значений.
Если этот параметр задан, то обращения кпоследовательности будут кэшироваться, т. е. за один раз будет выбираться сразунесколько значений. Это ускоряет работу, но приводит к потере большого количествазначений, если за сессию происходит мало обращений к последовательности.В случае, если в команде create sequence указано ключевое слово order,Oracle гарантирует, что выбранное из последовательности значение будет больше (приотрицательном шаге — меньше), чем все предыдущие. В противном случае порядокможет быть нарушен, но, как правило, это неважно.Последовательность имеет два атрибута: nextval — следующее уникальноезначение и currval — последнее выбранное значение. Обратиться к атрибуту currval38можно только в том случае, если в текущей сессии уже было обращение к nextval.Таким образом, значение currval для каждой сессии свое.Для обращения к последовательности (а также к любым объектам, не являющимсяданными таблицы, например, функциям) применяется конструкция select ...
fromdual:select seq_emp.currval from dualORA-08002: sequence SEQ_EMP.CURRVAL is not yet defined inthis sessionselect seq_emp.nextval from dual1.5.СинонимыСиноним — дополнительное имя для объекта БД — таблицы, представления,последовательности или хранимой процедуры. Синоним не требует физическогопространства, кроме какдлясвоегоопределениявсловаре данных.Создаетсясиноним командойcreate synonym:create [public] synonym <имя> for <имя объекта>Уничтожается синоним командой drop:drop synonym <имя>Синоним может быть переименован командой rename: rename <имя> to<новое имя>2. Практическая часть2.1.Таблицы2.1.1.Создание таблицы1.
На главной странице нажмите на иконку Object Browser.2. В списке выбрать Create, а затем Table.3. В поле Table Name ввести имя таблицы (personal_info)4. Введите следующие имена столбцов. Выберите тип данных и не оставляйтеполе Not Null пустым, где будут вводиться данные.39employee_idbirth_datesocial_security_idmarital statusdependents_claimedNUMBER(6,0)DATEVARCHAR2(12)VARCHAR2(10)NUMBER(2,0)NOT NULLNOT NULLNOT NULLcontact_namecontact_phonecontact_addressVARCHAR2(45)VARCHAR2(20)VARCHAR2(80)NOT NULLNOT NULLNOT NULLВ итоге должно получиться следующее:5. Далее необходимо нажать Next.6.
На странице Primary Key оставить все без изменений и нажать Next.7. На странице Foreign Key оставить все без изменений и нажать Next.8. На странице Constraints оставить все без изменений и нажать Finish.9. На странице Create Table можно нажать кнопку SQL для просмотра SQLзапросов, которые использовались для создания таблицы.10. Далее необходимо нажать кнопку Create для создания таблицы.2.1.2.Добавление столбцов в таблицу.1. На главной странице нажмите на иконку Object Browser.2. В Object list необходимо выбрать Tables.
Далее выбрать имя таблицы,которую необходимо изменять (personal_info).3. Затем нажать кнопку Add Column.404. На странице Add Column введите имя добавляемого столбца(contact_email). В поле Nullable выбрать значение NULL, тип данных VARCHAR2, длина – 30.5. Далее нажать кнопку Next, а затем на следующей странице нажать кнопкуFinish для добавления столбца. На последней странице так же можнопосмотреть SQL-запросы, нажав на кнопку SQL.2.1.3.Изменение столбца в таблице1.
На главной странице нажмите на иконку Object Browser2. В Object list необходимо выбрать Tables. Далее выбрать имя таблицы,которую необходимо изменять (personal_info).3. Затем нажать кнопку Modify Column.4. Выбрать столбец contact_email. Измените длину типа данных VARCHAR2на 40. В поле Nullable выбрать значение NOT NULL.5. Далее нажать Next.6. Нажать кнопку Finish для завершения операции.412.1.4.Удаление столбца из таблицы1. На главной странице нажмите на иконку Object Browser.2.
В Object list необходимо выбрать Tables. Далее выбрать имя таблицы,которую необходимо изменять (personal_info).3. Нажмите на кнопку Drop Column.4. Выберете столбец contact_address и нажмите Next.5. Нажмите Finish для завершения операции2.1.5.Создание первичного ключа1. На главной странице нажмите на иконку Object Browser.2. В Object list необходимо выбрать Tables.
Далее выбрать имя таблицы,которую необходимо изменять (personal_info)3. Выберете вкладку Constraint.4. Нажмите на кнопку Create.5. В окне Add Constraint в Constraint Type выберете тип Primary Key ивведите следующую информацию:Constraint Name: PERSONAL_INFO_PKEYConstraint Type: Primary KeyPrimary Key Column 1: EMPLOYEE_ID(NUMBER)6. Нажмете кнопку Next.7. Нажмите кнопку Finish для завершения операции.2.1.6.Создание вторичного ключа1. На главной странице нажмите на иконку Object Browser.2. В Object list необходимо выбрать Tables.
Далее выбрать имя таблицы,которую необходимо изменять (personal_info)3. Выберете вкладку Constraint.424. Нажмите на кнопку Create.5. В окне Add Constraint в Constraint Type выберете тип Foreign Key ивведите следующую информацию:Constraint Name: PERSONAL_INFO_FKEYForeign Key Column: EMPLOYEE_IDReference Table Name: EMPLOYEESReference Table Column List: EMPLOYEE_ID6. Поставьте галочку на On Delete Cascade7. Нажмите Next8. Нажмите Finish для завершения операции.2.1.7.Добавление данных в таблицу1.
На главной странице нажмите на иконку Object Browser.2. В Object list необходимо выбрать Tables. Далее выбрать имя таблицы,которую необходимо изменять (personal_info)3. Выберете вкладку Data.4. Нажмите кнопку Insert Row.5. В окне Create Row введите следующую информацию:employee_id: 142birth_date: 01-SEP-65social_security_id: 555-11-4444marital_status: Marrieddependents_claimed: 4contact_name: Marilyn Daviescontact_phone: 15552229999contact_email: marilyn.davies@mycompany.com436. Нажмите на кнопку Create and Create Another для создания новой строки втаблице и для открытия нового окна для добавления данных7. На новой странице введите следующую информацию:employee_id: 143birth_date: 01-MAR-72social_security_id: 555-77-4444marital_status: Singledependents_claimed: 1contact_name: Carolyn Matoscontact_phone: 15553338888contact_email: carolyn.matos@myinternet.com8.