Gəlin bir az vaxt ayıraq və artıq öyrəndiklərimizi bir daha nəzərdən keçirək. Addım-addım hər şeyi izah edəcəyik. Qarşıda çox şey olacaq və hamısı sizin artıq öyrəndiyiniz materiala əsaslanacaq. Yaxşı olardı ki, hər komandada nə baş verdiyini tam başa düşəsiniz.
Gəlin tələbələr və kurslarla bağlı nümunəmizi bir daha nəzərdən keçirək. Ən başdan. Cədvəllərin yaradılmasından tutmuş, hər mərhələdə nə baş verdiyinə qədər. Hazırsınız?
İndi students cədvəlini yaradacağıq, burada tələbələr haqqında məlumat saxlanacaq və onu courses cədvəlinə xarici açar vasitəsilə bağlayacağıq. Bu prosesdə görəcəyik ki, xarici açarlar entity-lər arasında əlaqələri modelləşdirmək üçün necə istifadə olunur.
students cədvəlinin yaradılması
students cədvəli tələbələr haqqında məlumat saxlayacaq: onların unikal identifikatoru, adı və doğum tarixi. Biz onu CREATE TABLE komandası ilə yaradacağıq.
CREATE TABLE students (
student_id SERIAL PRIMARY KEY, -- Hər qeyd üçün unikal açar
name TEXT NOT NULL, -- Tələbənin adı (mütləq sahə)
birth_date DATE -- Tələbənin doğum tarixi
);
Burada nə baş verir?
student_id SERIAL PRIMARY KEY: Bu, hər tələbə üçün unikal identifikatordur.SERIALtipi avtomatik artan sahə yaradır,PRIMARY KEYisə identifikatorun hər sətr üçün unikal olmasını təmin edir.name TEXT NOT NULL: Tələbənin adı üçün sahə.NOT NULLgöstərmişik ki, heç bir qeyd ad olmadan əlavə oluna bilməsin.birth_date DATE: Doğum tarixini saxlamaq üçün sahə. BuradaDATEdata tipi tarixlərlə işləməyə kömək edəcək.
Əgər cədvəl insan olsaydı, student_id onun pasportu, name - açıq-aşkar adı, birth_date isə bəzən gizlətmək istədiyimiz, amma verilənlər bazası üçün vacib olan məlumat olardı.
courses cədvəlinin yaradılması
İndi kurslar haqqında məlumat saxlayacaq cədvəl yaradacağıq. Burada kursun identifikatoru, adı və təsviri olacaq.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Kurs üçün unikal identifikator
title TEXT NOT NULL, -- Kursun adı (mütləq sahə)
description TEXT -- Kursun təsviri
);
Burada nə baş verir?
course_id SERIAL PRIMARY KEY: Eyni qaydada, bu avtomatik artan sahədir və hər kurs üçün unikal identifikator yaradır.title TEXT NOT NULL: Kursun adı üçün sahə.NOT NULLgöstərmişik, çünki hər kursun adı olmalıdır - bu, məntiqlidir.description TEXT: Kursun qısa təsviri üçün sahə. Bu əlavə sahədir və boş qala bilər (NOT NULLməhdudiyyəti yoxdur).
Adı olmayan kurs, üz qabığı olmayan kitab kimidir. Amma verilənlər bazası buna imkan verməyəcək!
students cədvəlinin courses cədvəli ilə əlaqələndirilməsi
Təsəvvür edək ki, hər tələbə yalnız bir kursa yazıla bilər. Bunun üçün courses cədvəlinə xarici açar əlavə edəcəyik, hansı ki, students cədvəlindəki tələbə identifikatoruna istinad edəcək.
CREATE TABLE courses (
course_id SERIAL PRIMARY KEY, -- Kurs üçün unikal identifikator
title TEXT NOT NULL, -- Kursun adı (mütləq sahə)
description TEXT, -- Kursun təsviri
student_id INT REFERENCES students(student_id) -- students cədvəli ilə əlaqələndirən xarici açar
);
student_id INT REFERENCES students(student_id) nə edir?
student_idsahəsini yaradırıq, hansı ki,studentscədvəlindəkistudent_idunikal identifikatoruna istinad edəcək.- Cədvəllər arasındakı əlaqə
REFERENCESaçar sözü ilə təmin olunur. - Bu o deməkdir ki,
coursescədvəlinə hər dəfə məlumat əlavə edəndəstudent_iddəyəristudentscədvəlində mövcud olmalıdır. Məsələn, mövcud olmayanstudent_idilə kursa tələbə əlavə etməyə çalışsanız, səhv alacaqsınız.
Cədvəllərə məlumat əlavə edirik
Cədvəllər yaradıldıqdan sonra gəlin bir az tələbə və kurs əlavə edək. Axı boş auditoriyada oturmaq darıxdırıcıdır, düzdür?
Tələbələri əlavə edirik
INSERT INTO students (name, birth_date) VALUES
('Alex Lin', '2000-05-10'),
('Maria Chi', '1998-02-15'),
('Otto Song', '2001-09-25');
Kursları əlavə edirik
INSERT INTO courses (title, description, student_id) VALUES
('SQL əsasları', 'SQL-in əsas sintaksisinin öyrənilməsi', 1),
('Relyasion verilənlər bazaları', 'Relyasion modellərin başa düşülməsi', 2),
('PostgreSQL yeni başlayanlar üçün', 'PostgreSQL-in quraşdırılması və sazlanması', 3);
Hər kurs üçün student_id göstərdik və onu students cədvəlindəki tələbə identifikatoru ilə əlaqələndirdik.
Cədvəllər arasındakı əlaqəni yoxlayırıq
İndi gəlin əmin olaq ki, cədvəllərimiz həqiqətən əlaqəlidir. Bunun üçün kurslar və tələbələrin adlarını birlikdə göstərən sorğu yaradacağıq.
SELECT
courses.title AS course_title,
courses.description AS course_description,
students.name AS student_name
FROM
courses
JOIN
students ON courses.student_id = students.student_id;
Nümunə nəticə: Sorğunun nəticəsi:
| course_title | course_description | student_name |
|---|---|---|
| SQL əsasları | SQL-in əsas sintaksisinin öyrənilməsi | Alex Lin |
| Relyasion verilənlər bazaları | Relyasion modellərin başa düşülməsi | Maria Chi |
| PostgreSQL yeni başlayanlar üçün | PostgreSQL-in quraşdırılması və sazlanması | Otto Song |
Kursları tələbələrlə xarici açar vasitəsilə əlaqələndirdik — və indi bir sorğu ilə əlaqəli məlumatları əldə edə bilirik. Relyasion model belə işləyir!
Xülasə
Ümid edirəm ki, indi izah etdiyimiz hər şey sizə aydın və başadüşülən oldu. Çünki tezliklə daha irəli gedəcəyik və istərdim ki, biliklərinizə tam əmin olasınız.
GO TO FULL VERSION