Struktura logiczna ORACLE'a
Tabele
Tabele w ORACLE tworzymy określając ich nazwę oraz poszczególne pola (ich nazwy oraz typu). Jednocześnie możemy określić więzy integralności dotyczące tabeli.
create table przykl_tab1
(numer number(5) primary key,
imie varchar(20) not null,
nazwisko varchar(20) not null,
wiek number(3) not null);
Widoki
Są sposobem przeglądania danych zawartych w tabeli lub zbiorze tabel. Jest to obiekt wirtualny, który sam w sobie nie zawiera danych, ale pozyskuje dane z bazowych tabel . Z tego powodu widok możemy traktować jako obiekt wirtualny. Jeśli mamy tabelę zawierającą informacje a część z nich musimy udostępnić, podczas gdy całość powinna pozostać poufna, należy skorzystać z widoku i udostępniamy jedynie wybrane kolumny bez konieczności powielania danych do innej tabeli. Widok jest obiektem struktury, którego używają administratorzy (DBAs) by zastrzec dostęp do niektórych danych z tabel. Na widoku można wykonywać takie same operacje jak na zwykłej tabeli: tworzyć zapytania, edytować, wprowadzać nowe dane oraz tworzyć na jego podstawie nowe widoki Są od tego wyjątki: nie można modyfikować widoku zdefiniowanego jako połączenie dwóch lub więcej tabel - nie można w takim widoku dodawać, usuwać i zmieniać danych. Wszystkie, działania na widoku powodują zmiany także w jego bazowej tabeli. Ogólnie rzecz biorąc widok jest wirtualną kopią danych z jednej lub wielu tabel.
Przykład:
CREATE VIEW dept20
AS SELECT ename, sal*12 annual_salary
FROM emp
WHERE deptno = 20;
Przykład z łączeniem tabel:
CREATE VIEW ed AS
SELECT e.empno, e.ename, d.deptno, d.loc
FROM emp e, dept d
WHERE e.deptno = d.deptno
Sekwencje
Są to uporządkowane listy wartości dla specjalnej kolumny w tabeli. Dowolny zbiór liczb układający się w ciąg arytmetyczny jest sekwencją.
Sposób użycia:
można się nią posłużyć przy znajdowaniu konkretnych rekordów wyszukując unikalny numer,
ułatwia sortowanie gdyż patrząc na numery można łatwo określić, jak rekordy rekordy zostały posortowane ( rosnąco czy malejąco ),
przyśpiesza wykonywanie transakcji w środowisku wieloużytkownikowym. Gdy tylko użytkownik wprowadza nowy rekord serwer automatycznie nadaje mu następną wartość w sekwencji. Jeśli serwer nie spełniałby tej centralnej roli, zadaniem każdej aplikacji byłoby zapewnienie tego by użytkownicy nie powielali numerów(bardzo trudne w realizacji). Jednakże, gdy kilka aplikacji wprowadza dane do tej samej tabeli serwer może podołać temu zadaniu.
może służyć jako klucz główny tabeli, ponieważ sekwencja gwarantuje unikalne wartości w rekordzie.
Tworzenie sekwencji "sequence" - bedzie to ciag 5 15 25 35 aż do 100 i w zależności od cycle/nocycle liczy będą się powtarzać:
CREATE SEQUENCE sequence
INCREMENT BY 10
START WITH 5
MAXVALUE 100
CYCLE | NOCYCLE;
Wykorzystanie sekwencji:
INSERT INTO emp
VALUES (sequence.nextval, 'LEWIS', 'CLERK',
7902, SYSDATE, 1200, NULL, 20);
Możliwe są:
sequence.CURRVAL
sequence.NEXTVAL
Indeksy
Mechanizmy indeksowania są obecne we wszystkich chyba systemach zarządzania bazą danych. Ich rolą jest wspomaganie realizacji zapytań o dane z bazy. Można utworzyć jeden lub więcej indeksów dla bazy danych.
Indeks to struktura, która utrzymuje kolejność w zbiorze poszczególnych pozycji umożliwiając szybki dostęp do określonych wartości.
Indeksy mają następującą postać:
Wartość_pola_indeksowanego | Fizyczny adres
Natomiast rekord zawierający kolumnę dla której utworzono indeks ma postać:
Fizyczny adres | Wartość_pola_indeksowanego | Wartość_pola | itd.
Odwołując się do wartości pola indeksowanego system odwołuje się bezpośrednio do fizycznego adresu rekordu, do którego odnosi się dany indeks, unikając dodatkowych operacji dyskowych, które byłyby konieczne, gdyby system miał przeszukiwać każdy rekord oddzielnie.
Bez indeksu serwer musiałby skanować (przeszukiwać) całą bazę danych by znaleźć poszukiwaną informację, natomiast z właściwym indeksem serwer przechodzi wprost do żądanej informacji. Tabela, która posiada indeks nazywana jest tabelą o organizacji indeksowej.
Zwykli użytkownicy nie muszą się przejmować istnieniem indeksów.
Są one ważne dla administratorów oraz projektantów baz danych.
Indeks musi być uaktualniany przy każdej zmianie danych w tabeli - co znacznie spowalnia operację uaktualniania i dodawania w danym polu.
Jednocześnie indeksy znacznie przyśpieszają wyszukiwanie danych. Dlatego są użyteczne jeśli tabele są przeszukiwane przez indeksowane kolumny.
Przykład:
CREATE INDEX emp_idx
ON scott.emp (ename)
PARALLEL 5;
Konwersja typów
Poniższe zdanie SQL wyłuska rok z daty:
SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR') ,'YYYY') "Year"
FROM DUAL;
Wynik działania:
Year
----
1998