Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
кожин / Лекции / Лекция 05 create_table.DOC
Скачиваний:
32
Добавлен:
20.03.2016
Размер:
233.47 Кб
Скачать
      1. Удаление таблицы

Для удаления из базы данных таблицы (вместе с ее содержимым) используется оператор DROPTABLE.

DROP TABLE [имя_схемы.] имя_таблицы [ CASCADE CONSTRAINTS ]

    1. Представление

Представление — это поименованная, динамически поддерживаемая сервером выборка из одной или нескольких таблиц. Оператор SELECT, определяющий выборку, ограни­чивает видимые пользователем данные. Кроме того, пред­ставление позволяет эффективно ограничить данные, кото­рые пользователь может модифицировать. Сервер гарантиру­ет актуальность представления, то есть формирование пред­ставления (материализация соответствующего запроса) произ­водится каждый раз при использовании представления. Ис­пользуя представления, администратор базы данных ограни­чивает доступную пользователям часть логического простран­ства базы данных только теми данными, которые реально необходимы для выполнения его работы.

Оператор определения представлений Oracleисполь­зует следующий синтаксис:

CREATE [OR REPLACE] [FORCE | NO FORCE] VIEW [ имя_схемы.] имя

[альтернативное_имя [альтернативное_имя...]]

ASзапрос

[WITH READ ONLY | CHECK OPTION [CONSTRAINT ограничениецелостности ]]

Ключевое слово OR REPLACE указывает на принуди­тельное замещение старого представления новым, образуе­мым командой CREATE. Использование этого параметра по­зволяет не выполнять повторного предоставления привиле­гий, которое было бы необходимо, если использовать коман­ды DROP и CREATE для уничтожения и создания представле­ния заново.

Ключевое слово FORCEуказывает на принудительное создание представления вне зависимости от того, существуют ли базовые таблицы представления и есть ли у пользователя, создающего представление, привилегии на выборку из базо­вых таблиц. Отметим, что при отсутствии выполнения любо­го из перечисленных выше условий попытка выполнить лю­бую операцию с созданным представлением будет отвергнута системой. Ключевое словоNOFORCE(используемое по умол­чанию) указывает на обязательность существования базовых таблиц и наличия у пользователя, создающего представление, привилегий на доступ к базовым таблицам. При нарушении какого-либо из этих условии представление не создается.

Удаление представления из базы данных выполняется командой DROPVIEW. Для удаления представления необхо­димо быть его владельцем или иметь привилегиюDROPANYVIEW.

DROP VIEW [имя_схемы.}имя_представления

При уничтожении представления синонимы и пред­ставления, ссылающиеся на уничтожаемое представление, не уничтожаются, а становятся неверными. Их можно уничто­жить или переопределить, а также можно переопределить другие представления и таблицы, с ним связанные, чтобы представления и синонимы стали вновь актуальными. Приви­легии на удаляемое представление отменяются.

    1. Индексы

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

CREATE [UNIQUE] INDEX index ON

table (column [ASC|DESC][,column [ASC|DESC]]...]

| CLUSTER cluster

[INITRANS n] [MAXTRANS n]

[TABLESPACE tablespace]

[STORAGE storage]

[PCTFREE n]

[NOSORT]

UNIQUE гарантирует, что в таблице не будет двух строк с одинаковыми значениями в индексированных столбцах. Если уникальный индекс не создан, таблица может содер­жать дублирующиеся строки.

index имя создаваемого индекса. Как и для других объектов базы данных, имя индекса должно быть уникаль­ным среди объектов данного поль­зователя.

table имя существующей таблицы, для которой создается индекс.

column имя столбца таблицы.

ASC допустим для совместимости с DB2,

DESC хотя в любом случае индексы создаются в порядке возрастания.

CLUSTER имя кластера, для которого будет создаваться индекс кластера.

INITRANS и MAXTRANS параметров INITRANS и MAXTRANS в операторе CREATE TABLE).

TABLESPACE имя табличного пространства, в котором будет содержаться индекс.

STORAGE описывает место хранение индекса аналогично таблице.

PCTFREE специфицирует процент памяти, остающейся свободной в каждом блоке индекса для последующих изменений и вставок.

NOSORT указывает системе ORACLE, что данные в таблице расположены в возрастающем порядке и, следова­тельно, при сортировке индекса строки сортировать не надо.

ORACLE может воспользоваться индексами с целью увеличения производительности в следующих случаях:

* при доступе к таблицам по индексным столб­цам

* при поиске строк со значениями, заданными для индексированных столбцов.

Индекс замедляет операции по добавлению, удалению и изменению строк, так как данные индек­са также нуждаются в сопровождении.

В один индекс может быть включено максимально 16 столбцов. Элемент индекса в этом случае представ­ляет собой конкатенацию данных изо всех столбцов. Столбцы могут указываться в любом порядке и этот порядок важен лишь при использовании индекса.

