Using DDL Statements To Create And Manage Tables

Salamlar, bloguma xoş gəlmisiniz.

Bugünkü yazımda sizlərə DDL(Data Definition Language) ifadələrlə cədvəl yaradılması və idarə olunması haqqında məlumat verməyə çalışacağam.

Bu yazım bir neçə hissədən ibarət olacaq, mövzu uzun olduğu üçün hissə-hissə sizləri çox sıxmadan anlatmağa çalışacağam 🙂

Bölmələrimiz bu şəkildə olacaq:

  • Database Objects(Verilənlər bazası obyektləri)
  • Schema and Non-Schema Ojbects
  • Naming rules of Table(Cədvəli adlandırma qaydaları)
  • Unique Names and Namespaces
  • Data Types

DATABASE OBJECTS(VERİLƏNLƏR BAZASI OBYEKTLƏRİ)

Verilenlər bazası obyektləri verilənlər bazası tətbiqlərinin işləməsi üçün ən təməl ehtiyaclardandır. ORACLE verilənlər bazasında bir çox müxtəlif tip baza obyektləri möcuddur. Bu yazımda sizlərə aşağıdakı obyektlərdən danışacağam:

TABLES

İNDEXES

VİEWS

SEQUENCES

SYNONYMS

CONSTRAİNTS

USERS

ROLES

Bu obyektlər haqqında qısaca məlumat verək.

TABLE – Məlumatın bazada saxlanma strukturudur. Bütün məlumatlar sütunlar və sətirlər halında saxlanılır. Hər bir sütunun saxladığı məlumat tipi ayrıca qeyd olunur.

İNDEXES – TABLE(bundan sonra CƏDVƏL)-da məlumat axtarılan zaman axtarışın daha sürətli olmasını təmin edən obyektdir. İNDEX – lərə ən yaxşı nümunə kitabların mündəricatının saxlandığı səhifələrdir hansı ki axtardığınız kitabın adını müəyyən sıralama ilə daha tez və sürətli tapmağa yardımcı olur.

VİEWS – Bu obyektlər heç bir məlumat saxlamayan sadəcə sql sorğulardır. Yəni hər hansı bir böyük cədvəlin müəyyən hissəsinə tez-tez müraciət edirsinizsə hər dəfə cədvəldəki bütün məlumatları deyil yanlız sizə lazım olan hissəni sizə qaytarması üçün həmin məlumatları sql sorğu ilə ayırıb başqa bir ad ilə VİEW yaradısınlz beləliklə gələcəkdə sadəcə bu VİEW-nu çağıraraq məlumatları alırsınız.

SEQUENCES – sayğac rolunu oynayır. Hər dəfə cədvələ yeni əlavə olunan sətir üçün unikal bir ədəd yaratmağa kömək edir.

SYNONYMS – Bildiyimiz “sinonim” məntiqinə uyğundur yəni hər hansı baza obyektinə alternativ bir digər ad vermək üçün istifadə olunur.

CONSTRAİNTS – Cədvələ əlavə olunacaq məlumatlara qoyulan məcburiyyətlərdir. Məsələn bir sütuna NOT NULL constrainti yazdığımız zaman həmin sütuna müvafiq dəyişkən tipində məlumat mütləq girilməlidir NULL buraxıla bilməz yəni.

USERS – Baza obyektlərinin sahibi(owner)

ROLES – Bazadakı istifadəçilərə verilən imtiyazlar(privileges) toplusudur.

Zamanla bu obyektlərin hər biri haqqında ətraflı məlumat verəcəyəm.

SCHEMA AND NON-SCHEMA OJBECTS

SCHEMA – Azərbaycan dilinə “şema” kimi tərcümə olunur ancaq mən ingiliscə yazmağı üstün tuturam. İstifadəçinin sahib olduğu(owner) baza obyektlərinin toplusudur. Schema – ni eyni istifadəçi kimi düşünə bilərsiniz ancaq bir fərqi varki istifadəçi baza obyektlərinin sahibdir schema isə bu istifadəçi daxilindəki baza obyektlərinin toplusudur.

