Transact-SQL. CREATE TABLE operatoru. Cədvəllərin yaradılması

Salam Dostlar.

Keçən dərsimizdə Books Online for SQL Server 2014 resursunda bizə təqdim olunan CREATE DATABASE sintaksisi ilə tanış olduq və kod nümunələrini oxuduq. Kodlardan istifadə edərək yeni baza yaratdıq. Dərsimizin sonunda bəzi tapşırıqlar verilmişdi. Həmin tapşırıqların 3-cü və 4-cü bəndlərinin cavablarını nəzərinizə çatdırıram:

Tapşırıq 3. Yuxarıda göstərilən qaydada Books Online for SQL Server 2014 kod nümunəsini açın və yaratdığınız qovluqda iki fayldan (mdf və ndf) ibarət olan verilənlər bazasını yaradın.

Cavab:

Verilənlər bazası iki verilən faylından (DATA) və bir jurnal (LOG) faylından ibarətdirsə:

CREATE DATABASE bazamiz
ON
(
 NAME = bazamız1,
 FILENAME = 'D:\SQLDATA\bazamizdat1.mdf',
 SIZE = 100MB, 
 MAXSIZE = 500MB,
 FILEGROWTH = 15MB
),
(
 NAME = bazamız2,
 FILENAME = 'D:\SQLDATA\bazamizdat2.ndf',
 SIZE = 100MB, 
 MAXSIZE = 500MB,
 FILEGROWTH = 15MB
)
LOG ON 
(
 NAME = bazamız_log,
 FILENAME = 'D:\SQLDATA\bazamizlog.ldf',
 SIZE = 25MB, 
 MAXSIZE = 200MB,
 FILEGROWTH = 5MB
)

Tapşırıq 4. Daha bir yeni CONTAINMENT (Muxtar) verilənlər bazası yaradın.

Cavab:

CREATE DATABASE muxtar_baza 
CONTAINMENT = PARTIAL

Bu komandanı icra etdikdə səhv (error) mesajı çıxa bilər: Biz hal-hazırda sadəcə sintaksisin yazılış qaydasını öyrənirik. Səhvlərin həlli əlavə olaraq izah olunacaq.

Bildiyiniz kimi verilənlər bazasında məlumatlar verilənlər şəklində saxlanılır. Həmin verilənlər münasibətli (relational) bazasında çoxluqlar təşkil edir. Həmin çoxluqlar münasibətli şəklində saxlanılır. Verilənlər bazasının yaradılması zamanı əsas işlərdən biri cədvəllərin qurulmasıdır. Microsoft Excel cədvəlindən bizə məlumdur ki, məlumatları daxil etməzdən əvvəl cədvəlin strukturu yaradılır, başqa sözlə sütunların adları yaradılır, çərçivəyə salınır, cədvəllin sərhədləri müəyyən edilir. Verilənlər bazasında verilənlər münasibətli çoxluqlar şəklində saxlanılsa da formal olaraq onları da cədvəllər adlandırmaq olar. Bütün cədvəllərdə olduğu kimi verilənlər bazasının cədvəllərində də biz formal olaraq sütunlar və sətirlərlə işləyirik. Lakin həmin cədvəllər münasibətli çoxluqlar kimi təsvir olunduğu üçün adi cədvəllərdən fərqlənirlər. Fərqlər isə bunlardır:

  1. Yuxarıdan-aşağı sətirlərin nizamlılığı yoxdur. Biz deyə bilmərik ki, hər hansı bir sətir mütləq digər sətirdən sonra gəlməlidir. Adi cədvəldə isə ardıcıllıq mütləqdir.
  2. Soldan-sağa sütunların nizamlılığı yoxdur. Biz deyə bilmərik ki, hər hansı bir sütun mütləq digər sütundan sonra gəlməlidir. Münasibətli bazada sütunların ardıcıllığı vacib deyil. Adi cədvəldə isə sütunların sırası gözlənilməlidir.
  3. Təkrarlanan sətirlər yoxdur. Adi cədvəldə isə istənilən miqdarda təkrarlanan sətirlər ola bilər.
  4. Adi cədvəlin xanasında vergüllə ayrılan istənilən qiymətlər yaza bilərik. Münasibətli cədvəldə isə buna yol verilmir.