При необходимости ORACLE может использовать весь индекс или его начальную часть. Допустим, индекс IDX1 создан на столбцах A,B,C таблицы TAB1 (в по­рядке A,B,C). ORACLE может использовать этот ин­декс для ссылки на столбцы A,B,C (полный индекс), на столбцы A,B и на столбец C. Ссылка на столбцы B,C не может использовать индекс IDX1.

Для одной таблицы можно создать индексы для раз­личных столбцов (или различных комбинаций столбцов). Каждый индекс сни­жает производительность модификации данных. На количество индексов, которые можно создать для одной таблицы, ограничений не накладывается.

Элемент индекса для заданного столбца состоит из:

* ROWID строк (6 байтов для уникального или 7 байтов - для неуникального индекса)

* внутренней памяти для индексируемых столб­цов (длина в байтах каждого столбца плюс один байт дополнительно)

Максимально допустимый размер элемента индекса зависит от операционной системы.

Создание уникального индекса для одного или группы столбцов гарантируете, что в таблице не будет двух одинаковых по этим столбцам строк. Для таб­лицы можно создать любое число уникальных индек­сов; большинство таблиц имеют как минимум один уникальный индекс: индекс на основном ключе таб­лицы.

Каждый индекс должен следовать стандартам имено­вания системы ORACLE и отличаться от других имен объектов данного пользователя. Ниже приводятся дополнительные рекомендации по именованию индек­сов:

* включайте в имена индексов имена таблиц и столбцов, на которых он создается.

* предваряйте имя индекса буквой "I".

* разделяйте пунктуацией имена таблиц и столбцов.

Например, индекс, созданный на столбцах SAL и COMM таблицы EMP можно назвать: I_EMP$SAL_COMM.

В момент создания индекса ORACLE будет оставлять незаполненным PCTFREE от блока индекса. Например, если PCTFREE равен 20, каждый блок индекса будет заполнен на 80% своей емкости. Большее значение PCTFREE позволяет выполнить большее количество вставок перед тем, как индексные блоки будут раз­деляться (что требует дополнительных временных затрат). Небольшое значение PCTFREE подходит для статичных таблиц, в которых маловероятно разделе­ние индексных блоков. Маленький индекс влечет за собой ускорение его просмотра.

Опция NOSORT может существенно снизить время, необходимое для создания индекса. При нормальном создании индекса сначала таблица сортируется по индексируемым столбцам, а уже затем строится ин­декс. На сортировку обычно тратится значительная часть времени построения индекса. Если же строки таблицы уже отсортированы в порядке возрастания по индексируемым столбцам, опция NOSORT позволяет системе ORACLE пропустить фазу сортировки.

При создании индекса кластера опцию NOSORT ис­пользовать нельзя.

Опция NOSORT будет также снижать и общее коли­чество памяти, необходимой для построения индек­са. Для сортировки ORACLE использует временные сегменты и коли сортировка выполняться не будет, индекс создастся с гораздо меньшей временной па­мятью.

Для того, чтобы воспользоваться опцией NOSORT, необходимо гарантировать, что строки таблицы располо­жены в возрастающем порядке. Так как физическая независимость данных присуща всем системам управления реляционными базами данных (особенно - сис­теме ORACLE), не существует способа изменения внутреннего порядка расположения строк в таблице. Поэтому создание индекса с опцией NOSORT должно выполняться сразу же после загрузки в таблицу от­сортированных данных.

Запуская построение индекса с опцией NOSORT, Вы ничем не рискуете, так как если порядок строк в таблице окажется нарушенным, ORACLE выдаст ошибку и Вы сможете повторить создание индекса уже без опции NOSORT.

Значения NULL не индексируются, следовательно запрос:

SELECTENAMEFROMEMPWHERECOMMISNULLне будет использовать индекс, созданный на столб­це COMM.

Уникальный индекс также не рассматривает значения NULL как дублирующиеся и добавление нескольких таких строк не повлечет за собой ошибки.

При начальном создании кластера ORACLE автомати­чески не создает для него индекса, однако пока он не создан, над кластером нельзя выполнять опера­ции DML. Одним оператором CREATE INDEX можно создать либо индекс кластера, либо индекс таблицы, но не оба вместе. Следователь­но, можно использовать фразу CLASTER, только если не указано в том же операторе CREATE INDEX имени таблицы.

Для создания индекса в кластере EMPLOYEE введите:

CREATE INDEX IC_EMP ON CLUSTER EMPLOYEE

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

Например: для индексирования таблицы EMP по столбцу ENAME необходимо ввести

CREATE INDEX I_EMP$ENAME ON EMP (ENAME)

Соседние файлы в папке Лекции