Baza obyektləri 2 növə bölünür – SCHEMANon-SCHEMA obyektlər.

SCHEMA obyektlər istifadəçi tərəfindən sahiblənə bilən(own) obyektlərdir:

  • TABLES
  • CONSTRAİNTS
  • İNDEXES
  • VİEWS
  • SEQUENCES
  • PRIVATE SYSNONYMS

Non-SCHEMA obyektlər isə istifadəçi tərəfindən sahiblənə bilməyən obyektlərdir:

  • USERS
  • ROLES
  • PUBLIC SYNONYMS

Yuxarıda qeyd etdiyimiz obyektləri yaratmaq üçün əsasən aşağıdakı struktur istifadə olunur:

CREATE objectType ojectName attributes;

objectType – baza obyektlərindən biri(CONSTRAİNT xaric)

objectName – baza obyektinin adı

attributes – atributlar hər baza obyektinə görə unikaldır, gələcək yazılarda yazacağam bu haqda

Məsələn 1 TABLE yaradaq:

CREATE TABLE cruises

(cruise_id                            NUMBER,

cruise_type_id                  NUMBER,

cruise_name                      VARCHAR2(20),

captain_id                           NUMBER NOT NULL,

start_date                           DATE,

end_date                            DATE,

status                                    VARCHAR2(5) DEFAULT ‘DOCK’,

CONSTRAINT cruise_pk PRIMARY KEY (cruise_id) );

NAMING RULES OF TABLE(CƏDVƏLI ADLANDIRMA QAYDALARI)

Bu qaydalar bütün baza obyektləri(table, view, index, synonym, sequence, constraint) üçün keçərlidir, həmçinin cədvəllərin sütunları üçün də keçərlidir.

Deməli belə, qaydalarımız bunlardır:

  • Baza obyektlərinə verəcəyiniz ad ən azı 1 ən çox 30 hərfdən ibarət olmalıdır
  • Hərflə başlamalıdır
  • 1ci hərfdən sonra 3 işarə gələ bilər ancaq, bunlar: ‘_’ , ‘#’, ‘$’ işarələridir
  • Verəcəyiniz adlar ORACLE və SQL in rezerv etdiyi adlar olmamalıdır(select keyword from v$reserved_words ilə bu sözlərə baxa bilərsiniz)

Oracle-da baza obyektlərini yaratdığınız zaman diqqət etməniz gərəkdiyi bir digər nöqtə isə verdiyiniz adı “ ”(dırnaqlar) içərisində yazarsanız, bu zaman ona müraciət zamanıda dırnaqlardan istifadə etməlisiniz. Məsələn:

CREATE TABLE ports(

Port_id number,

Port_name varchar2(20));

Bu zaman ORACLE sizing ports cədvəlinizi PORTS şəklində yəni avtomatik uppercase olaraq yaddaşda saxlayacaq və siz gələcəkdə həm ports həmdə PORTS yazaraq cədvəlinizə müraciət edə biləcəksiniz

SELECT * FROM ports və ya SELECT * FROM PORTSeyni nəticəni qaytaracaq

ancaq belə yaratsanız –>

CREATE TABLE “ports”(

Port_id number,

Port_name varchar2(20));

Sizin cədvəliniz yaddaşda “ports” kimi saxlanacaq və müraciət zamanı siz “ports” yazmalısınız.

SELECT * FROM “ports” şəklində , ancaq SELECT * FROM “PORTS” artıq başqa cədvələ müraciət sayılacaq.

Yaratdığınız obyektin adını “ ”(dırnaqlar) ilə yaradırsınızsa o zaman siz ORACLE-ın icazə vermədiyi işarələrdən də istifadə edə bilərsiniz. Məsələn: cədvəl adı PORTS İNFO ola bilməz ancaq “PORTS İNFO” ola bilər.

 

UNIQUE  NAMES AND NAMESPACES

Baza obyektlərinin adlandırılmasını öyrəndik bəs eyni adı bir neçə baza obyektinə vermək olarmı?

ORACLE baza obyektlərini məntiqi bolgülərlə saxlayır. Bu məntiqi bölgülər NAMESPACES adlanır. Yəni baza obyektləri NAMESPACE lərdə yerləşir və 1 NAMESPACE daxilində 2 eyni adda baza obyekti saxlaya bilməssiniz. Bu bölgüləri aşağıdakı şəkildə daha aydın görmək olar.

name

Şəkildən də göründüyü kimi siz eyni adı həm cədvələ həm view-a  verə bilməzsiniz ancaq cədvələ verdiyiniz ad index adı ilə eyni ola bilər. Baza obyektlərini adlandırdığınız zaman bu məntiqi bölgülərə(namespace) diqqət etməlisiniz. Bəs etməsək? Eyni namespace daxilində mövcud obyekt adı ilə yeni bir obyekt yaratsaq nə olacaq? Bu zaman aşaıdakı kimi error alacaqsınız:

error

DATA TYPES(VERILƏN TİPLƏRİ)

ORACLE SQL-də bir çox verilən tipləri vardır bu tiplər sizin hansı növ məlumat saxlamağınıza bağlıdır. Mən əsasən ən çox istifadə tiplər haqqında məlumat verməyə çalışacağam. Əsasən 3 növə bölə bilərik bu tipləri:

  • HƏRF(CHARACTER)
  • RƏQƏM(NUMBER)
  • TARIX(DATE)
  • LOBs

HƏRF VERİLƏN TİPLƏRİ(CHARACTER DATATYPES)>

CHAR(n) – “char” “character” sözünün qısaltmasıdır. Sabit uzunluqlu alfanumerik(alphabetic + numeric) məlumat saxlayır yəni hər zaman “n” byte məlumat saxlayır. “n” əlavədir yəni sadəcə CHAR yazaraq da  tipi təyin edə bilərsiniz bu zaman “n” 1 dəyərini alacaq. Əgər daxil edəcəyiniz dəyər “n” byte-dan az olarsa CHAR tip boş qalan yerləri boşluq(space) qoyaraq “n”-ə tamamlayacaq. Məsələn: CHAR(3) tipi verilən sütuna “A” dəyərini girdikdə cədvəldə bu sütunda “A  ” tutulacaq. “n” maksimum 2000 qiymətini ala bilər.

VARCHAR2(n) “varchar” “variable character” sözünün qısaltmasıdır. Dəyişkən uzunluqlu alfanumerik(alphabetic + numeric) məlumat saxlayır yəni siz “n” yerinə “n-1” bayt məlumat girildikdə CHAR-dan fərqli olaraq bazada “n-1” byte məlumat saxlayır. Həmçinin CHAR-dan fərqli olaraq “n” boş buraxıla bilməz və maksimum 4000 byte məlumat saxlaya bilər.

RƏQƏM VERİLƏN TİPLƏRİ(NUMERİC DATATYPES) ->

NUMBER(n,m)Mənfi, müsbət həmçinin 0-ı ədədlərin təyini üçündür. “n” girilən ədədin yaddaşda  neçə bayt yer tutacağı və vergüldən solda neçə rəqəmin saxlanacağın, “m” isə vergüldən sağda neçə rəqəm saxlanacağın bildirir. “n” 1 və 38 arasında “m” isə -84 və 127 arasında dəyişə bilər. Bu haqda bir neçə misala baxaq:

TIP GIRILƏN DƏYƏR SAXLANILAN DƏYƏR
NUMBER 3.75 3.75
NUMBER(2) 3.75 3
NUMBER(5,2) 3.75 3.75
NUMBER(5,2) 3.7578 3.76
NUMBER(3,2) 30.75 ERROR! ORA-01438 girilən dəyər yaddaşda ayrılmış yerdən çoxdur…

Bunun səbəb odurki biz yaddaşda 3 byte-lıq yer ayırmışıq ancaq 3,0,7,5 rəqəmlərini saxlamaq istəyirik

NUMBER(5,-2) 3056.34 3100

TARİX VERİLƏN TİPLƏRİ(DATE DATATYPES)

DATEgün və zaman məlumatlarını saxlayır. DATE tipində olan sütunda il, ay, gün, saat, dəqiqə, saniyə kimi məlumatlar saxlaya bilərsiniz. ORACLE özündə susmaya görə bir çox parametr saxlayır bunlardan biridə NLS_DATE_FORMAT parametridir. Bu parametrə sqlplus vasitəsilə SHOW PARAMETER NLS_DATE_FORMAT yazaraq baxa bilərsiniz. Susmaya görə “DD-MON-RR” dir yəni 11-NOV-15 şəklində məlumat saxlayır. ALTER SESSİON və ya ALTER SYSTEM əmrləri ilə bu formatı dəyişə bilərsiniz.

TİMESTAMP(n) DATE tipinə əlavə olaraq salisələridə saxlayır. TİMESTAMP il, ay, gün, saat, dəqiqə, saniyə, salisə məlumatların saxlayır.”n” salisənin neçə rəqəminin saxlanmasını təyin edir 1-9 aralığında qiymət alır və susmaya görə 6-dır.

TİMESTAMP(n) WITH TIME ZONE –  TIMESTAMP tipinin bir dəyişik formasıdır. TİMESTAMP-a əlavə olaraq vaxt zonasının adını və ya offset(time zone offset)-ini saxlayır. TİMESTAMP(n) WITH TIME ZONE fərqli bölgələrdəki saat fərqlərini olduğu kimi bazada saxlayır və qaytarır. ”n” salisənin neçə rəqəminin saxlanmasını təyin edir 1-9 aralığında qiymət alır və susmaya görə 6-dır.

TİMESTAMP(n) WITH LOCAL TIME ZONETIMESTAMP tipinin bir digər dəyişik formasıdır. TİMESTAMP(n) WITH TIME ZONE – dan fərqli olaraq hər zaman lokal session vaxtını saxlayır və qaytarır. ”n” salisənin neçə rəqəminin saxlanmasını təyin edir 1-9 aralığında qiymət alır və susmaya görə 6-dır.

Bu tiplər və xüsusiyətləri haqqında daha geniş bir yazım olacaq 😉

Bu kodla bütün tarix tiplərinin hansı tipdə məlumat saxladığını öyrənə bilərsiniz.

 

 

CREATE TABLE TARIX_TIPLERI(

                DATE_TIPI                                                                           DATE,

                TIMESTAMP_TIPI                                                             TIMESTAMP(9),

                TS_WITH_TIME_ZONE                                                  TIMESTAMP(9) WITH TIME ZONE,

                TS_WITH_LOCAL_TIME_ZONE                                  TIMESTAMP(9) WITH LOCAL TIME ZONE

                );

INSERT INTO TARIX_TIPLERI(SYSDATE, SYSDATE, SYSDATE, SYSDATE);

COMMIT;

SELECT * FROM TARIX_TIPLERI;

 

LOBS(LARGE OBJECTS)

BLOB – “Binary Large Objects” sözünün qısaltmasıdır. BLOB ikilik sistemdə video və şəkil fayllar saxlayırlar. Maksimum ölçüsü 4GB hesablanmışdır. LOB- lar primary key ola bilməz və DİSTİNCT, GROUP BY, ORDER BY ilə də işlənə bilməz həmçinin join-lərdə də istifadə oluna bilməz.

CLOB – “Character Large OBject” sözünün qısaltmasıdır. Böyük mətin məlumatları üçün nəzərdə tutulub və maksimum ölçüsü 4GB hesalanmışdır.