Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SQL в вопросах и задачах

.pdf
Скачиваний:
34
Добавлен:
21.05.2015
Размер:
917.91 Кб
Скачать

 

101

Х отя в

п р ив ед енном п римереимена в нешнего и р од ительского ключ ей

сов п а д ают,

они не о бяза т ельно д олжны бытьод ина ков ыми, хотя ч асто их

соз на тельно з ад ают од ина ков ыми, ч тобы соед инениебыло болеенагляд ным.

4.6.2.

С ост авны е внеш ние кл ю чи

Н а

п р актике в нешний ключ необяз ательно может состоятьтолько из

од ного п оля.

Под обно п ерв ич ному ключ у, в нешний ключ может состоятьиз

любого ч исла

п олей. Внешний ключ и род ительский ключ , на который он

ссылается,

конеч но же,

д олжны бытьоп ред елены на од ина ков ом множеств е

п олей (п о

колич еств у

п олей, тип а м п олей и п оряд ку след ов а ния п олей).

Внешние ключ и, состоящ ие

из од ного п оля – п рименяемые в тип ов ых

таблица х на стоящ его из д ания,

на иболееч асты на п рактике. Ч тобы сохра нить

п ростоту обсужд ения, буд ем гов оритьо в нешнем ключ е, ка к об од иноч ном столбце, хотя в се, ч то буд ет из ла гаться о п оле, котороеяв ляется в нешним ключ ом, сп ра в ед лив о и д ля состав ных в нешних ключ ей, оп ред еленных на груп п еп олей.

4.6.3. С м ы сл внеш негои родит ел ь скогокл ю чей

К огд а п оле яв ляется в нешним ключ ом, оно оп ред еленным образ ом св яз ано с таблицей, на котор ую этот ключ ссыла ется. К ажд ое з нач ение в этом п оле (в нешнем ключ е) неп осред ств енно п рив яз ано к конкр етному з нач ению в д ругом п оле (род ительском ключ е). Зна ч ения род ительского ключ а д олжны бытьуникальными, так он од нов ременно яв ляется ключ ом

отношения.

Знач ения в нешнего

ключ а

не о бяза т ельно

д олжны быть

уникальными, то есть в

отношении

может быть любое ч исло

строк с

од инаков ыми

з нач ениями

атрибутов ,

яв ляющ ихся в нешним ключ ом. При

этом строки,

сод ер жа щ ие од инаков ые з нач ения в нешнего

ключ а

д олжны

о бяза т ельно

ссылатьсяна

конкретное, п рисутств ующ ее д анный момент в

таблице,

з нач ение род ительского

ключ а.

К роме того, ни в

од ной строке

таблицы нед олжно бытьз на ч ений в нешнего ключ а, д лякоторых в

текущ ий

момент

отсутств уют соотв етств ующ ие з на ч ения род ительского

ключ а.

Д ругими

слов а ми не д олжно быть так

наз ыв а емых “в исяч их”

ссылок

102

в нешнего ключ а. Е сли ука з анные требов а ния в ып олняются в конкретный момент сущ еств ов а ния баз ы д анных, то гов орят, ч то д анные на ход ятся в со гла со ва нно м состоянии, а сама ба з а на ход ится в состоянии ссыло чно й цело ст но ст и .

4.6.4. О граничение FOREIGN KEY (внеш негокл ю ча)

Д ля решения в оп росов

п од д ержа ния ссылоч ной целостности в SQL

исп ольз уется огранич ениеFOREIGN KEY. Н а з нач ениеFOREIGN KEY – это

огранич ение д оп устимых

з нач ений п оля множеств ом з нач ений

род ительского ключ а , ссылка на который указ ыв аетсяп ри оп иса нии д а нного огранич енияFOREIGN KEY.

Проблемы обесп еч ения ссылоч ной

целостности в оз ника ют

как

п ри

в в од е з нач ений п оля,

яв ляющ егося

в нешним ключ ом, так

и

п ри

мод ифика ции/уд алении

з нач ений

п оля,

на которое ссыла ется э тот ключ

(род ительского ключ а). О д но из д

ейств ий огра нич ения FOREIGN KEY – это

