FOREIGN KEY
.
SQL ilovali yaxlitlikni
FOREIGN KEY
yordamida ta‘minlaydi.
Tashqi kalit vazifasi ajdod kalitda koʻrsatilmagan qiymatlarni tashqi kalit
37
maydonlariga kiritmaslikdir.
FOREIGN KEY
cheklanishi sintaksisi:
FOREIGN KEY REFERENCES
[]
Birinchi roʻyxat komanda tomonidan oʻzgartiriluvchi ustunlar
roʻyxatidir.
Pktable
- bu ajdod kalitli jadval. Ikkinchi ustunlar roʻyxati bu
ajdod kalitni tashkil qiluvchi ustunlardir.
Misol uchun Xodimlar jadvaliga ilova qiluvchi tashqi kalit sifatida
e‘lon qilingan
MNum
maydoniga ega boʻlgan Mijozlar jadvalini
yaratamiz:
CREATE TABLE Clients
(id integer NOT NULL PRIMARY KEY,
name varchar (45),
address varchar(255),
phone varchar(15),
MNum
integer
,
status tinyint(1) ) DEFAULT "NULL",
is_delete tinyint(1),
FOREIGN KEY (MNum) REFERENCES Employee (MNum))
Tashqi kalitni ustunlar cheklanishi sifatida berish mumkin. Buning
uchun
FOREIGN
KEY
koʻrinishi
— koʻrsatkichli cheklanish
(
REFERENCES
) qoʻllanadi:
FOREIGN
KEY
cheklanishidan jadval yoki ustun cheklanishi sifatida
foydalanganda, agar ular
PRIMARY
KEY
cheklanishiga ega boʻlsa, ajdod
kalit ustunlarini koʻrsatmaslik mumkin.
SQL-da jadvallar va ularning ustunlarini belgilashda biz ma‘lum
cheklovlar qoʻyadigan bir qator atributlardan foydalanishimiz mumkin.
Keling, ushbu atributlarni koʻrib chiqaylik.
PRIMARY KEY ifodasi ustunni asosiy kalit qilish uchun ishlatilishi
mumkin.
1.
2.
3.
4.
5.
6.
7.
8.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(30),
LastName CHARACTER
VARYING(30),
Email CHARACTER
VARYING(30),
Age INTEGER
)
38
Birlamchi kalit jadvaldagi qatorni noyob tarzda aniqlaydi. Birlamchi
kalit SERIAL ustunlar boʻlishi shart emas; ular boshqa har qanday turni
ifodalashi mumkin.
Asosiy kalitni jadval darajasida oʻrnatish:
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE
TABLE
Customers
(
Id SERIAL,
FirstName CHARACTER
VARYING(30),
LastName CHARACTER
VARYING(30),
Email CHARACTER
VARYING(30),
Age INTEGER,
PRIMARY
KEY(Id)
);
Asosiy kalit murakkab kalit boʻlishi mumkin. Jadvaldagi satrni yagona
aniqlash uchun bir vaqtning oʻzida ikkita ustunga ega boʻlsak, bunday kalit
talab qilinishi mumkin. Masalan:
1.
2.
3.
4.
5.
6.
7.
8.
CREATE
TABLE
OrderLines
(
OrderId INTEGER,
ProductId INTEGER,
Quantity INTEGER,
Price MONEY,
PRIMARY
KEY(OrderId, ProductId)
);
Bu yerda OrderId va ProductId maydonlari birgalikda birlamchi asosiy
kalit vazifasini bajaradi. Ya'ni, OrderLines jadvalida bu ikkala maydon bir
vaqtning oʻzida bir xil qiymatlarga ega boʻlgan ikkita qator boʻlishi
mumkin emas.
UNIQUE
Agar ustun faqat noyob qiymatlarga ega boʻlishini istasak, u uchun
UNIQUE atributini aniqlash mumkin.
1.
2.
3.
4.
5.
6.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Email CHARACTER
VARYING(30) UNIQUE,
39
7.
8.
9.
Phone CHARACTER
VARYING(30) UNIQUE,
Age INTEGER
);
Bunday holda, elektron pochta manzili va telefon raqamini
koʻrsatadigan ustunlar noyob qiymatlarga ega boʻladi. Va biz ushbu
ustunlar uchun bir xil qiymatlar bilan jadvalga ikkita qator qoʻsha
olmaymiz.
Ushbu atributni jadval darajasida ham aniqlashimiz mumkin:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Email CHARACTER
VARYING(30),
Phone CHARACTER
VARYING(30),
Age INTEGER,
UNIQUE(Email, Phone)
);
Yoki shunday:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Email CHARACTER
VARYING(30),
Phone CHARACTER
VARYING(30),
Age INTEGER,
UNIQUE(Email),
UNIQUE(Phone)
);
NULL va NOT NULL
Ustun NULL boʻlishi mumkinligini koʻrsatish uchun ustunni
belgilashda ustun atributini NULL yoki NOT NULL ga oʻrnatishingiz
mumkin. Agar bu atribut aniq ishlatilmasa, ustun sukut boʻyicha null
boʻladi. Ustun birlamchi kalit sifatida ishlayotganida istisno - bu holda,
sukut boʻyicha ustun NULL EMAS.
40
1.
2.
3.
4.
5.
6.
7.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20) NOT
NULL,
LastName CHARACTER
VARYING(20) NOT
NULL,
Age INTEGER
);
DEFAULT
DEFAULT atributi ustun uchun standart qiymatni belgilaydi. Agar
ma‘lumotlarni qoʻshganda ustun uchun qiymat koʻrsatilmagan boʻlsa, u
uchun standart qiymat ishlatiladi.
1.
2.
3.
4.
5.
6.
7.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Age INTEGER
DEFAULT
18
);
Bu yerda Yosh ustunida standart qiymat 18 ga teng.
CHECK
CHECK kalit soʻzi ustunda saqlanishi mumkin boʻlgan qiymatlar
oraligʻida chegarani belgilaydi. Buning uchun CHECK soʻzidan keyin
ustun yoki bir nechta ustunlar mos kelishi sharti qavs ichida koʻrsatiladi.
Masalan, mijozlarning yoshi 0 dan kam yoki 100 dan oshmasligi kerak:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Age INTEGER
DEFAULT
18 CHECK(Age >0 AND
Age <
100),
Email CHARACTER
VARYING(30) UNIQUE
CHECK(Email
!=''),
Phone CHARACTER
VARYING(20) UNIQUE
CHECK(Phone
!='')
);
41
Shuningdek, u E-pochta va Telefon ustunlari qiymat sifatida boʻsh
qatorga ega boʻlmasligini belgilaydi (boʻsh satr NULLga teng emas).
AND kalit soʻzi shartlarni birlashtirish uchun ishlatiladi. Shartlar katta
(>), kichik (<), teng emas (! =) taqqoslash amallari shaklida koʻrsatilishi
mumkin.
Bundan tashqari, CHECK-dan foydalanib, siz butun jadval uchun
cheklov yaratishingiz mumkin:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE
TABLE
Customers
(
Id SERIAL PRIMARY
KEY,
Age INTEGER
DEFAULT
18,
FirstName CHARACTER
VARYING(20),
LastName CHARACTER
VARYING(20),
Email CHARACTER
VARYING(30) UNIQUE,
Phone CHARACTER
VARYING(20) UNIQUE,
CHECK((Age >0 AND
Age<100) AND
(Email !='') AND
(Phone !=''))
);
CONSTRAINT bayonoti. Cheklovlar nomini oʻrnatish.
CONSTRAINT kalit soʻzidan cheklovlar nomini belgilash uchun
foydalanish mumkin. PRIMARY KEY, UNIQUE, CHECK cheklovlar
sifatida ishlatilishi mumkin.
Cheklov nomlari ustunlar darajasida belgilanishi mumkin. Ular
CONSTRAINTdan keyin atributlardan oldin belgilanadi:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE
TABLE
Customers
(
Id SERIAL CONSTRAINT
customer_Id PRIMARY
KEY,
Age
INTEGER
CONSTRAINT
customers_age_check
CHECK(Age >0 AND
Age < 100),
FirstName CHARACTER
VARYING(20) NOT
NULL,
LastName CHARACTER
VARYING(20) NOT
NULL,
Email
CHARACTER
VARYING(30)
CONSTRAINT
customers_email_key UNIQUE,
Phone
CHARACTER
VARYING(20)
CONSTRAINT
customers_phone_key UNIQUE
);
Prinsipial jihatdan cheklovlarning nomlarini koʻrsatish shart emas,
tegishli atributlarni oʻrnatganingizda, SQL Server avtomatik ravishda
42
ularning nomlarini aniqlaydi. Ammo, cheklovning nomini bilib, biz unga
murojaat qilishimiz mumkin, masalan, uni olib tashlash uchun.
Shuningdek, siz cheklovlarning barcha nomlarini jadval atributlari
orqali oʻrnatishingiz mumkin:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE
TABLE
Customers
(
Id SERIAL,
Age INTEGER,
FirstName CHARACTER
VARYING(20) NOT
NULL,
LastName CHARACTER
VARYING(20) NOT
NULL,
Email CHARACTER
VARYING(30),
Phone CHARACTER
VARYING(20),
CONSTRAINT
customer_Id PRIMARY
KEY(Id),
CONSTRAINT
customers_age_check CHECK(Age >0 AND
Age < 100),
CONSTRAINT
customers_email_key UNIQUE(Email),
CONSTRAINT
customers_phone_key UNIQUE(Phone)
);
CONSTRAINT iborasi cheklovlar yaratish uchun ishlatiladimi yoki
yoʻqligidan qat'i nazar (bu holda, cheklovlarni oʻrnatishda PostgreSQL
ularni oʻzi nomlaydi), biz pgAdmin-dagi barcha cheklovlarni pastki
tugundagi ma‘lumotlar bazasi tugunida koʻrishimiz mumkin:
3.6-rasm. CONSTRAINT iborasi cheklovlar yaratish oynasi.
|