Bazaya yığdığımız ayrı-ayrı məlumatlar çoxluğu hər hansı bir sahəyə, mövzuya, başqa sözlə desək, tiplərə aiddir. Məsələn: mətn tipi, pul tipi, rəqəmlər tipi, zaman tipi və s. Münasibətli verilənlər bazasında saxlanılan verilənlərin bütün qiymətləri tipləşdirilmişdir, yəni hər saxlanılan qiymətin tipi məlumdur. Münasibətli verilənlər bazasında “verilənlərin tipləri” anlayışı proqramlaşdırma dillərində olan “verilənlərin tipləri” anlayışına tamamilə uyğundur.

Qeyd etmək lazımdır ki, SQL standartlarında verilənlər tipləri müəyyənləşdirilib. Lakin ayrı-ayrı platformalarda verilənlər tiplərinə müxtəlif yanaşmalar vardır. Əksər tiplər standarta uyğun olsa da, platformada istifadə olunan tiplər bəzən başqa cür adlandırılır, məsələn: MySQL-də olan BİT tipi standarta olan CHAR(1) tipi ilə eynidir. Bəzən eyni adlı tiplər ayrı-ayrı platformalarda müxtəlif cür istifadə olunur. Gördüyünüz kimi müxtəliflik mövcuddur və verilənlər tipləri istifadə edildikdə Verilənlər Bazalarının İdarəetmə Sisteminə (gələcəkdə mətndə VBİS) aid rəsmi təsvir ədəbiyyatına müraciət etmək lazımdır. Bizim iş lövhəmiz Microsoft SQL Server 2014 VBİS və Management Studio proqram təminatıdır. Buna görə də biz sizinlə BOL (Books Online for SQL Server 2014) resursundan istifadə edəcəyik.

Microsoft SQL Server 2014 verilənlər tiplərinin aşağıdakı kateqoriyaları vardır:

  • Tam ədədlər (Exact numerics):

BIGINT, INT, SMALLINT, TINYINT, DECIMAL, NUMERIC, MONEY, SMALLMONEY, BIT

  • Təxmini ədədlər (Approximate numerics):

FLOAT, REAL

  • Tarix və zaman (Date and time):

DATE, DATETIME2, DATETIME, DATETIMEOFFSET, SMALLDATETIME, TIME

  • Simvolik sətirlər (Character strings):

CHAR, TEXT, VARCHAR

  • Yunikod simvolik sətirlər (Unicode character strings):

NCHAR, NTEXT, NVARCHAR

  • İkili məlumatlar (Binary strings):

BINARY, IMAGE, VARBINARY

  • Digər verilənlər tipləri (Other data types):

CURSOR, TIMESTAMP, XML, HIYERARCHYID, SQL_VARIANT, TABLE,  UNIQUEIDENTIFIER, SPATIAL TYPES

Adlarından göründüyü kimi, verilənlər tipləri müəyyən xüsusiyyətlərə malik olan verilənləri bir yerə yığmaq üçün nəzərdə tutulub. Məsələn: tam ədədlərə aid olan cədvəl sütununa  biz sətir tipli verilənləri əlavə edə bilmərik. Verilənlər tipləri barədə növbəti məqalələrdə ətraflı izah veriləcək.

Ümumiyyətlə, verilənlər bazasının və onun cədvəllərinin yaradılması zamanı verilənlər bazalarının müəyyən strukturunu və quruluşu öncədən təyin olunur və buna verilənlər bazasının layihələndirilməsi deyilir. Həmçinin  cədvəllərin sayı və bir-biri ilə münasibətləri öncədən müəyyən olunur. Buna isə verilənlər bazasının normallaşdırılması deyilir. Verilənlər bazasının cədvəllərinin yaradılmasından öncə onların quruluş sxeminin və bir-biri ilə əlaqələrinin təsviri olmalıdır. Ən azından adı kağız üzərində qurulacaq cədvəllərini çəkmək lazımdır. Keçən dərslərimizdə bir  verilənlər bazası üzərində çalışdıq. Həmin bazada şirkət əməkraşları barədə məlumatlar daxil etdik. Fərz edək ki, həmin bazada kadr uçotunu aparacağıq. Həmin verilənlər bazasının quruluşunu bir daha yadımıza salaq:

Fərz edək ki, hələlik bazamız üç cədvəldən ibarətdir: “Department”, “Personnel” və “Phone”:

Staff_TablesSQL ilkin olaraq SEQUEL adlandırlımışdır. SEQUEL abreviaturası “Structured English Query Language” sözlərinin ilk hərflərindən yaranır və “sorğuların strukturlaşdırılımış ingilis dili” kimi tərcümə olunur. Beləliklə, SQL sorğularının əksəriyyəti İngilis dilində olan sözlərdən ibarətdir. Keçən dərsimizdə bir SQL operatoru ilə tanış olduq: CREATE BATABASE. Həmin operatorun vasitəsilə yeni baza yaradaq:

Bazamızın adını təyin edək, məsələn: kadrlar

CREATE DATABASE kadrlar

 Cədvəl sözü də sorğularda “Table” adlandırlır. Verilənlər bazasında cədvəllərin yaradılması üçün xüsusi operator və ya komanda nəzərdə tutulub:

CREATE TABLE

CREATE TABLE operatoru ANSİ SQL standartın təsviri vardır. Praktik olaraq bütün platformalar bu operatoru dəstəkləyirlər.

Həmin operatorun sintaksisi (yazılış qaydası) Books Online for SQL Server 2014 resursunun aşağıdakı ünvanlıda yerləşir: CREATE TABLE (Transact-SQL)

Cədvəlin yaradılmasından başqa sətirlərin, məhdudiyyətlərin və açarların təsviri olduğundan operatorun tam sintaksisi uzun və mürəkkəbdir. Lakin biz keçən dərsimizdə həmin qəliz yazıları oxumağı artıq öyrəndik. Həmin sintaksisə diqqət yetirsək görərik ki, birinci hissəsi cədvəl yaratmaq üçün kifayət edir, digər hissələr isə həmin parametrlərin açıqlamasıdır:

CREATE TABLE 
    [ database_name . [ schema_name ] . | schema_name . ] table_name 
    [ AS FileTable ]
    ( { <column_definition> | <computed_column_definition> 
        | <column_set_definition> | [ <table_constraint> ] 
| [ <table_index> ] [ ,...n ] } )
    [ ON { partition_scheme_name ( partition_column_name ) | filegroup 
        | "default" } ] 
    [ { TEXTIMAGE_ON { filegroup | "default" } ] 
    [ FILESTREAM_ON { partition_scheme_name | filegroup 
        | "default" } ]
    [ WITH ( <table_option> [ ,...n ] ) ]
[ ; ]

Hələlik nümunələrimizi elə bu sadələşdirilmiş sintaksis üzərində quracağıq.

Sintaksisin oxunuş qaydasını yadımıza salaq:

  1. Kvadrat mötərizələr [  ] arasında olanlar mütləq deyildir
  2. Fiqurlu mötərizə { } arasında olanlar mütləqdir.
  3. Yumru mötərizələrin ( ) arasında olanlar qrup təşkil edir.
  4. Üçkünc mötərizələr  <  > arasında bölmələrin adları göstərilir.
  5. Kvadrat mötərizənin içində olan vergül və ondan sonra gələn üç nöqtə və n hərfi [ ,…n ] bildirir ki, həmin bölmə n dəfə təkrarlana bilər.
  6. Şaquli xətt | “və ya” deməkdir.

Sintaksisin birinci sətrinə baxaq:

CreateTable_1

Kvadrat mötərizələr arasında olan seçimimiz mütləq deyildir, yəni biz bunları yazmayada bilərik.

  • database_name. schema_name.table_name

Verilənlər bazasının adı. Standarta uyğun olaraq cədvəlin adı üç hissədən olması məsləhətdir: bazanın_adı.sxema_adı.cədvəlin_adı. Hissələr nöqtə ilə bir birindən ayrılırlar. Sxema adı göstərilməyibsə cədvəl dbo sxeminə şamil olunur. Bu yazını qısaltmaq da olar. Məsələn: database_name.table_name və ya schema_name.table_name. Və ya kvadrat mötərizələrdə olanları yazmasaq sadəcə table_name. Deməli yuxarıdakı sintaksisi 3 cürə yazmaq olar:

CREATE TABLE
database_name.schema_name.table_name
CREATE TABLE
schema_name.table_name
CREATE TABLE
table_name

Növbəti sətrə baxaq:

( { <column_definition> | <computed_column_definition> 
        | <column_set_definition> | [ <table_constraint> ] 
| [ <table_index> ] [ ,...n ] } )

Burada cədvəlin sütunları göstərilir. Cədvəlin sütunları yumru mötərizə ilə qrup təşkil edir. Fiqurlu mötərizələrdə olanlar isə mütləqdir. Şaquli xətt isə “və ya” deməkdir.

  • column_definition

Burada sütunun adı və bəzi parametrləri təyin olunur. Bu arqument mütləqdir, yəni heç bir sütunu olmayan cədvəl yaratmaq olmaz. Sütunun təyin olunması zamanı onun adı, verilənlər tipi və bəzi parametrləri qeyd olunur. Məsələn:

CREATE TABLE dbo.Department
(
 Dep_ID int NOT NULL,
 Department nvarchar (50)
)

Diqqət yetirsək görərik ki, Dep_İD – sütunun adı, int – sütunun tipi, NOT NULL isə sütunun parametridir. NOT NULL onu göstərir ki, sütunda boş qiymət ola bilməz. Əgər biz bu parametri qeyd etməsək (ikinci sətirdəki kimi) VBİS bizim üçün NULL qiyməti ola bilən sütun yaradır. Sütunların adları bir-birindən vergüllə ayrılır. Qalan parametrlər açarlarla bağlıdır. Açarlar mövzusu geniş olduğu üçün, onlar barədə növbəti məqalələrdə ətraflı məlumat verməyə çalışacağam.

Növbəti sətrə baxaq:

[ ON { partition_scheme_name ( partition_column_name ) | filegroup 
        | "default" } ]

Cədvəlin yaradılması zamanı cədvəldə olan məlumatların saxlanılacağı fayl qrupunu göstərmək olar. Qrupun adı sütunlar təyin olunandan sonra ON açar sözündən sonra göstərilir. Aşağıdakı nümunədə verilənləri group_1 adı altında fayl qrupunda yerləşən cədvəl yaradılır:

CREATE TABLE Test_Table
(
 Name varchar(10),
 Last_Name varchar(10) collate latin1_general_cs_as
) ON group_1

İndi isə yuxarıda göstərilən sxemə uyğun olaraq cədvəllərimizi yaradaq:

USE kadrlar
GO
CREATE TABLE dbo.Department
(
 Dep_ID int NOT NULL,
 Department nvarchar(50) NULL
)
CREATE TABLE dbo.Personnel
(
 Per_ID int NOT NULL,
 FirstName nvarchar(50) NULL,
 LastName nvarchar(50) NULL,
 Address nvarchar(100) NULL,
 Dep_ID int NULL
)
CREATE TABLE dbo.Phone
(
 Tel_ID int NOT NULL,
 Phone nvarchar(24) NULL,
 Per_ID int NULL
)

 

Burada göstərdiyimiz CREATE TABLE nümunəsi ANSİ SQL standartına uyğundur və əksər VBİS-lərdə istifadə oluna bilər. Verilənlər tiplərində fərqli yanaşmalar olduğundan hər bir VBİS tərəfindən dəstəklənən tiplər seçilməlidir. Verilənlər tipləri barədə növbəti məqalələrdə ətraflı izah veriləcək.

Beləliklə, bugünkü məqalənin də sonuna gəlib çatdıq. Books Online for SQL Server 2014 resursunda bizə təqdim olunan CREATE TABLE sintaksisi ilə tanış olduq və kod nümunələrini oxuduq. Kodlardan istifadə edərək yeni cədvəllər yaratdıq.

Növbəti dərsimizdə verilənlər bazasında istifadə olunan açarlarla tanış olacağıq.

Tapşırıqlar:

  1. Yeni test_baza adlı verilənlər bazası yaradın.
  2. Yuxarıda göstərilən qaydada Books Online for SQL Server 2014 kod nümunəsini açın və yaratdığınız bazada iki cədvəl yaradın: test_table1 (Name, Surname, Lastname sütunları ilə) və test_table2 (Company, Department sütunları ilə)

Növbəti məqalələrdə görüşənədək.

Diqqətinizə görə təşəkkür edirəm.

Dərsliyin əvvəlki hissələrini aşağıdakı keçidlərdən tapa bilərsiniz:

Books Online for SQL Server 2014 (BOL). T-SQL sintaksisinin oxunuş qaydası

Transact-SQL və CREATE DATABASE operatoru nümunələrlə

Səs: +60. Bəyənilsin Zəifdir

Müəllif: Rauf Khalafov

Şərh yazın