отклонение(блокиров ка) в в од а з нач ений в нешнего ключ а, отсутств ующ их в таблице с род ительским ключ ом. Также это огра нич ение в оз д ейств ует на в оз можностьиз менятьили уд а лятьз на ч ениярод ительского ключ а .

О гра нич ениеFOREIGN KEY исп ольз уетсяв кома нд ах CREATE TABLE и ALTER TABLE п ри соз д ании или мод ификации таблицы, которая сод ержит п оле, котороетребуетсяобъяв итьв нешним ключ ом. В кома нд еуказ ыв ается имя род ительского ключ а, на который имеется ссылка в огра нич ении

FOREIGN KEY.

103

4.6.5. В неш ний кл ю ч как ограничение т абл иц ы

Синта ксис огра нич енияFOREIGN KEY имеет след ующ ий в ид .

FOREIGN KEY < с п и с о к с т о л бцо в >

REFERENCES

< ро ди т ел ь с к а я т а бл и ца >

 

[< ро ди т ел ь с к и й к л ю ч >];

В э том п ред ложении с п и с о к с т о л бцо в – это сп исок из од ного или более столбцов таблицы, которыебуд ут соз д аны или из менены кома нд ами CREATE TABLE или ALTER TABLE (д олжны бытьотд елены д ругот д руга з ап ятыми).

Параметр

ро ди т ел ь с к а я

т а бл и ца

э то

имя таблицы, сод ержащ ей

род ительский

ключ .

Э то,

в

ч астности,

может быть и

таблицей, которая

соз д а ется или из меняется текущ ей команд ой.

Па раметр

ро ди т ел ь с к и й к л ю ч

п ред став ляет

собой

сп исок

столбцов

род ительской

таблицы,

которые

соста в ляют

собств енно

род ительский

ключ . О ба

сп иска

столбцов ,

оп ред еляющ их в нешний и род ительский ключ и, д олжны бытьсов местимы, а именно:

∙ сод ержатьод инаков оеч исло столбцов .

∙ п ослед ов ательность(1-й, 2-й, 3-й и т.д .) столбцов сп иска в нешнего ключ а

д олжны иметь

тип ы д анных

и

раз меры,

сов п а д ающ ие

с

соотв етств ующ ими

(1-м, 2-м, 3-ми т.д .) столбцами сп иска род ительского

ключ а.

 

 

 

 

 

 

Соз д а д им таблицу

STUDENT с

п олем

UNIV_ID,

оп ред еленным

в

кач еств ев нешнего ключ а , ссыла ющ егосяна та блицу UNIVERSITY:

 

CREATE TABLE STUDENT

 

 

 

 

( STUDENT_ID

INTEGER PRIMARY KEY,

 

 

SURNAME

 

CHAR (25),

 

 

 

 

NAME

 

CHAR (10),

 

 

 

 

STIPEND

 

INTEGER,

 

 

 

 

KURS

 

INTEGER,

 

 

 

 

CITY

 

CHAR (15),

 

 

 

 

BIRTHDAY

 

DATE,

 

 

 

 

UNIV_ID

 

INTEGER REFERENCES,

 

 

CONSTRAINT UNIV_FOR_KEY FOREIGN KEY (UNIV_ID)

 

 

 

REFERENCES UNIVERSITY (UNIV_ID));

 

104

При п р именении команд ы ALTER TABLE к какой-либо таблице д ля з ад а нияогранич енияFOREIGN KEY, з нач енияв нешнего ключ а э той таблицы и род ительского ключ а соотв етств ующ ей таблицы д олжны на ход иться в состоянии ссылоч ной целостности. В п р отив ном случ ае команд а буд ет отклонена.

Синта ксис команд ы ALTER TABLE в этомслуч аеимеет след ующ ий в ид :

ALTER TABLE <и м ят а бли цы >

ADD CONSTRAINT < и мя о гра ни чени я >

FOREIGN KEY (< с п и с о к с т о л бцо в внеш него к л ю ча > )

REFERENCES

< и мя ро ди т ел ь с к о й т а бл и цы>

 

[(< с п и с о к с т о л бцо в ро ди т ел ь с к о го к л ю ча >)];

Н а п ример, команд а

 

ALTER TABLE STUDENT

ADD CONSTRAINT STUD_UNIV_FOR_KEY

FOREIGN KEY (UNIV_ID)

REFERENCES UNIVERSITY (UNIV_ID);

