Документ без наслов

12. Други објекти во базата на податоци

базата податоци

Базата на податоци содржи други објекти освен оние со кои сте запознати во другите поглавја. Целта на ова поглавје е да се објасни улогата на овие предмети што сè уште не биле опишани на претходните лекции.

Објектите што можат да постојат во базата на податоци се: табели, прегледи, низи, индекси и синоними. Бидејќи табелите и погледите се опширно опишани во претходните поглавја, сега ќе се занимаваме со низи, индекси и синоними.

Апликациите обично имаат потреба од табели за да содржат некои уникатни идентификациски броеви по табели, како што е случајот со примарните клучеви. Овие може да се пресметаат од апликацијата директно користејќи одредени алгоритми засновани на постојните записи и потоа можат да бидат внесени во базата на податоци заедно со другите податоци. Во овој случај, сепак, постојат големи проблеми со синхронизацијата така што ако неколку инстанци од иста апликација пристапат во исто време приближно до веќе постоечките податоци во базата на податоци, резултатот од копчињата ќе биде ист. Исто така, потребни се едно до неколку основни барања за да се утврди кои вредности веќе постојат, така што апликацијата троши повеќе време на процесорот за секое вметнување и станува многу побавна.

Едно решение за овие проблеми се низата. Низите се предмети што можат да се споделуваат помеѓу повеќе корисници и можат да генерираат единствени цели броеви.

Нивната најчеста употреба е за единствени клучеви од табелата. Низите се зголемуваат или намалуваат со користење на рутина на програма за внатрешна база на податоци (Oracle).

Низите не се својство на табели, така што тие можат да се користат од неколку табели истовремено. Вообичаена практика, секоја табела е доделена на посебна низа, но тие исто така можат да се користат така што повеќе табели ја користат истата низа или табелата може да има повеќе низи.

Низа може да се креира со користење на следнава SQL синтакса:

Е се обидеме да ги прегледаме параметрите што се користат во ова специјално SQL барање:

Пример 1 - Создавање низа:

Willе продолжиме со краток пример за создавање низа во одделената табела што ќе ја користи примарниот клуч.

Да се ​​осигураме дека оваа низа веќе не постои:

Сега да го создадеме со следниве опции: започнете од 120, зголемете се за 10 единици, максималната вредност е 9999, нема циклус и нема меморија.

Псевдоколумни NEXTVAL и CURRVAL.

Овие се користат за да можат да пристапат до вредностите на низата. Нивните имиња се сугестивни.

NEXTVAL е псевдоколумна која се користи за извлекување на следната вредност од низата. Ова се користи во избор заедно со името на низата од која треба да се извлече вредноста. Ако синтаксата за пребарување SQL содржи формат sequence_name.NEXTVAL, тогаш низата се зголемува, тековната вредност во NEXTVAL е поставена во CURRVAL и NEXTVAL ќе го содржи следниот број во низата.

CURRVAL се користи за да може да се извлече од низата последната вредност што е генерирана. Како што претходно споменавме, псевдоколоната NEXTVAL мора да се искористи за да се генерира вредноста што ќе биде содржана во CURRVAL. CURRVAL се извлекува на ист начин како што се извлекува NEXTVAL вредноста со барање SQL SELECT заедно со името на низата за која е посакувана вредноста. Кога барањето е направено со користење на синтаксната низа_име.CURRVAL, вратената вредност ќе биде вредноста што последен пат била користена во истиот процес.

Постојат некои ограничувања за употребата на псевдоними CURRVAL и NEXTVAL:

  • Кога барањето SELECT се однесува на преглед на објекти
  • Кога се користи клучниот збор DISTINCT во барањето SELECT
  • Кога барањето SELECT содржи ГРУПА СО, КА HAАЕ или ПОРАЧКА ОД
  • Кога изјавата SELECT се користи во под-барање.
  • Кога изразот DEFAULT се користи заедно со CREATE TABLE или ALTER TABLE

Пример 2 - Користење на низа:

За вметнување во базата на податоци во одделната табела ќе ја користиме во нашата SQL апликација редоследот што го создадовме претходно. Следната апликација ќе се користи за вметнување:

За да можете да ја видите вметнатата вредност, може да се користи следново барање:

Користењето на претходно вчитани низи во меморијата има предност што брзината на одговор се зголемува од базата на податоци. За жал, во оваа прилика се појавуваат некои проблеми. Во моментот на физичка грешка на машината на која работи базата на податоци, информациите што се зачувани во меморијата се губат и таканаречените дупки се појавуваат во низата. Такви дупки во низата исто така може да се појават ако записите се избришат од базата на податоци, ако некое барање не успеало и системот мора да се врати на претходните вредности (акција за враќање) или кога е низа се користи за повеќе маси.

Низата може да се измени со користење на следново генеричко барање:

каде што името на низата е името на низата што треба да се измени. Овој метод е корисен, на пример, ако низата ја достигне својата максимална вредност и ако сакате да продолжите да ја користите, таа враќа грешка.

Постојат некои ограничувања при промена на низа што веќе постои. Овие се:

  • Корисникот што го извршува дејството на промена мора да ги има потребните права или да биде сопственик на низата.
  • Само броевите што ќе бидат генерирани во иднина ќе бидат засегнати.
  • Низата ќе треба да се уништи и да се пресоздаде за да може да се смени почетната вредност

Одредени логички валидации, така што ново поставената максимална вредност не смее да биде помала од вредноста што веќе постои, треба да се исполни.

Бришењето на низата може да се изврши со користење на следново SQL пребарување:

ИСПУШТЕТЕ го името на секвенцата

каде што името на низата е името на низата што треба да се уништи.

Индексирачите се шема-објекти кои го подобруваат времето на пребарување и пристапот до записите во базата на податоци. Индексите се креираат експлицитно или автоматски под одредени услови.

Индексирачите обезбедуваат метод на директен пристап до записите што треба да се извлечат. Нивната цел е да ги намалат операциите на влез/излез на дискот со употреба на метод за индексирање на патеките до тие податоци. Индексите се користат и одржуваат од страна на серверот Oracle на транспарентен начин за корисникот, што не вклучува никакви понатамошни активности.

Начинот на кој се дизајнираат индексите ги прави физички и логично независни од базата на податоци, што се изразува со фактот дека тие можат да бидат креирани или уништени во секое време без да влијаат на структурата на базата на податоци или другите индекси. Исто така, дел од транспарентното управување е и фактот дека доколку се уништи базата на податоци, тогаш се уништуваат и индексите што се создадени за неа.

Индексите се создаваат на два начина:

- Автоматско: Кога се креира примарен клуч на табелите, кога се создава ограничување записите во базата на податоци да бидат единствени во други слични ситуации.

- Прирачник: Може да се дефинираат рачни индекси кои не мора да содржат ограничување како што е случајот со единечните индекси.

Индексите се креираат со користење на следново SQL пребарување во базата на податоци:

КРЕИРАЈ Име на индекс на индекс
Име на табела (поле1 [, поле2].)

каде што името на индексот е името на индексот, името на табелата е името на табелата во базата на податоци за која ќе бидат креирани полињата за индекс и полето 1, полето 2. се имињата на полињата во табелата за кои е креиран овој индекс. Индекс може да се креира за една или повеќе колони во истата табела.

Пример 1 - создавање индекс:

Willе создадеме индекс на оддел кој ќе ни помогне да извлечеме запис многу брзо врз основа на името на одделот.

Постојат неколку ситуации кои бараат креирање на индекси во базата на податоци. Индекс се создава ако:

  • една колона содржи многу голема разновидност на вредности и голем број вредности.
  • полето во базата на податоци содржи многу нула записи
  • полињата се користат многу често во услови на избор на записи или во случаи на JOIN
  • табелата на која е креиран индексот е многу голема и барањата често не извлекуваат голема количина на податоци (2-4%)
  • кога одредени тастери се креираат во табелата како единствени клучеви и тогаш Oracle автоматски генерира единствен индекс.

Кога не се создава неодлучност и зошто?

Општо, не е секогаш потребно и добро да се креираат индекси во базата на податоци Прекумерното создавање индекси во базата на податоци има многу недостатоци. Кога ќе се додадат индекси, базата на податоци ги ажурира за секоја извршена операција. Кога се создаваат премногу индекси, операциите за извлекување од базата на податоци ја подобруваат нивната брзина само со мал сооднос, но за секоја операција за вметнување или бришење, потребното време значително се зголемува, како и користените ресурси. Значи, проблемот се јавува кога тие не се потребни:

  • Кога табелата што сакате да ја додадете е мала.
  • Кога колоните на кои се додаваат индексите не се користат често за да се извршат пребарувања на записи
  • При избор на тип, апликациите генерално извлекуваат голем број записи (поголеми од 2-4%)
  • Кога операциите за ажурирање се користат многу често.
  • Кога индексираните колони се наведуваат како составен дел на изразите.