д обав ляет огра нич ениев нешнего ключ а д лята блицы STUDENT.

4.6.6. В неш ний кл ю ч как ограничение ст ол бц ов

О гра нич ениев нешнего ключ а может указ ыв аться нед ля в сей та блицы, как это было п оказ ано в ыше, а неп осред ств енно на соотв етств ующ ий столбец таблицы. При таком в ар ианте, наз ыв аемомссы ло чны м о гр а ни чени ем ст о лбца , ключ ев оеслов о FOREIGN KEY фактич ески неисп ольз уется. Пр осто исп ольз уется ключ ев ое слов о REFERENCES и д алее указ ыв а ется имя род ительского ключ а, п од обно след ующ ему п ример у.

CREATE TABLE STUDENT

( STUDENT_ID

INTEGER PRIMARY KEY,

SURNAME

CHAR (25),

NAME

CHAR (10),

STIPEND

INTEGER,

KURS

INTEGER,

CITY

CHAR (15),

BIRTHDAY

DATE,

UNIV_ID INTEGER REFERENCES UNIVERSITY(UNIV_ID));

 

 

 

105

 

 

 

К оманд а

оп ред еляет

п оле STUDENT.UNIV_ID как

в нешний

ключ ,

исп ольз ующ ий

в

ка ч еств е

род ительского

ключ а

п оле

UNIVERSITY.UNIV_ID, яв ляющ еесяключ омтаблицы UNIVERSITY.

 

Э та форма экв ив алентна след ующ ему огранич ениютаблицы STUDENT:

FOREIGN KEY (UNIV_ID) REGERENCES UNIVERSITY (UNIV_ID)

 

или, в д ругой з ап иси,

 

 

 

 

 

CONSTRAINT UNIV_FOR_KEY FOREIGN KEY (UNIV_ID)

 

 

 

 

REFERENCES UNIVERSITY (UNIV_ID).

Е сли в

род ительской

таблице

у род ительского

ключ а ука з ано

огранич ение PRIMARY KEY,

то п р и указ ании огранич ения FOREIGN KEY,

накла д ыв аемого на та блицу или на столбцы, м о ж но не ука зы ва т ь спи со к ст о лбцо в р о д и т ельско го ключа . Е стеств енно, в случ а еисп ольз ов а нияключ ей

со

многими

п олями,

п оряд ок столбцов

в

соотв етств ующ их в нешних и

п ерв ич ных

ключ ах

д олжен сов п а д ать,

и

в

любом случ а е,

п р инцип

сов местимости межд у д в умяключ ами д олжен бытьсоблюд ен.

 

 

Н а п ример, если огра нич ениеPRIMARY KEY ра з мещ ено в п олеUNIV_ID

таблицы UNIVERSITY

 

 

 

 

 

 

CREATE TABLE UNIVERSITY

 

 

 

 

 

( UNIV_ID

 

INTEGER PRIMARY KEY,

 

 

UNIV_NAME

CHAR(10),

 

 

 

 

 

RATING

 

INTEGER,

 

 

 

 

 

CITY

 

CHAR(15));

 

 

 

 

то

в та блице STUDENT п оле UNIV_ID можно

исп ольз ов ать в

кач еств е

в нешнего ключ а, неуказ ыв а яв ссылкеимярод ительского ключ а :

 

 

CREATE TABLE STUDENT

 

 

 

 

 

(STUDENT_ID

INTEGER PRIMARY KEY,

 

 

SURNAME

 

CHAR (25),

 

 

 

 

 

NAME

 

CHAR (10),

 

 

 

 

 

STIPEND

 

INTEGER,

 

 

 

 

 

KURS

 

INTEGER,

 

 

 

 

 

CITY

 

CHAR (15),

 

 

 

 

 

BIRTHDAY

 

DATE,

 

 

 

 

 

UNIV_ID

 

INTEGER REFERENCES UNIVERSITY);

Такаяв оз можностьв страив а ласьв яз ык д ляобесп еч енияисп ольз ов а ния

106

п ерв ич ных ключ ей кач еств ерод ительских.

4.6.7.П оддерж ание ссы л очной ц ел ост ност и и ограничения з начений родит ел ь скогокл ю ча

Под д ер жа ние ссылоч ной целостности требует в ып олнения некоторых огранич ений на з нач ения, которыемогут бытьз ад а ны в п олях, объяв ленных

как в нешний ключ и род ительский ключ . Н а бор

з на ч ений род ительского

ключ а д олжен бытьтаким, ч тобы гарантиров а ть,

ч то кажд ому з нач ению

в нешнего ключ а в род ительской таблицеобяз ательно соотв етств ов ала од на и только од на строка, ука з анна ясоотв етств ующ им род ительским ключ ом. Э то

оз нач ает, ч то род ительский ключ

д олжен бытьуни ка льны м и несод ержать

п устых з нач ений (NULL). След ов ательно, п ри объяв лении в нешнего ключ а

необход имо

убед иться,

ч то

в се

п оля, которые исп ольз уются

как

род ительские

ключ и,

имеют

или

огранич ение PRIMARY KEY

или

огранич енияUNIQUE и NOT NULL.

4.6.8.И спол ь з ование первичногокл ю ча в качест ве уникал ь ноговнеш негокл ю ча

Ссылка

в нешних ключ ей только

на

п ерв ич ные ключ и сч итается

хорошим

стилем п рогра ммиров ания

SQL-з ап росов .

В

этом

случ ае

исп ольз уемые в нешние ключ и св яз ыв а ются не п росто

с

род ительскими

ключ ами,

на

которые они ссыла ются,

а

с од ной конкретной

строкой

род ительской таблицы, в которой буд ет на йд ено соотв етств ующ еез на ч ение

род ительского ключ а.

Са м п о себе род ительский ключ не обесп еч ив ает

ника кой информа ции,

которая бы не была уже п ред ста в лена в о в нешнем

ключ е. Внешний ключ

– это не п р осто св яз ьмежд у д в умя ид ентич ными

з нач ениями столбцов д в ух таблиц, но э то – св яз ьм еж д у д вум я ст р о ка м и д вух т а бли ц.

Так как на з нач ение п ерв ич ного ключ а состоит именно в том,

ч тобы

од ноз на ч но ид ентифициров атьстроку, то исп ольз ов а ние ссылки на

него

кач еств е в нешнего ключ а яв ляется более логич ным и более од ноз нач ным

в ыбором д ля в нешнего ключ а.

Внешний ключ , который не имеет никакой

д ругой цели

кроме св яз ыв ания строк, на п омина ет

п ерв ич ный ключ ,

исп ольз уемый

исключ ительно

д ля ид ентифика ции

строк, и яв ляется

107

хорошим сред ств ом сохранения нагляд ности и п ростоты структуры баз ы д анных.

4.6.9.О граничения з начений внеш негокл ю ча

Внешний ключ может

сод ержать только

те

з нач ения, которые

фактич ески п ред став лены

в

род ительском ключ е,

или яв ляются п устыми

(NULL). Поп ытка в в ести

д р угие з нач ения в этот

ключ д олжна быть

отклонена, п оэтому объяв лениев нешнего ключ а, как NOT NULL, неяв ляется обяз а тельным.

4.6.10. Дей ст вие ограничений внеш негои родит ел ь ского кл ю чей при испол ь з овании ком анд м одиф икац ии

К ак ужегов орилось, п ри исп ольз ов ании команд INSERT и UPDATE д ля мод ифика ции з нач ений столбца , объяв ленного как внеш ни й ключ, в нов ь

в в од имые

з нач ения д олжны

уже быть обяз ательно п ред став лены в

фактич ески

п рисутств ующ их

з нач ениях

столбца,

объяв ленного

род ительским ключ ом. Пр и э томможно п омещ атьв эти п оляп устые(NULL)

з нач ения, несмотряна то, ч то з нач енияNULL нед оп устимы

род ительских

ключ ах. М ожно также уд а лять (DELETE)

любые строки

с

в нешними

ключ ами из таблицы, в которой э ти ключ и объяв лены.

 

 

При необход имости мод ификации з нач ений р о д и т ельско го

ключа д ело

обстоит ина ч е. Исп ольз ов аниекома нд ы INSERT, котор аяосущ еств ляет в в од нов ой з ап иси, не в ыз ыв ает никаких особенностей, п р и которых в оз можно нарушениессылоч ной целостности. О д на ко кома нд а UPDATE, из меняющ ая з нач ение род ительского ключ а и команд а DELETE, уд аляющ ая строку, сод ержащ уютакой ключ , сод ержат в оз можностьнарушениясогласов а нности з нач ений род ительского и ссылающ ихсяна него в нешних ключ ей. Н а п ример,

может в оз никнуть так наз ыв аема я “ви сяча я” ссылка

в нешнего ключ а

на

несущ еств ующ ее

з нач ение род ительского

ключ а,

ч то

сов ершенно

не

д оп устимо. Ч тобы

п ри п рименении

кома нд

UPDATE и

DELETE к п олю,

яв ляющ емуся р од ительским ключ ом,

не наруша лась целостностьссылки,

в оз можны след ующ иев ар ианты д ейств ий.

 

 

 

 

 

108

 

 

Л юбые из менения з нач ений род ительского ключ а за пр еща ют ся и

п р и

 

п оп ытке их сов ершения отв ер га ются (огранич ение NO

ACTION

или

 

RESTRICT). Э та сп ецифика цияд ейств ияп рименяетсяп о умолч а нию.

 

Из менения з нач ений р од ительского ключ а р а зр еш а ют ся,

но п р и

этом

 

а в томатич ески осущ еств ляетсяко р р екци яв сех з нач ений в нешних ключ ей,

 

ссыла ющ ихся на мод ифицируемое з нач ение род ительского ключ а.

Э то

 

наз ыв аетсяка ска д ны м и зм енени ем (огранич ение CASCADE).

 

 

Из менения з нач ений р од ительского ключ а р а зр еш а ют ся,

но п р и

этом

 

соотв етств ующ иез нач енияв нешнего ключ а ав тома тич ески уд а ляют ся, то

 

естьз аменяютсяз нач ениемNULL (огранич ение SET NULL).

 

 

Из менения з нач ений р од ительского ключ а р а зр еш а ют ся,

но п р и

этом

соотв етств ующ ие з нач ения в нешнего ключ а а в томатич ески за м еняют ся з нач ениемп о умолч а нию(огранич ение SET DEFAULT).

При оп исании в нешнего ключ а д олжно ука з ыв аться, какой из п рив ед енных в ариа нтов д ейств ий след ует п рименять, п рич ем общ емслуч ае это д олжно быть указ ано раз д ельно д ля кажд ой из кома нд UPDATE и DELETE. В кач еств еп ример а исп ольз ов анияогра нич ений, на клад ыв аемых на оп ерации мод ифика ции род ительских ключ ей, можно п рив ести след ующ ий з ап рос:

CREATE TABLE NEW_EXAM_MARKS

( STUDENT_ID INTEGER NOT NULL,

SUBJ_ID

INTEGER NOT NULL,

MARK

INTEGER,

DATA

DATE,

CONSTRAINT EXAM_PR_KEY PRIMARY KEY (STUDENT_ID, SUBJ_ID),

CONSTRAINT SUBJ_ID_FOR_KEY FOREIGN KEY (SUBJ_ID)

 

 

REFERENCES SUBJECT,

 

CONSTRAINT STUDENT_ID_FOR_KEY FOREIGN KEY (STUDENT_ID)

REFERENCES STUDENT ON UPDATE CASCADE

 

 

 

ON DELETE NO ACTION);

В этом п римере п ри п оп ытке из менения з нач ения п оля STUDENT_ID

таблицы STUDENT

буд ет

ав томатич ески обесп еч ив аться

каскад ная

корректиров ка этих

з нач ений

в таблице EXAM_MARKS. То

есть п ри

 

109

из менении ид ентифика тора

студ ента STUDENT_ID в таблице STUDENT

сохра нятся в се ссылки на

его оценки. О д нако любая п оп ытка уд а ления

(DELETE) з ап иси о студ ентеиз таблицы STUDENT буд ет отв ергаться, если в таблицеEXAM_MARKS сущ еств уют з а п иси об оценка х д анного студ ента.

УП Р АЖ НЕ НИ Я

101. Соз д айте таблицу с именем SUBJECT_1, с теми же п олями, ч то в таблице SUBJECT (п ред мет обуч ения). Поле SUBJ_ID яв ляется п ерв ич нымключ ом.

102. Соз д айте та блицу

с именем SUBJ_LECT_1 (уч ебные д исцип лины

п реп од ав ателей),

с

п олями

LECTURER_ID

(ид ентификатор

п реп од ав ателя) и SUBJ_ID (ид ентифика тор п реп од ав аемой д исцип лины).

Пер в ич ным ключ ом

(состав ным)

та блицы яв ляется

п ара атрибутов

LECTURER_ID и

SUBJ_ID, кроме того, п оле LECTURER_ID яв ляется

в нешним ключ ом, ссыла ющ имся на та блицу LECTURER_1, ана логич ную таблицеLECTURER (п реп од ав а тель), а п олеSUBJ_ID яв ляется в нешним ключ ом, ссыла ющ имся на таблицу SUBJECT_1, а на логич ную та блице

SUBJECT.

103. Соз д айтетаблицу с именемSUBJ_LECT_1 как в п ред ыд ущ ем з ад а нии, но д обав ьтед ля в сех еев нешних ключ ей режим обесп еч енияссылоч ной целостности, з ап рещ а ющ ий обнов ление и уд аление соотв етств ующ их р од ительских ключ ей.

104. Соз д айте таблицу с именем LECTURER_1, с теми же п олями, ч то в таблице LECTURER. Пер в ич ным ключ ом таблицы яв ляется атрибут LECTURER_ID, кроме того, п оле UNIV_ID яв ляется в нешним ключ ом, ссыла ющ имся на таблицу UNIVERSITY_1 (а налог UNIVERSITY). Д ля э того п оля установ итекаскад ные режимы обесп еч ения целостности д ля команд UPDATE и DELETE.

105. Соз д айтетаблицу с именем UNIVERSITY_1, с теми жеп олями, ч то в таблице UNIVERSITY (унив ерситеты). Поле UNIV_ID яв ляется п ерв ич нымключ ом.

106. Соз д айтета блицу с именем EXAM_MARKS_1. О на д олжна сод ержать такие же п оля, ч то и та блица EXAM_MARKS (экз а менационные оценки).

 

 

110

 

 

 

 

К омбинация

п олей

EXAM_ID, STUDENT_ID

и SUBJ_ID

яв ляется

п ерв ич ным ключ ом. К рометого, п оляSTUDENT_ID и SUBJ_ID яв ляются

в нешним ключ ами,

ссыла ющ имися

соотв етств енно

на

таблицы

STUDENT_1 и SUBJECT_1. Д ляэтих п олей уста нов итережим каска д ного

обесп еч ения

ссылоч ной целостности

п ри

оп ерации

обнов ления

соотв етств ующ их п ерв ич ных ключ ей, и режим блокиров ки п ри п оп ытке уд алениярод ительского ключ а п ри налич ии ссылки на него.

107. Соз д айтетаблицу с именем STUDENT_1. О на д олжна сод ержатьтакие

же п оля,

ч то и таблица

STUDENT

и

нов ое п оле SENIOR_STUDENT

(стар оста),

з нач ением которого д олжен

быть ид ентификатор

студ ента ,

яв ляющ егося старостой

груп п ы, в

которой уч ится д а нный

студ ент.

У ка житенеобход имыед ляэтого огранич енияссылоч ной целостности.

108. Соз д айте та блицу STUDENT_2 а налогич ную таблице STUDENT, в которой п олеUNIV_ID (ид ентификатор унив ерситета) яв ляетсяв нешним

ключ ом, ссыла ющ имся на

таблицу UNIVERSITY_1,

и та ким образ ом,

ч тобы п р и уд а лении из таблицы UNIVERSITY_1 строки с информацией о

каком-либо унив ерситете

в

соотв етств ующ их

з ап исях

таблицы

STUDENT_2 п олеUNIV_ID оч ищ а лось(з а мещ а лосьна NULL).

 

109. С

п омощ ью команд ы

CREATE TABLE

соз д айте з ап росы д ля

формир ов ания таблиц уч ебной баз ы д а нных,

п р ед ста в ленной в

раз д еле

1.7,

с указ анием п ерв ич ных

ключ ей, но без указ ания огра нич ений

в нешних ключ ей. Затем с п омощ ью кома нд ы ALTER TABLE укажитед ля

сформиров анных таблиц в се огр анич ения, в

том ч исле и огранич ения

ссылоч ной целостности.

 

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]