Комплетен список на индекси може да се извлече од прегледот USER_INDEXES што го содржи името на индексот и дали има ограничување на единственоста. Следното барање може да се користи за табелата „оддели“

Индекси базирани на индекси

Индексите исто така може да се додадат не само во едноставните полиња во базата на податоци. Тие исто така можат да се користат на одредени изрази. Овие изрази можат да бидат конструирани од полињата во табелата, константите, функциите на SQL или функциите дефинирани од корисникот. На овој начин можете да ги оптимизирате барањата за екстракција кои содржат сложени услови засновани на пресметки.

Пример 2: - Индекс заснован на SQL функција

Следниот индекс се користи за табела за вработени која е многу голема и генерално, екстракти од една база на податоци се користат во апликациите. Ако претпоставиме дека најчестиот метод за филтрирање на SQL барањето е по име и презиме, можеме да создадеме индекс на двете обединети полиња:

Индексирачите можат релативно лесно да се уништат бидејќи структурата или податоците на базата на податоци не се засегнати. Единствениот неопходен услов е корисникот што се обидува да го изврши ова дејство мора да биде сопственик на индексот. Корисникот, исто така, мора да има право да исфрли каков било индекс во рамките на безбедносниот систем.

Уништувањето на инчи е извршено со користење на следново SQL пребарување:

каде што името_индекс го претставува името на индексот.

Индексите не можат да се менуваат. Затоа, кога е потребно да се измени индекс, потребно е претходно да се уништи.

Пример - Уништување на креираниот индекс

За да го уништиме индексот што го создадовме во претходниот пример, ќе треба да го искористиме следното барање:

Синонимите се псевдоними што можеме да ги додадеме на кој било објект во базата на податоци за да го поедноставиме пристапот до овој ресурс. Синонимите се користат ако во базата на податоци има табели со повеќе имиња во различни шеми, кога имињата на предметите се многу долги и/или тешко се паметат од страна на програмерот, кој треба да ги користи во други случаи. Главната предност на нивното користење е да се намали времето потребно од корисниците за да ги создадат своите SQL пребарувања. На овој начин, табелите, погледите, низите, процедурите или другите објекти имаат алтернативно име за пристап.

За да креирате синоними, ви треба SQL пребарување што го има следниот формат:

КРЕИРАЈТЕ [ЈАВНО] Синоним синоним_ име
ЗА името на објектот;

Во овој случај можеме да ги разликуваме следниве параметри:

ЈАВНО Дефинира дека овој синоним е достапен за сите корисници. Ако не е одредено, тогаш синонимот е достапен само за тековниот корисник. Јавни синоними можат да создаваат само корисници кои имаат административни права.
nume_sinonim Името на синонимот што ќе се создаде.
име на објектот Идентификувајте го предметот за кој сакате да го создадете синонимот

Ако сакаме да пристапиме до табелата што друг корисник претходно ја има креирано и на која сакаме да и доделиме синоним, ние сме должни да ги внесеме пред името на табелата и името на корисникот што ја создал табелата, пред името на табелата, одделено со точка.

Пример 1: Создавање синоним

Во овој пример ќе се обидеме да создадеме синоним за табелата со оддели што има прилично долго име.

На овој начин веќе нема да бидеме принудени во нашите SQL пребарувања да пристапуваме до табелата на оддели со запишување на името на табелата „оддел“ и доволно е само да се користи новосоздаденото име: „dep“

Постојат некои ограничувања за употреба на синоними:

  • тие предмети не можат да бидат содржани во пакет.
  • приватното синонимско име мора да биде единствено во групата предмети за кои тој корисник е сопственик.

Синоним не може да се смени откако ќе се создаде. Може да се уништи само. Уништувањето на синоним не подразбира уништување на објектот за кој е прикачен алијасот. Уништувањето на синоним се врши со користење на SQL пребарување од следниот тип:

ИСПАКИ [ЈАВНО] синоним_име на синоним

каде што името на синонимот го означува името на синонимот што треба да се уништи.

Јавен синоним може да биде уништен само од административен корисник. Приватните синоними мора да бидат уништени од корисникот што ги создал, бидејќи тие не се достапни во списокот со имиња на предмети на други корисници.

Целта на ова поглавје беше да ве научи на следново: