Аппараттық және бағдарламалық қамтамасыз етуді орнату

Деректер сипаттамасы негізгі кілт болып табылады. Реляциялық мәліметтер қоры

Суретте болжамды кәсіпорынның қызметкерлері туралы кейбір мәліметтерді қамтитын кесте (5-дәреже қатынасы) көрсетілген. Кесте жолдары кортеждерге сәйкес келеді. Әрбір жол шын мәнінде нақты әлемдегі бір объектінің сипаттамасы болып табылады (бұл жағдайда қызметкер), оның сипаттамалары бағандарда қамтылған. Реляциялық қатынастар нысандар жиынына, ал кортеждер нысандарға сәйкес келеді. Реляциялық қатынасты көрсететін кестедегі бағандар шақырылады атрибуттар.

Әрбір атрибут доменде анықталады, сондықтан доменді берілген төлсипат үшін жарамды мәндер жиыны ретінде қарауға болады. Бір доменде бірдей қатынастың бірнеше атрибуттары, тіпті әртүрлі қатынастардың атрибуттары анықталуы мүмкін.

Мәні кортеждерді бірегей түрде анықтайтын атрибут шақырылады кілт (немесе жай кілт). Кілт «Персонал нөмірі» атрибуты болып табылады, өйткені оның мәні кәсіпорынның әрбір қызметкері үшін бірегей. Егер кортеждер тек бірнеше атрибуттардың мәндерін біріктіру арқылы анықталса, онда қатынас құрама кілті бар деп аталады.

Негізгі кілт- v қатынас моделідеректер бастапқы кілт (немесе әдепкі кілт) ретінде таңдалған қатынастың ықтимал кілттерінің бірі.

Қарым-қатынаста бірнеше кілт болуы мүмкін. Әрқашан кілттердің бірі жарияланады бастапқы, оның мәндерін жаңарту мүмкін емес. Қарым-қатынастың барлық басқа кілттері шақырылады мүмкін кілттер.

Теория тұрғысынан қатынастың барлық потенциалдық (мүмкін) кілттері эквивалентті, яғни олардың бірегейлік пен минималдылық қасиеттері бірдей. Дегенмен, бастапқы кілт ретінде әдетте белгілі бір практикалық мақсаттарға, мысалы, құруға ыңғайлы болатын ықтимал кілттердің бірі таңдалады. сыртқы басқа аспектілердегі кілттерді немесе кластерленген индексті жасау үшін. Сондықтан, бастапқы кілт ретінде, әдетте, ең кіші өлшемі (физикалық жады) және/немесе атрибуттардың ең аз санын қамтитын кілт таңдалады.

Егер бастапқы кілтбір атрибуттан тұрады, ол аталады қарапайым кілт.

Егер бастапқы кілтекі немесе одан да көп атрибуттардан тұрады, ол аталады құрама кілт... Сонымен, аты, тегі, әкесінің аты, төлқұжат нөмірі, паспорт сериясы бөлек негізгі кілттер бола алмайды, өйткені екі немесе одан да көп адам бірдей болуы мүмкін. Бірақ сериясы мен нөмірі бір үлгідегі екі жеке құжат жоқ. Демек, адамдар туралы мәліметтерді қамтитын қатынаста бастапқы кілт жеке құжат түрінен, оның сериясы мен нөмірінен тұратын атрибуттардың ішкі жиыны болуы мүмкін.



Иерархиялық және желілік деректер үлгілерінен айырмашылығы, реляциялық топтық қатынас ұғымына ие емес. Әртүрлі қатынас кортеждері арасындағы байланыстарды көрсету үшін қайталанатын кілттер пайдаланылады.

Басқа қатынастардың кілттерінің көшірмелері болып табылатын атрибуттар деп аталады шетелдік кілттер.

Мысалы, БӨЛІМ мен ҚЫЗМЕТКЕР қатынасы арасындағы қатынас бастапқы кілтті көшіру арқылы жасалады «Бөлім_нөмірі» бірінші қатынастан екіншісіне дейін. Осылайша, берілген бөлім қызметкерлерінің тізімін алу үшін қажет: 1) БӨЛІМ Кестеден атрибуттың мәнін орнатыңыз. «Бөлім_нөмірі» берілген "Бөлім_атауы" сәйкес. 2) ҚЫЗМЕТКЕР кестесінен барлық жазбаларды таңдау, атрибут мәні «Бөлім_нөмірі»бұл алдыңғы қадамда алынғанға тең. Қызметкердің қай бөлімде жұмыс істейтінін білу үшін кері операцияны орындау керек: 1) Анықтаңыз «Бөлім_нөмірі»ҚЫЗМЕТКЕР кестесінен. 2) Алынған мән бойынша БӨЛІМДЕР кестесінен жазбаны табамыз.


18. Реляциялық мәліметтер қорындағы нормалау, түсінік қалыпты пішінмәліметтер қорын жобалау кезінде.

Қалыпты пішін - таңдаудың немесе деректерді өзгертудің ықтимал логикалық қате нәтижелеріне әкелуі мүмкін артықшылық тұрғысынан сипаттайтын реляциялық деректер үлгісіндегі қатынас қасиеті. Қалыпты пішін қатынас қанағаттандыруға тиісті талаптар жиынтығы ретінде анықталады.

Мәліметтер қорын қалыпты формаға түрлендіру процесі деп аталады қалыпқа келтіру ... Нормалау деректер қорының құрылымын минималды артықшылықты қамтамасыз ететін пішінге келтіруге арналған, яғни қалыпқа келтіру өнімділікті төмендетуге немесе арттыруға немесе деректер қорының өлшемін азайтуға немесе ұлғайтуға арналмаған. Қалыпқа келтірудің түпкілікті мақсаты дерекқорда сақталған ақпараттың ықтимал сәйкессіздігін азайту болып табылады.



Артықшылық, әдетте, әрбір қатынаста тек бастапқы фактілер (яғни басқа сақталған фактілерден шығарылмаған фактілер) сақталатындай қатынастарды ыдырату арқылы жойылады.

Функционалдық тәуелділіктер.

Реляциялық дерекқор құрылымдық және құрылымдық мәліметтерді қамтиды семантикалық ақпарат... Мәліметтер қорының құрылымы оның құрамындағы қатынастардың саны мен түрімен және сол қатынастардың кортеждері арасында бар «бірден көпке» қатынасымен анықталады. Семантикалық бөлік осы қатынастардың атрибуттары арасында болатын көптеген функционалдық тәуелділіктерді сипаттайды. Функционалдық тәуелділікке анықтама берейік.

19. 1NF: Негізгі анықтамалар және түрлендіру ережелері.

Бірінші қалыпты форманы талқылау үшін екі анықтама беру керек:

Қарапайым атрибут - мәндері атомдық (бөлінбейтін) атрибут.

Күрделі атрибут - бірдей немесе әртүрлі домендерде анықтауға болатын бірнеше атомдық атрибуттарды біріктіру арқылы алынады (оны вектор немесе деректер жиыны деп те атайды).

Бірінші қалыпты форманың анықтамасы:

қатынас 1NF-де болады, егер оның барлық атрибуттарының мәндері атомдық болса. ... В әйтпесебұл кесте емес және мұндай атрибуттарды бөлшектеу керек.

Мысал қарастырайық:

Кәсіпорынның HR дерекқорында сіз қатыстыруға тырысуға болатын қызметкерлер туралы ақпаратты сақтау керек

ҚЫЗМЕТКЕР (ҚЫЗМЕТКЕР_НӨМІР, АТЫ-ЖОҚ, ТУҒАН_КҮН, ЖҰМЫС_ТАРИХЫ, БАЛАЛАР).

Бұл қарым-қатынасты мұқият тексеруден, атрибуттар екендігі шығады "жұмыс_тарихы"және «балалар»күрделі, оның үстіне атрибут болып табылады "жұмыс_тарихы"басқа күрделі атрибутты қамтиды «жалақы_әңгіме».
Бұл агрегаттар келесідей көрінеді:

 WORK_HISTORY (RECEPTION_DATE, NAME, PAYMENT_HISTORY),

 ТӨЛЕМ ТАРИХЫ_ (ТААЙЫНДАУ, ТӨЛЕУ_ КҮНІ),

 БАЛАЛАР (BABY_NAME, BIRTH_YEAR).

Олардың байланысы суретте көрсетілген. 3.3.

3.3-сурет. Бастапқы көзқарас.

ҚЫЗМЕТКЕР бастапқы қатынасын бірінші қалыпты пішінге келтіру үшін оны келесі суретте көрсетілгендей төрт қатынасқа бөлу керек:

3.4-сурет. Қарым-қатынастардың нормаланған жиынтығы.

Мұнда әрбір қатынастың бастапқы кілті көк түспен ерекшеленеді, сыртқы кілттердің аттары теріледі көк түсті... Еске салайық, бұл бастапқы қатынаста бар функционалдық тәуелділіктерді көрсету үшін пайдаланылатын сыртқы кілттер. Бұл функционалдық тәуелділіктер көрсеткі сызықтармен көрсетілген.

Нормалау алгоритмін Э.Ф.Кодд былай сипаттаған:

  • Ағаштың жоғарғы жағындағы қатынастан бастап (3.3-сурет) оның бастапқы кілті алынады және әрбір тікелей бағынышты қатынас сол бастапқы кілт үшін домен немесе домендердің тіркесімін кірістіру арқылы кеңейтіледі.
  • Осы жолмен кеңейтілген әрбір қатынастың Бастапқы кілті кеңейтуге дейін қарым-қатынаста болған Бастапқы кілттен және тектік қатынастың қосылған Негізгі кілтінен тұрады.
  • Осыдан кейін барлық қарапайым емес домендер тектік қатынастан жойылады, ағаштың жоғарғы түйіні жойылады және қалған ішкі ағаштардың әрқайсысы үшін бірдей процедура қайталанады.

20. 2NF: Негізгі анықтамаларжәне түрлендіру ережелері.

Көбінесе қатынастың негізгі кілті бірнеше атрибуттарды қамтиды (бұл жағдайда ол деп аталады құрама) - мысалы, суретте көрсетілген БАЛАЛАР қатынасын қараңыз. 3.4 19-сұрақ. Бұл ұғымды енгізеді толық функционалдық тәуелділік.

Анықтамасы:

Кілттік емес атрибут функционалды түрде тұтас кілтке тәуелді болса, бірақ оның атрибуттарының ешқайсысына функционалдық жағынан тәуелді болмаса, құрамдас кілтке функционалды түрде толық тәуелді болады.

Мысалы:

ЖЕТКІЗУ қатынасы болсын (N_ ЖЕТКІЗУШІ, ӨНІМ, БАҒА).
Жабдықтаушы әртүрлі тауарларды жеткізе алады, ал бір тауарды әртүрлі жеткізушілер жеткізе алады. Сонда қарым-қатынастың кілті «Жеткізуші N + өнім»... Барлық жеткізушілер тауарларды бірдей бағамен жеткізсін. Сонда бізде келесі функционалды тәуелділіктер бар:

  • Жабдықтаушы N, тармақ -> бағасы
  • өнім -> бағасы

«Баға» атрибутының кілтке толық емес функционалдық тәуелділігі келесі аномалияға әкеледі: заттың бағасы өзгерген кезде оның жеткізушілері туралы барлық жазбаларды өзгерту үшін қатынастың толық көрінісі қажет. Бұл аномалия екі семантикалық фактілердің бір деректер құрылымында біріктірілуінің салдары болып табылады. Келесі кеңейту 2NF-дегі қатынасты береді:

  • ЖЕТКІЗУ (ЖЕТКІЗУШІ N, ТАУАР)
  • ТАУАР БАҒАСЫ (ТАУАР, БАҒА)

Осылайша, беруге болады

Екінші қалыпты форманың анықтамасы: Қатынас 2NF-де болады, егер ол 1NF-де болса және әрбір кілт емес төлсипат функционалды түрде кілтке толығымен тәуелді болса.

21. 3NF: Негізгі анықтамаларжәне түрлендіру ережелері.

Үшінші қалыпты форманы талқыламас бұрын тұжырымдаманы енгізу қажет: транзитивтік функционалдық тәуелділік.

Анықтамасы:

X, Y, Z қандай да бір қатынастың үш атрибуты болсын. Бұл жағдайда X -> Y және Y -> Z, бірақ кері сәйкестік жоқ, яғни. Z - / -> Y және Y - / -> X. Сонда Z X-ке транзитивтік тәуелді.
САҚТАУ қатынасы болсын ( FIRM, WAREHOUSE, VOLUME), онда қоймалардан тауарларды қабылдайтын фирмалар және осы қоймалардың көлемдері туралы мәліметтер бар. Негізгі атрибут болып табылады «қатты»... Егер әрбір фирма тауарды тек бір қоймадан ала алатын болса, онда осыған байланысты келесі функционалдық тәуелділіктер болады:

  • берік -> қойма
  • қойма -> көлемі

Бұл жағдайда аномалиялар пайда болады:

  • ішінде болса осы сәтешбір компания қоймадан тауарды қабылдамайды, содан кейін оның көлемі туралы деректерді дерекқорға енгізу мүмкін емес (негізгі атрибут анықталмағандықтан)
  • егер қойма көлемі өзгерсе, сіз бүкіл қатынасты көрсетуіңіз керек және осы қоймамен байланысты барлық компаниялардың карталарын өзгертуіңіз керек.

Бұл ауытқуларды жою үшін бастапқы қатынасты екіге бөлу керек:

  • САҚТАУ ( FIRM, ҚОЙМА)
  • STOCK_VOLUME ( ҚОЙМА, VOLUME)

Үшінші қалыпты форманың анықтамасы:

Қарым-қатынас 3NF-де болады, егер ол 2NF-де болса және әрбір негізгі емес төлсипат бастапқы кілтке өтпелі түрде тәуелді болмаса.

Осы кітаптың басында біз әдеттегі кестелердегі кейбір өрістер арасында бар белгілі бір қатынастарды атап өттік. Тұтынушылар кестесінің snum өрісі, мысалы, Сатушы кестесіндегі және Тапсырыс кестесіндегі snum өрісіне сәйкес келеді. Тұтынушылар кестесінің cnum өрісі Тапсырыстар кестесінің cnum өрісіне де сәйкес келеді. Біз сілтеменің бұл түрін сілтеме тұтастығы деп атадық; және талқылау барысында сіз оны қалай қолдануға болатынын көрдіңіз.

Бұл тарауда сіз анықтамалық тұтастықты толығырақ зерттейсіз және оны сақтау үшін пайдалануға болатын шектеулер туралы барлығын табасыз. Сондай-ақ, DML өзгерту пәрмендерін пайдаланған кезде оның бұл шектеуді қалай орындайтынын көресіз. Анықтамалық тұтастық өрістерді немесе өрістер топтарын байланыстыруды қамтитындықтан, көбінесе әртүрлі кестелерде, бұл әрекет басқа шектеулерге қарағанда сәл күрделірек болуы мүмкін. Осы себепті, кестелер жасауды жоспарламасаңыз да, оны мұқият түсінгеніңіз жақсы. Өзгерту пәрмендері анықтамалық тұтастық шектеуін (басқа шектеулер сияқты, бірақ анықтамалық тұтастық шектеуі анықталған кестелерден басқа кестелерге әсер етуі мүмкін) және біріктірулер сияқты белгілі бір сұрау функцияларын пайдалану арқылы тиімдірек етуге болады. анықтамалық тұтастық сілтемелері тұрғысынан (8-тарауда атап көрсетілгендей).

СЫРТҚЫ КҮЙСЕ ЖӘНЕ АТА-АНА КІЛТІ

Кестенің бір өрісіндегі барлық мәндер басқа кестедегі өрісте көрсетілгенде, бірінші өріс екіншісіне жатады деп айтамыз. Бұл екі өрістің мәндері арасындағы тікелей байланысты көрсетеді. Мысалы, Тұтынушылар кестесіндегі тұтынушылардың әрқайсысында Сатушылар кестесінде тағайындалған сатушыны көрсететін snum өрісі бар. Тапсырыстар кестесіндегі әрбір тапсырыс үшін бір ғана осы сатушы және бір ғана осы тұтынушы бар. Бұл Тапсырыс кестесіндегі snum және cnum өрістері арқылы көрсетіледі.

Кестедегі бір өріс екіншісіне сілтеме жасағанда, ол сыртқы кілт деп аталады; ал ол сілтеме жасайтын өріс ата-аналық кілт деп аталады. Сонымен, Тұтынушылар кестесінің snum өрісі сыртқы кілт болып табылады, ал Сатушы кестесінде ол сілтеме жасайтын snum өрісі негізгі кілт болып табылады.

Сол сияқты, Тапсырыстар кестесінің cnum және snum өрістері «Тұтынушылар» және «Жеткізушілер» кестелеріндегі атаулары бар өздерінің негізгі кілттеріне сілтеме жасайтын сыртқы кілттер болып табылады. Шетелдік кілт пен ата-аналық кілт атаулары бірдей болуы шарт емес, бұл біріктіруді анық ету үшін біз ұстанатын шарт.

КӨП БАҒАНДЫ СЫРТҚЫ ТҮЙМЕЛЕР

Шындығында, шетелдік кілт тек бір жыныстан тұруы керек емес. Бастапқы кілт сияқты, сыртқы кілтте өрістердің кез келген саны болуы мүмкін, олардың барлығы бір бірлік ретінде қарастырылады. Шетелдік кілт пен ол сілтеме жасайтын ата-аналық кілттің, әрине, бірдей саны мен түрі, жынысы болуы керек және бірдей тәртіпте болуы керек. Бір жыныстан тұратын шетелдік кілттер - біз тек үлгі кестелерімізде қолданатындар, ең көп таралғандары. Талқылауды қарапайым ету үшін біз көбінесе сыртқы кілтті бір баған деп атаймыз. Бұл кездейсоқ емес. Егер бұл белгіленбесе, кез келген адам сыртқы кілт болып табылатын өріс туралы оның сыртқы кілт болып табылатын өрістер тобына да қолданылатынын айтады.

СЫРТҚЫ ЖӘНЕ АТА-АНАЛАРДЫҢ МӘНІ

Өріс сыртқы кілт болса, ол қандай да бір түрде сілтеме жасайтын кестемен байланыстырылады. Сіз, шын мәнінде, «осы өрістегі әрбір мән (сыртқы кілт) басқа өрістегі (ата-аналық кілт) мәнмен тікелей байланысты» дейсіз. Шетелдік кілттің әрбір мәні (әрбір жол) бір мәнді түрде ата-аналық кілттің осы мәніне (жолына) сілтеме жасауы керек. Егер солай болса, онда сіздің жүйеңіз, олар айтқандай, анықтамалық тұтастық күйінде болады. Мұны мысал арқылы көруге болады. Тұтынушылар кестесіндегі snum сыртқы кілті Хоффман және Клеменс жолдары үшін 1001 болып табылады. Сатушы кестесінде snum = 1001 болатын екі жол бар делік. Хоффман мен Клеменс тұтынушылары екі сатушының қайсысына тағайындалғанын қалай білеміз? Сол сияқты, егер Жеткізушілер кестесінде мұндай жолдар болмаса, біз Хоффман мен Клеменсті жоқ жеткізушіге тағайындаймыз!

Шетелдік кілттегі әрбір мән ата-аналық кілтте бір рет және тек бір рет көрсетілуі керек екендігі түсініледі.

Шын мәнінде, берілген сыртқы кілт мәні қарама-қарсы мүмкіндікті білдірмей тек бір негізгі кілт мәніне сілтеме жасай алады: яғни. шетелдік кілттердің кез келген саны жалғыз басты кілт мәніне сілтеме жасай алады. Мұны біздің үлгі кестелерден көруге болады. Хоффман да, Клеменс те Пилге тағайындалған, сондықтан олардың екі сыртқы кілт мәндері бірдей ата-аналық кілт болып табылады, бұл өте жақсы. Шетелдік кілт мәні тек бір негізгі кілт мәніне сілтеме жасауы керек, бірақ негізгі кілт мәніне кез келген сыртқы кілт мәндерінің санын пайдаланып сілтеме жасауға болады. Көрсеткіш ретінде Сату қызметкерлері кестесіндегі олардың негізгі кілтіне сәйкес келетін Тұтынушылар кестесіндегі сыртқы кілт мәндері 19.1-суретте көрсетілген. Ыңғайлы болу үшін біз осы мысалға қатысы жоқ жынысты алып тастадық.

ШЕТЕЛДІК НЕГІЗГІ ШЕКТЕУ

SQL FOREIGN KEY шектеуімен сілтеме тұтастығын сақтайды. FOREIGN KEY шектеуі SQL тіліндегі жаңа мүмкіндік болғанымен, ол әлі жалпылықты қамтамасыз етпейді. Сонымен қатар, оның кейбір іске асырулары басқаларға қарағанда күрделірек. Бұл функция сыртқы кілт пен ата-аналық кілтті анықтамалық тұтастық принципіне сәйкес келтіруге мәжбүрлеу үшін дерекқорыңызға енгізуге болатын мәндерді шектеуі керек. Шетелдік кілт шектеуінің әрекеттерінің бірі әлі тектік кілтте көрсетілмеген сыртқы кілт ретінде шектелген өрістер үшін мәндерді алып тастау болып табылады. Бұл шектеу сіздің негізгі кілт мәндерін өзгерту немесе жою қабілетіңізге де әсер етеді (бұл туралы осы тарауда кейінірек талқылаймыз).

ЕРІСТЕР ҚАЛАЙ СЫРТҚЫ КІЛТТЕР РЕТІНДЕ КӨРСЕТІЛУГЕ БОЛАДЫ

Сіз сыртқы кілт ретінде жариялағыңыз келетін өрісті қамтитын CREATE TABLE (немесе ALTER TABLE) пәрменінде FOREIGN KEY шектеуін пайдаланып жатырсыз. Сіз оларға FOREIGN KEY шектеуі ішінде сілтеме жасайтын ата-ана кілтін бересіз. Бұл шектеуді пәрменге қою алдыңғы тарауда қарастырылған басқа шектеулермен бірдей. 19.1-сурет: Негізгі кілті бар тұтынушы кестесінің сыртқы кілті

Көптеген шектеулер сияқты, ол бірнеше жынысты бір сыртқы кілт ретінде пайдалануға мүмкіндік беретін кесте түріндегі кесте немесе баған шектеуі болуы мүмкін.

СЫРТҚЫ КІЛТЕМЕ КЕСТЕН ​​ШЕКТЕУІ РЕТІНДЕ

FOREIGN KEY кестенің шектеу синтаксисі: FOREIGN KEY ӘДЕБИЕТТЕР [ ] Бағандардың бірінші тізімі - осы пәрмен арқылы жасалатын немесе өзгертілетін кестедегі бір немесе бірнеше бағандардың үтірмен бөлінген тізімі. Pktable — негізгі кілтті қамтитын кесте. Бұл жасалған немесе өзгертілген кесте болуы мүмкін қазіргі команда... Бағандардың екінші тізімі - негізгі кілтті құрайтын бағандар тізімі. Екі бағанның тізімдері үйлесімді болуы керек, яғни:

* Олардың бағандарының саны бірдей болуы керек.

* Берілген реттілікте сыртқы кілт бағандары тізімінің бірінші, екінші, үшінші және т.б. бағандары негізгі кілт бағандар тізімінің бірінші, екінші, үшінші және т.б. бағандары сияқты деректер түрлері мен өлшемдеріне ие болуы керек. .. Екі бағанның тізімдеріндегі бағандардың аты бірдей болмауы керек, дегенмен біз мысалдарымызда бұл әдісті қарым-қатынасты анық ету үшін пайдаландық.

Salespeople кестесіне сілтеме жасайтын сыртқы кілт ретінде анықталған snum өрісімен Тұтынушылар кестесін жасаңыз: CREATE TABLE Тұтынушылар (cnum integer NO NULL PRIMARY KEY cname char (10), city char (10), snum integer, FOREIGN KEY (snum) СІЛТЕМЕЛЕР Salespeople (snum ); FOREIGN KEY шектеуін қолдану үшін CREATE TABLE орнына ALTER TABLE пайдаланған кезде, сыртқы кілт пен ата-аналық кілтте көрсеткен мәндер сілтеме тұтастығында болуы керек немесе пәрмен қабылданбайды. ALTER TABLE болса да өте пайдалы - оның ыңғайлылығы үшін жүйеңізде мүмкіндігінше алдымен анықтамалық тұтастық сияқты құрылымдық принциптерді қалыптастыруға тура келеді.

СЫРТҚЫ КІЛТ БАҒАН ШЕКТЕУІ РЕТІНДЕ

FOREIGN KEY шектеуі бар баған шектеуінің нұсқасы - әйтпесе деп аталады - анықтамалық шектеу (РЕФЕРЕНЦИЯЛАР), өйткені ол шын мәнінде FOREIGN KEY сөздерін қамтымайды, жай ғана РЕФЕРЕНЦИЯЛАР сөзін, содан кейін келесідей тектік кілтті пайдаланады: CREATE TABLE Customers ( cnum integer NOT NULL PRIMARY KEY, cname char (10), city char (10), snum integer СІЛТЕМЕЛЕР Сатушылар (snum)); Жоғарыда Customers.snum негізгі кілті Salespeople.snum болып табылатын сыртқы кілт ретінде анықталады. Бұл осы кесте шектеуіне баламалы: FOREIGN KEY (snum) REGERENCES Salespeople (snum)

НЕГІЗГІ НЕГІЗГІ БАҒАН ТІЗІМІН АНЫҚТАМАҢЫЗ M

Кестеде немесе бағанда FOREIGN KEY шектеуін пайдалану арқылы, егер ата-аналық кілтте PRIMARY KEY шектеуі болса, негізгі кілттің бағандарының тізімін өткізіп жіберуге болады. Әрине, көптеген өрістері бар кілттер жағдайында сыртқы және негізгі кілттердегі бағандардың реті бірдей болуы керек және кез келген жағдайда екі кілт арасындағы үйлесімділік принципі әлі де қолданылады. Мысалы, егер біз Сатылымдар кестесінің snum өрісіне PRIMARY KEY шектеуін қойсақ, біз оны осы пәрмендегі Тұтынушылар кестесіндегі сыртқы кілт ретінде пайдалана аламыз (алдыңғы мысалға ұқсас): CREATE TABLE Customers (cnum integer NOT NULL) PRIMARY KEY, cname char (10) , city char (10), snum integer ӘДЕБИЕТТЕР Сатушылар); Бұл құрылғы негізгі кілттерді ата-аналық кілттер ретінде пайдалануға шақыру үшін тілге енгізілген.

СІЛТЕМЕЛЕРДІҢ БҰТАСТЫҒЫ АТА-АНАЛЫҚ КІЛТІҢ МӘНІН ҚАЛАЙ ШЕКТЕЕДІ

Анықтамалық тұтастықты сақтау сыртқы кілт және негізгі кілт ретінде жарияланған өрістерде ұсынылуы мүмкін мәндерге кейбір шектеулерді талап етеді. Әрбір сыртқы кілт мәні бір көрсетілген жолға сәйкес келетінін қамтамасыз ету үшін негізгі кілт құрылымды болуы керек. Бұл оның (кілт) бірегей болуы керек және ешқандай NULL мәндерін қамтымауы керек дегенді білдіреді. Шетелдік кілтті жариялау сияқты талап орындалса, бұл негізгі кілт үшін жеткіліксіз. SQL қос мәндер немесе екеніне сенімді болуы керек бос мәндер(NULL) негізгі кілтке енгізілмеген. Сондықтан, сіз ата-аналық кілттер ретінде пайдаланылатын барлық жыныстарда не PRIMARY KEY шектеуі немесе NOT NULL шектеуі сияқты UNIQUE шектеуі бар екеніне көз жеткізуіңіз керек.

БІРЕКШІ СЫРТҚЫ КІЛТЕМЕ РЕТІНДЕГІ БАСТАУЫШ

Үлгі кестелердегідей сыртқы кілттерге тек негізгі кілттерге сілтеме жасау жақсы стратегия болып табылады. Шетелдік кілттерді пайдаланған кезде, сіз оларды тек ата-аналық кілттерге ғана байланыстырасыз; сіз оларды сол негізгі кілт табылатын кестедегі белгілі бір жолға байланыстырасыз. Өздігінен ата-аналық кілт сыртқы кілтте жоқ ақпаратты бермейді. Мысалы, Тұтынушылар кестесіндегі сыртқы кілт ретінде snum өрісінің мағынасы ол сілтейтін snum өрісінің мәніне емес, Сатушылар кестесіндегі басқа ақпаратқа беретін қатынас болып табылады, мысалы: мысалы, сатушылардың аттары, олардың орналасқан жері және т.б.. Сыртқы кілт тек екі бірдей мән арасындағы қатынас емес; бұл сұрауда көрсетілген кестенің екі жолы арасындағы осы екі мәнді пайдаланатын қатынас. Бұл snum өрісін Тұтынушылар кестесіндегі қатардағы кез келген ақпаратты Сатушылар кестесіндегі анықтамалық жолмен байланыстыру үшін пайдалануға болады - мысалы, олардың бір қалада тұратынын, кімнің аты ұзағырақ екенін, сатушының осы тұтынушыдан басқа кез келген басқа тұтынушылар, тұтынушылар және т.б. Бастапқы кілттің мақсаты жолдың бірегейлігін анықтау болғандықтан, бұл сыртқы кілт үшін неғұрлым қисынды және аз түсініксіз таңдау. Ата-аналық кілт ретінде бірегей кілтті пайдаланатын кез келген сыртқы кілт үшін сол әрекет үшін сол кестенің негізгі кілтін пайдаланатын сыртқы кілт жасау керек. Жолдарды байланыстырудан басқа мақсаты жоқ сыртқы кілт тек жолдарды анықтау үшін пайдаланылатын негізгі кілтке ұқсайды және жақсы емдерекқор құрылымын анық және қарапайым етіп сақтаңыз, сондықтан аз қиындықсыз.

СЫРТҚЫ НЕГІЗГІ ШЕКТЕУЛЕР

Шетелдік кілт, атап айтқанда, тек негізгі кілтте немесе бос (NULL) көрсетілген мәндерді ғана қамтуы мүмкін. Бұл кілтке басқа мәндерді енгізу әрекеттері қабылданбайды. Сіз сыртқы кілтті NULL ЕМЕС деп жариялай аласыз, бірақ бұл міндетті емес және көп жағдайда қажет емес. Мысалы, сіз тұтынушыға оның қай сатушыға тағайындалатынын алдын ала білмей кірдіңіз делік. Бұл жағдайдан шығудың ең жақсы жолы NO NULL мәнін пайдалану болады, оны кейінірек белгілі бір мәнге өзгерту керек.

ӨЗГЕРТУ ПӘЙРАМЫН ОРЫНДАСАҢЫЗ НЕ БОЛАДЫ

Мысал кестелерімізде жасалған барлық сыртқы кілттер келесідей жарияланып, сыртқы кілт шектеулерімен орындалатынымен келісейік: CREATE TABLE Salespeople (snum integer NOT NULL PRIMARY KEY, sname char (10) NOT NULL, city char (10) , comm decimal) ; CREATE TABLE Тұтынушылар (cnum integer NOT NULL PRIMARY KEY, cname char (10) NO NULL, қалалық таңба (10), бағалау бүтін сан, snum integer, FOREIGN KEY (snum) СІЛТЕМЕЛЕР Сатушылар, UNIQUE (cnum, snum (cnum, snum C) тапсырыстары); cnum бүтін НҰЛ ЕМЕС БАСТАУЫШ КҮЙЕУ, amt ондық, odate күні NULL ЕМЕС, cnum бүтін сан NULL ЕМЕС snum бүтін NULL ЕМЕС СЫРТҚЫ КҮЙСЕ (cnum, snum) СІЛТЕМЕЛЕР ТҰТЫНУШЫЛАР (cnum, snum);

КЕСТЕ СИПАТТАМАЛАРЫ

Мұндай анықтамалардың бірнеше атрибуттары туралы айтуға болады. Сұранымдар кестесіндегі еденді cnum және snum біртұтас сыртқы кілт етуді шешкен себебіміз, тапсырыстардағы әрбір тұтынушы үшін осы тапсырысты есепке алатын сатушы Клиенттер кестесінде көрсетілгендей болатынына кепілдік. Осындай сыртқы кілтті жасау үшін, кестенің өзі үшін қажет болмаса да, Клиенттер кестесінің екі өрісіне UNIQUE кесте шектеуін орналастыру керек еді. Осы кестедегі cnum өрісінде PRIMARY KEY шектеуі бар болса, ол кез келген жағдайда бірегей болады, сондықтан cnum өрісінің басқа өріспен басқа комбинациясын алу мүмкін емес. Шетелдік кілтті осылай жасау дерекқордың тұтастығын сақтайды, тіпті егер ол сізді қателесіп іштей үзуге және нақты тұтынушыға тағайындалғаннан басқа кез келген жеткізушіге несие беруге жол бермесе де.

Мәліметтер қорының тұтастығын сақтау тұрғысынан ішкі үзілістер (немесе ерекшеліктер) әрине қажет емес. Егер сіз оларға рұқсат етсеңіз және сонымен бірге дерекқорыңыздың тұтастығын сақтағыңыз келсе, Тапсырыс кестесіндегі snum және cnum өрістерін сәйкесінше Сатушылар және Тұтынушылар кестелеріндегі сол өрістер үшін тәуелсіз сыртқы кілттер ретінде жариялауға болады. Шын мәнінде, Тапсырыс кестесіндегі snum өрістерін біз жасағандай пайдалану міндетті емес, бірақ өзгерту үшін мұны істеу пайдалы болды. Тұтынушылар кестесіндегі, Тапсырыстар кестесіндегі және Тұтынушылар кестесіндегі тұтынушылардың әрбір тапсырысын байланыстыратын cnum өрісі берілген тапсырыс үшін дұрыс snum өрісін табу үшін (кез келген ерекшеліктерге жол бермеу үшін) әрқашан ортақ болуы керек. Бұл дегеніміз, біз ақпарат бөлігін – қай тұтынушы қай жеткізушіге тағайындалғанын – екі рет жазып жатырмыз және екі нұсқаның да сәйкестігіне көз жеткізу үшін қосымша жұмыс істеу керек болады. Егер бізде жоғарыда айтылғандай шетелдік кілт шектеуі болмаса, бұл жағдай әсіресе проблемалы болады, себебі әрбір тапсырысты дұрыс сатушының әрбір тиісті сатуды есепке алғанына көз жеткізу үшін қолмен тексеру (сұраумен бірге) қажет болады. Дерекқорыңызда мұндай артық ақпараттың болуы денормальизация деп аталады, бұл идеалды реляциялық дерекқорда қажет емес, бірақ іс жүзінде оны шешуге болады. Деморализация кейбір сұраулардың жылдамырақ орындалуын тудыруы мүмкін, себебі бір кестедегі сұрау әрқашан қосылуға қарағанда әлдеқайда жылдам.

ШЕКТЕУЛЕРДІҢ ӘСЕРІ

Мұндай шектеулер DML өзгерту пәрмендерін пайдалану мүмкіндігіңіз бен қабілетсізіңізге қалай әсер етеді? Шетелдік кілттер ретінде анықталған өрістер үшін жауап өте қарапайым: INSERT немесе UPDATE пәрменімен сол өрістерге енгізген кез келген мәндер олардың ата-аналық кілттерінде бұрыннан болуы керек. Бұл өрістерге NULL мәндерін қоюға болады, бірақ оларда NOT NULL шектеуі болған кезде тектік кілттерде NULL мәндеріне рұқсат етілмейді. Кез келген шетелдік кілт жолын негізгі кілттерді мүлде пайдаланбай ЖОЮҒА болады.

Ол негізгі кілт мәндерін өзгерту мәселесін қозғайтындықтан, ANSI анықтамасы бойынша жауап одан да қарапайым, бірақ біршама шектеулі: шетелдік кілт мәнімен сілтеме жасалған кез келген негізгі кілт мәнін жою немесе өзгерту мүмкін емес. Бұл, мысалы, Тапсырыс кестесінде тапсырыстар болған кезде тұтынушыны Тұтынушылар кестесінен жою мүмкін емес дегенді білдіреді. Бұл кестелерді қалай пайдаланатыныңызға байланысты бұл қалаулы немесе қиын болуы мүмкін. Дегенмен, бұл ағымдағы тапсырыстары бар тұтынушыны жоюға және жоқ тұтынушыларға сілтеме жасайтын Тапсырыс кестесін қалдыруға мүмкіндік беретін жүйеге қарағанда жақсырақ. Бұл шектеу жүйесінің мағынасы Тапсырыс кестесін жасаушы Тұтынушылар кестесін және Жеткізушілер кестесін негізгі кілттер ретінде пайдалана отырып, осы кестелердегі әрекеттерге елеулі шектеулер қоя алады. Осы себепті сіз бақыланбайтын кестені (яғни, сіз оны жасамадыңыз және оған иелік етпейсіз) осы кестенің иесі (жасаушысы) сізге арнайы орындау құқығын бермейінше пайдалана алмайсыз. бұл (бұл 22-тарауда түсіндіріледі). Ата-аналық кілтті өзгерту үшін ANSI бөлігі болып табылмайтын, бірақ кейбіреулерінде табуға болатын басқа да ықтимал әрекеттер бар. коммерциялық бағдарламалар... Негізгі кілттің ағымдағы анықтамалық мәнін өзгерткіңіз немесе жойғыңыз келсе, негізінен үш мүмкіндік бар:

  • Ата-аналық кілтке өзгертулердің шектелгенін көрсету арқылы өзгертулерді шектеуге немесе бас тартуға болады (ANSI сәні).
  • Сіз ата-аналық кілтте өзгертулер енгізе аласыз және сол арқылы сыртқы кілтте өзгертуді автоматты түрде жасай аласыз, ол каскадты өзгерту деп аталады.
  • Ата-аналық кілтте өзгертулер енгізуге және сыртқы кілтті NULL мәніне автоматты түрде орнатуға болады (егер сыртқы кілтте NULLS рұқсат етілген болса), бұл бос сыртқы кілт өзгертуі деп аталады.

    Осы үш санаттың ішінде де барлық өзгерту пәрмендерін осылай өңдегіңіз келмеуі мүмкін. INSERT, әрине, маңызды емес. Ол ата-аналық кілттің жаңа мәндерін кестеге орналастырады, осылайша осы мәндердің ешқайсысы қазіргі уақытта шақырылмайды. Дегенмен, өзгертулерді жоюсыз каскадтауға рұқсат бергіңіз келуі мүмкін және керісінше. ЖАҢАРТУ және ЖОЮ пәрмендеріне қарамастан үш санаттың кез келгенін анықтауға мүмкіндік беретін жағдай жақсырақ болуы мүмкін. Сондықтан біз ата-аналық кілтте ЖАҢАЛЫҚТЫ ЖАҢАРТУ немесе ЖОЮ шығарсаңыз, не болатынын анықтайтын жаңарту әсерлеріне және жою әсерлеріне сілтеме жасаймыз. Біз айтқан бұл әсерлер ШЕКТЕУЛІ өзгерістер, КАСКАДЫҚ өзгерістер және NULL өзгерістер деп аталады. Жүйеңіздің нақты мүмкіндіктері жоғарыда сипатталған қолайлы жағдай үшін қатаң ANSI стандартында болуы керек — өзгерту және жою әсерлері, екеуі де автоматты түрде шектеледі. Көрнекілік ретінде біз өзгерту және жою әсерлерінің толық жиынтығымен не істеуге болатынының бірнеше мысалын көрсетеміз. Әрине, стандартты емес құралдар болып табылатын өзгерту және жою әсерлеріне стандартты күй синтаксисі жетіспейді. Мұнда біз қолданатын синтаксисті жазу оңай және осы әсерлердің функцияларын суреттейтін нұсқаулық болады.

    Эксперименттің толықтығы үшін Жеткізушілер кестесі бөлімдерді өзгерткен жағдайда Жеткізушілер кестесінің snum өрісін өзгертуге негіз бар деп есептейік. (Әдетте бастапқы кілттерді өзгерту іс жүзінде орындауды ұсынбайды. Бұл бар негізгі кілттердің негізгі кілттер сияқты әрекет етуден басқа ештеңе жасамауының тағы бір себебі: олар өзгермеуі керек.) Жеткізуші нөмірін өзгерткен кезде, сіз барлық оның тұтынушылары сақталады. Дегенмен, егер бұл сатушы өзінің фирмасынан немесе компаниясынан кетсе, оны дерекқордан жойған кезде оның тұтынушыларын жойғыңыз келмеуі мүмкін. Оның орнына тұтынушылардың басқа біреуге тағайындалғанына көз жеткізгіңіз келеді. Ол үшін каскадтық әсері бар ЖАҢАЛЫҚТЫ және Шектеулі әсері бар ЖОЮ параметрін көрсету керек. CREATE TABLE Тұтынушылар (cnum integer NOT NULL PRIMARY KEY, cname char (10) NO NULL, city char (10), рейтинг бүтін сан, snum integer СІЛТЕМЕЛЕР Сатушылар, Сатушылар КСКАДТАРЫН ЖАҢАРТУ, САТЫЛУШЫЛАРДЫҢ ЖАҢАЛЫҚТАРЫН ЖОЮ); Енді Жеткізушілер кестесінен қабықты жоюға әрекеттенсеңіз, басқа тағайындалған жеткізуші үшін Hoffman және Clemens тұтынушы snum өрістерін өзгертпейінше пәрмен жарамсыз болады. Сонымен қатар, сіз Peel's snum floor мәнін 1009 мәніне өзгерте аласыз және Хоффман мен Клеменс те автоматты түрде өзгертіледі.

    Үшінші әсер NULL өзгерістері болып табылады. Сатушылар компаниядан кеткен кезде олардың ағымдағы тапсырыстары басқа сатушыға берілмейді. Екінші жағынан, сіз шот-фактураларын жойған тұтынушылар үшін барлық тапсырыстардан автоматты түрде бас тартқыңыз келеді. Сатушының немесе тұтынушының нөмірлерін өзгерту арқылы сіз оларды жай ғана оған аудара аласыз. Төмендегі мысал осы әсерлерді пайдаланып Тапсырыс кестесін қалай жасауға болатынын көрсетеді. КЕСТЕ ЖАСАУ Тапсырыстар (onum integer NO NULL PRIMARY KEY, amt decimal, odate date NO NULL ЕМЕС cnum integer NO NULL СІЛТЕМЕЛЕР Тұтынушылар snum integer СІЛТЕМЕЛЕР Сатушылар, тұтынушылардың КАСКАДТАРЫН ЖАҢАРТУ, CASCADES OF UPDATE, CASCADESspe; Әрине, Сатушы кестесіндегі Нөлдік өзгерту әсері бар DELETE пәрменінде NO NULL шектеуі snum өрісінен жойылуы керек.

    СЫРТҚЫ КЕРТЕМЕЛЕР ӨЗДЕРДІҢ БАҒДАРЛАМАСЫ КЕСТЕЛЕРІНЕ ҚАЙТЫП КЕТЕДІ.

    Жоғарыда айтылғандай, FOREIGN KEY шектеуі бұл жеке кестені олар үшін негізгі кілт кестелері ретінде көрсете алады. Қарапайым емес, бұл мүмкіндік пайдалы болуы мүмкін. Бізде менеджер өрісі бар Қызметкерлер кестесі бар делік. Бұл өрісте қызметкерлердің әрқайсысының нөмірлері бар, олардың кейбіреулері де әкімшілер. Бірақ әрбір әкімші бір уақытта қызметкер болып қалатындықтан, ол, әрине, осы кестеде көрсетіледі. Қызметкер нөмірі (empno деп аталатын баған) бастапқы кілт ретінде жарияланған және әкімші оған сыртқы кілт ретінде сілтеме жасайтын кестені құрайық: CREATE TABLE Employees (empno integer NOT NULL PRIMARY KEY, name char (10) NO NULL). UNIOUE , manager integer ӘДЕБИЕТТЕР Қызметкерлер); (Сыртқы кілт кестенің сілтеме жасалған бастапқы кілті болғандықтан, бағандар тізімін алып тастауға болады.) Бұл кестенің мазмұны: EMPNO NAME MANAGER _____ ________ _______ 1003 Terrence 2007 2007 Atali NULL 1688 McKenna 1003 2020207 Collier көре алады, олардың әрқайсысы (бірақ Атали емес), кестедегі басқа қызметкерді өзінің әкімшісі ретінде көрсетеді. Кестедегі ең жоғары санға ие Атали NULL мәніне орнатылуы керек. Бұл сілтеме тұтастығының басқа принципін береді. Жеке кестеге қайта сілтеме жасайтын сыртқы кілт мәндерге = NULL рұқсат беруі керек. Олай болмаса, бірінші жолды қалай кірістірер едіңіз? Бұл бірінші жол өзіне сілтеме жасаса да, сыртқы кілт мәні енгізілген кезде негізгі кілт мәні бұрыннан орнатылған болуы керек. Бұл принцип тіпті егер сыртқы кілт жеке кестеге тікелей сілтеме жасамаса да, басқа кестеге сілтеме арқылы, содан кейін сыртқы кілттер кестесіне сілтеме жасаса да дұрыс болады. Мысалы, біздің Сатушылар кестесінде Тұтынушылар кестесіне сілтеме жасайтын қосымша өріс бар делік, осылайша әрбір кесте келесі бөлімде көрсетілгендей басқасына сілтеме жасайды. келесі оператор CREATE TABLE: CREATE TABLE Сатушылар (snum integer NOT NULL PRIMARY KEY, sname char (10) NOT NULL, city char (10), comm declmal, cnum integer СІЛТЕМЕЛЕР Тұтынушылар); CREATE TABLE Тұтынушылар (cnum integer NOT NULL PRIMARY KEY, cname char (10) NO NULL, қалалық таңба (10), бағалау бүтін сан, snum integer ӘДЕБИЕТТЕР Сатушылар); Бұл айқас сілтеме деп аталады. SQL мұны теорияда қолдайды, бірақ іс жүзінде бұл проблемалық болуы мүмкін. Біріншісі жасаған екеуінің кез келген кестесі екіншісі үшін әлі жоқ анықтамалық кесте болып табылады. Айқас сілтеме жасау мүддесі үшін SQL шын мәнінде бұған мүмкіндік береді, бірақ екеуі де жасалу процесінде болған кезде кестенің ешқайсысы пайдалануға жарамсыз болады. Екінші жағынан, екі кестені әртүрлі пайдаланушылар жасаған болса, мәселе одан да қиын болады. Айқас сілтеме болуы мүмкін пайдалы құралбірақ бұл екіұштылық пен қауіп-қатерсіз емес. Алдыңғы мысал, мысалы, толығымен қолдануға жарамсыз: өйткені ол сатушыны бір тұтынушымен шектейді, сонымен қатар бұған қол жеткізу үшін айқас сілтемені пайдаланудың қажеті жоқ. Айқас сілтеме тұтастық жүйесін жасамас бұрын оны пайдалануда абай болуды және бағдарламалардың өзгерту және жою әсерлерін, сондай-ақ артықшылықтар мен сұрауларды диалогтық өңдеуді қалай басқаратынын талдауды ұсынамыз. (Артықшылықтар мен интерактивті сұрауларды өңдеу тиісінше 22 ЖӘНЕ тарауларында талқыланады.)

    ТҮЙІН

    Сізде енді сілтеме тұтастығын бақылау жеткілікті. Негізгі идея - барлық шетелдік кілт мәндері көрсетілген негізгі кілт жолына сілтеме жасайды. Бұл әрбір сыртқы кілт мәні бір рет және тек бір рет негізгі кілтте көрсетілуі керек дегенді білдіреді. Мән сыртқы кілтке орналастырылған сайын, оның мәні ұсынылғанына көз жеткізу үшін негізгі кілт тексеріледі; әйтпесе, пәрмен қабылданбайды. Мәннің бір реттен көп ұсынылмауын қамтамасыз ету үшін ата-аналық кілтте БІРІНШІКІ КІЛТ немесе БІРЕКШЕ шектеу болуы керек. Қазіргі уақытта сыртқы кілтте ұсынылған негізгі кілттің мәнін өзгерту әрекеті толығымен қабылданбайды. Дегенмен жүйеңіз NULL мәніне орнатылған сыртқы кілт мәнін алуды немесе жаңа негізгі кілт мәнін алуды және ЖАҢАРТУ және ЖОЮ пәрмендері үшін қайсысын тәуелсіз шығарып алуға болатынын көрсетуді таңдауды ұсына алады. Осымен CREATE TABLE командасын талқылауды аяқтаймыз. Әрі қарай, біз сізді команданың басқа түрімен таныстырамыз - CREATE. 20-тарауда сіз кесте сияқты көрінетін және әрекет ететін, бірақ іс жүзінде сұраулардың нәтижелері болып табылатын деректер нысандарын көрсетуді үйренесіз. Шектеулердің кейбір функцияларын көріністер де орындауға болады, сондықтан келесі үш тарауды оқығаннан кейін шектеулерге деген қажеттілікті жақсырақ бағалауға болады.

    SQL-МЕН ЖҰМЫС

    1. Cityorders атты кестені құрыңыз. Онда Тапсырыстар кестесімен бірдей onum, amt және snum өрістері және Тұтынушылар кестесі сияқты бірдей cnum және қала өрістері болуы керек, сондықтан әрбір тұтынушының реті осы кестеге олардың қаласымен бірге енгізіледі. Onum өрісі Cityorders негізгі кілті болады. Cityorders-тің барлық қабаттарында Тұтынушы және Тапсырыс кестелерімен салыстырғанда шектеулер болуы керек. Бұл кестелердегі ата-аналық кілттерде тиісті шектеулер бар деп болжанады.

    2. Мәселені күрделендіріп көрейік. Тапсырыстар кестесін келесідей қайта анықтаңыз: қосу жаңа бағанәрбір тапсырыс үшін анықталатын алдыңғы деп аталады, осы ағымдағы тұтынушы үшін алдыңғы тапсырыстың онум өрісі. Мұны Тапсырыстар кестесінің өзіне сілтеме жасайтын сыртқы кілтті пайдаланып орындаңыз. Шетелдік кілт сонымен қатар тұтынушының cnum өрісіне сілтеме жасауы керек, ол ағымдағы тапсырыс пен сілтеме жасалған арасындағы кейбір белгіленген қатынасты қамтамасыз етеді.

    (Жауаптар үшін А қосымшасын қараңыз.)

  • Бұл бір немесе бірнеше компьютерлердің көмегімен қол жеткізу жүзеге асырылатын ақпараттың электрондық репозиторийлері. Әдетте деректер базасы кейбіреулер туралы ақпаратты қамтитын деректерді сақтау және оларға қол жеткізу үшін жасалады пәндік аймақ, яғни адам қызметінің белгілі бір саласы немесе нақты дүниенің бір бөлігі.

    ДҚБЖ – бұл бағдарламалық қамтамасыз етудеректер қорын құруға, толтыруға, жаңартуға және жоюға арналған.

    Мәліметтер қорында сақталатын ақпарат бірлігі кесте болып табылады. Әрбір кесте жолдар мен бағандардың жиынтығы болып табылады, мұндағы жолдар нысан данасына, белгілі бір оқиғаға немесе құбылысқа, ал бағандар объектінің, оқиғаның немесе құбылыстың атрибуттарына (мүмкіндіктеріне, сипаттамаларына, параметрлеріне) сәйкес келеді. Әрбір жол белгілі бір оқиға туралы ақпаратты қамтиды.

    Мәліметтер қоры тұрғысынан кестенің бағандары өрістер, ал оның жолдары жазбалар деп аталады.

    Деректер қорының жеке кестелері арасында байланыстар болуы мүмкін, яғни алдыңғы кестедегі ақпаратты басқасына қосуға болады. Жеке кестелерінің арасында сілтемелері бар МҚ реляциялық деп аталады. Бір және бір кесте бір дерекқор кестесіне қатысты негізгі және екіншісіне қатысты еншілес болуы мүмкін.

    Қатынастармен байланыстырылған кестелер басты-басты принцип бойынша өзара әрекеттеседі. Бір және бір кесте бір дерекқор кестесіне шебер және екіншісіне еншілес болуы мүмкін.

    Объект Қасиеттер жиынтығы бар және ерекшеленетін нәрсе. Бір нысанның екіншісінен айырмашылығы нақты сипат мәндерімен анықталады.

    мәні - адамның немесе компьютердің жадындағы объектінің бейнеленуі.

    Атрибут - субъектінің кез келген қасиеттерінің меншікті мәні.

    Өріс Төлсипат үшін арнайы мәнді сақтайтын жазбадағы жалғыз элемент.

    Коммуникациялық өріс бұл екі кестені байланыстыратын өріс.

    Негізгі және қосымша кілттер

    Әрбір дерекқор кестесінде бастапқы кілт болуы мүмкін - бұл жазбаны бірегей түрде анықтайтын өріс немесе өрістер қойындысы.

    Дерекқор кестесіндегі бастапқы кілт мәні бірегей болуы керек, яғни кестеде бірдей бастапқы кілт мәні бар екі немесе одан да көп жазба болмауы керек.

    Бастапқы кілттер кестелер арасында байланыс орнатуды жеңілдетеді. Бастапқы кілт бірегей болуы керек болғандықтан, ол үшін барлық кесте өрістерін қолдануға болмайды.

    Кестеде мәндері бірегей өрістер болмаса, бастапқы кілтті жасау үшін оған әдетте қосымша сандық өріс енгізіледі, оның мәндерін ДҚБЖ өз қалауы бойынша басқара алады.

    Қосымша кілттер деректерді іздеу немесе сұрыптау кезінде жиі қолданылатын өрістер бойынша орнатылады: қосымша кілттерге салынған индекстер жүйеге сәйкес өрістерде сақталған қажетті мәндерді тезірек табуға көмектеседі.

    Негізгі кілттерден айырмашылығы, қосымша кілттерге арналған өрістерде бірегей ақпарат болмауы мүмкін.

    Кестелер арасындағы қатынастық қатынастар

    Бірден бір. Негізгі кестедегі бір жазба еншілес кестедегі бір жазбаға сәйкес келгенде бір-бірлік қатынас пайда болады.

    Бұл қатынас «бірге көп» қатынасына қарағанда әлдеқайда жиі кездеседі; ол дерекқор кестесінің қосымша кестеден ұлғаюын қаламасаңыз пайдаланылады. Бірден-бірге қатынас бірнеше кестелердегі байланысты ақпаратты оқу үшін бірнеше оқу операцияларын орындау керек екендігіне әкеледі, бұл қажетті ақпаратты іздеуді баяулатады. Сонымен қатар, бір-бір қатынасы бар кестелерді қамтитын дерекқорларды толық нормаланған деп санауға болмайды.

    «Бірге-көпке» қатынасы сияқты, бір-біріне деген қарым-қатынас қатаң немесе қатаң емес болуы мүмкін.

    Кілттер реляциялық дерекқордың негізгі элементтері болып табылады, өйткені олар кестелер жұбының арасындағы қатынасты орнатады және кестедегі әрбір жазбаны бірегей түрде анықтайды. Кілттерде көбірек маңыздықарым-қатынас орнатуға қарағанда; олар сондай-ақ анықтамалық тұтастыққа көмектеседі және олар кесте деңгейіндегі тұтастықтың негізгі құрамдас бөлігі болып табылады. Кестелер оларда деректердің үлкен бөліктерін сақтайды, олар әдетте мыңдаған жазбаларға таралады, олардың барлығы сұрыпталмаған және ұйымдастырылмаған. Осы көптеген жазбалардан нақты деректерді алу қиын немесе кейде мүмкін емес болуы мүмкін. Бұл жерде кілттер кіреді. Мұнда біз екі өте маңызды реляциялық дерекқор схемасының кілтін және олардың арасындағы айырмашылықты қарастырамыз: Бастапқы кілт және Сыртқы кілт.

    Бастапқы кілт дегеніміз не?

    Бастапқы кілт - кестедегі әрбір жазбаны бірегей түрде анықтайтын арнайы кілт. Реляциялық дерекқорда кестенің әрбір жолында бірегей идентификатордың болуы өте маңызды және бастапқы кілт кестедегі кортежді бірегей анықтау үшін қажет нәрсе. Кортеж реляциялық дерекқордағы мән атрибуттарының жинағы болып табылады. Бастапқы кілт кестедегі барлық жазбаларды жасырын түрде анықтау үшін пайдаланылатын реляциялық дерекқор кестесіндегі бағанға немесе бағандар жиынына сілтеме жасай алады. Бастапқы кілт әрбір жазба үшін бірегей болуы керек, себебі ол бірегей идентификатор ретінде әрекет етеді және бос мәндерді қамтымауы керек. Әрбір дерекқордың бір ғана негізгі кілті болуы керек.

    Шетелдік кілт дегеніміз не?

    Сыртқы кілт басқа кестедегі басқа дерекқор жазбасының кілт өрісін бірегей түрде анықтайтын дерекқор жазбасындағы өріске немесе өрістер жиынына жатады. Қарапайым тілмен айтқанда, ол дерекқордағы екі түрлі кестедегі жазбалар арасындағы қатынасты орнатады. Бұл кестедегі негізгі кілт бағандарына нұсқайтын баған болуы мүмкін, яғни кестеде анықталған сыртқы кілт кейбір басқа кестенің бастапқы кілтіне сілтеме жасайды. Сілтемелер дерекқорларды сұрыптау үшін қажет жазбалар арасындағы қарым-қатынастарды орнату үшін реляциялық дерекқорларда маңызды болып табылады. Шетелдік кілттер реляциялық деректер қорын қалыпқа келтіруде маңызды рөл атқарады, әсіресе кестелер басқа кестелерге қатынасу қажет болғанда.

    Бастапқы кілт пен сыртқы кілт арасындағы айырмашылық

    Бастапқы кілт және сыртқы кілт негіздері

    Бастапқы кілт – реляциялық дерекқордағы арнайы кілт, ол әрбір жазба үшін бірегей идентификатор ретінде әрекет етеді, яғни ол кестедегі әрбір жолды/жазбаны бірегей түрде анықтайды және оның мәні кестедегі әрбір жол үшін бірегей болуы керек. Екінші жағынан, сыртқы кілт дегеніміз екі кестені бір-бірімен байланыстыратын бір кестедегі өріс. Ол басқа кестедегі немесе сол кестедегі жолды бірегей түрде анықтайтын бағанға немесе бағандар тобына сілтеме жасайды.

    Бастапқы кілт және сыртқы кілт қатынасы

    Бастапқы кілт реляциялық дерекқор кестесіндегі жазбаны бірегей түрде анықтайды, ал сыртқы кілт басқа кестенің негізгі кілті болып табылатын кестедегі өріске сілтеме жасайды. Бастапқы кілт бірегей болуы керек және анықталатын кестеде тек бір негізгі кілтке рұқсат етіледі, ал кестеде бірнеше сыртқы кілт рұқсат етіледі.

    Бастапқы және сыртқы кілт мәндерінің қайталануы

    Негізгі кілт - комбинация UNIQUE шектеулержәне Нөл емес, сондықтан реляциялық дерекқор кестесіндегі бастапқы кілт өрісінде қайталанатын мәндерге рұқсат етілмеуі керек. Ешбір екі жол бастапқы кілт атрибуты үшін қайталанатын мәндерді тасымалдай алмайды. Бастапқы кілттен айырмашылығы, сыртқы кілт қайталанатын мәндерді қамтуы мүмкін, ал реляциялық деректер қорындағы кестеде сыртқы кілттен көп болуы мүмкін.

    NULL бастапқы кілт және сыртқы кілт

    Екеуінің арасындағы негізгі айырмашылықтардың бірі, бастапқы кілттерден айырмашылығы, сыртқы кілттерде NULL мәндері де болуы мүмкін. Реляциялық дерекқордағы кестеде бір ғана негізгі кілт болуы мүмкін, ол бос емес.

    Бастапқы кілт және сыртқы кілт уақытша кестесі

    Бастапқы кілт шектеуін уақытша кестелерде және олардың айнымалыларында жасырын түрде анықтауға болады, ал сыртқы кілт шектеуін жергілікті немесе ғаламдық уақытша кестелерге қолдануға болмайды.

    Бастапқы және сыртқы кілтті жою

    Бастапқы кілт мәнін еншілес кестедегі сыртқы кілт деп аталатын негізгі кестеден алып тастау мүмкін емес. Негізгі кестені түсірмес бұрын, ең алдымен еншілес кестені тастау керек. Керісінше, егер мән тектік кестенің бастапқы кілтіне қатысты болса да, сыртқы кілт мәнін еншілес кестеден алып тастауға болады.

    Бастапқы кілт немесе сыртқы кілт: Салыстыру кестесі

    Негізгі пернелердің қысқаша мазмұны

    Кілттер кестелер арасында және кесте ішінде қарым-қатынастарды орнату үшін дерекқор схемасының бар болуында маңызды рөл атқарады. Кілттер қарым-қатынас орнатады және қолданылады әртүрлі түрлерітұтастық, әсіресе үстел және қарым-қатынас деңгейлеріндегі тұтастық. Біріншіден, олар кестеде бірегей жазбалар бар деп есептейді және кестелер арасында байланыс орнату үшін пайдаланатын өрістер сәйкес мәндерден тұруы керек. Бастапқы кілт және сыртқы кілт реляциялық дерекқорларда қолданылатын кілттердің ең маңызды және кең таралған екі түрі болып табылады. Бастапқы кілт кестедегі жазбаларды бірегей анықтау үшін қолданылатын арнайы кілт, ал сыртқы кілт екі кесте арасындағы қатынасты орнату үшін қолданылады. Екеуі де құрылымы бойынша бірдей, бірақ реляциялық дерекқор схемасында әртүрлі рөлдерді атқарады.

    Бұл мақалада біз кілттерге қатысты барлық нәрсені қарастыруға тырысамыз SQL:бұл не үшін, кілттерді жасау, шектеу. Жалпы: қызықсыз болады😉

    Бүгінгі күннің жоспары:

    Реляциялық мәліметтер базасы теориясында - кілттербұл дерекқор кестелеріндегі деректердің тұтастығы мен қолжетімділігін қамтамасыз ететін белгілі шектеулерді орнатуға арналған кейбір нысандар.

    Сөйлессек қарапайым сөзбен айтқандасодан кейін кілттер кіреді sqlбағанның қосымша функционалдығын көрсетуге арналған. Бұл бірегейлік пе немесе бағанның басқа кестеге сілтеме жасауы (сыртқы кілт).

    Негізгі кілт

    Дерекқорда бірегей болуы керек баған бастапқы кілтпен белгіленеді. Негізгі кілт немесе негізгі кілт негізгі кілт бағанының мәнін кестеде қайталауға болмайтынын білдіреді. Осылайша, бұл кілт баған мәнінің қайталануынан қорықпай кестедегі жазбаны бірегей түрде анықтауға мүмкіндік береді. Бір ғана мысал: сізде пайдаланушылар кестесі бар делік. Бұл кесте өрістерден тұрады: аты-жөні, туған жылы, телефоны. Пайдаланушыны қалай анықтауға болады? Аты мен телефон нөмірі сияқты параметрлерге сенуге болмайды. Өйткені, бізде тек бір фамилиямен ғана емес, атымен де бірнеше қолданушы болуы мүмкін. Уақыт өте келе телефон нөмірі өзгеруі мүмкін және телефон нөмірі бар пайдаланушы дерекқорымызда болмауы мүмкін.

    Сондықтан олар бастапқы кілтті ойлап тапты. Бірде бірегей идентификатор тағайындалды және бәрі аяқталды. В mySqlоның мысалында біз даладағы барлық мысалдарды орындаймыз AUTO_INCREMENTбұл негізгі кілт екенін көрсетпейінше орнату мүмкін емес.

    Жазбаны жасау кезінде бастапқы кілт ретінде белгіленген өріс бос болмауы мүмкін екенін айтудың қажеті жоқ деп ойлаймын.

    Сыртқы кілт ( шетелдік кілт)

    Тағы бар сыртқы кілт (шетелдік кілт). Оны анықтамалық деп те атайды. Бұл кестелерді бір-бірімен байланыстыру үшін қажет.

    Жоғарыдағы суретке қарасаңыз, сыртқы кілт аяқ киім кестесіндегі жеткізуші өрісі болып табылады. Әдетте, кестені құру кезінде бірегей бүтін мәндердің бағанасы көрсетіледі. Біз кестені жасаған кезде мұны қалай жасадық жеткізуші.

    Спикер жеткізуші_идентификаторыәрбір жазба үшін бірегей болады. Оның мәні мен бағанағы кек үшін сөйлейтін болады жеткізушікестеде аяқ киім.Мен бірден ұсынамын және сыртқы кілт қалай жасалатынын мысалмен қарастырамын.

    Шетелдік кілт жасау

    кесте аяқ киімдерін жасау (shoes_id int auto_increment негізгі кілті, тақырып мәтіні, өлшем int, баға өзгермелі, count int, varchar түрі (30), жеткізуші int, сыртқы кілт (жабдықтаушы) сілтемелері жеткізуші (жабдықтаушы_идентификатор));

    Жоғарыдағы мысалда көріп отырғаныңыздай, сыртқы кілт жасау синтаксисі өте қарапайым. Кестеге өрісті қосу керек, содан кейін бұл өрісті сыртқы кілт ретінде жариялап, оның қайда сілтеме жасайтынын көрсетіңіз. Бұл жағдайда өріс жеткізушіөрісіне сілтеме жасайды жеткізуші_идентификаторыкестеде жеткізуші.

    Құрама кілт (құрама кілт)

    Құрама кілтке келетін болсақ, кестеде бірнеше негізгі кілттер бар. Осылайша, құру құрама кілт, жазбаның бірегейлігі осы кілтке біріктірілген өрістер арқылы тексеріледі.

    Кестеге кірістіру кезінде бірден бірнеше өрістерді пайдаланып жазбаның бірегейлігін тексеру қажет болатын жағдайлар бар. Сондықтан композиттік кілт ойлап табылды. Мысалы, мен қарапайым кестені жасаймын құрама кілт синтаксисін көрсету үшін:

    Кесте тестін құру (өріс_1 int, өріс_2 мәтіні, өріс_3 bigint, негізгі кілт (өріс_1, өріс_3));

    Жоғарыдағы мысалда екі өріс құрама кілтке біріктірілген және кестеде осы бірдей өрістері бар жазбалар болмайды.

    Мұның бәрі кілттерге арналған SQL.Бұл шағын оқу құралы - мақалаға дайындық, онда біз кестелерді бір дерекқорды құрайтындай біріктіру жолын егжей-тегжейлі қарастырамыз.

    Мақала ұнады ма? Достарыңызбен бөлісіңіз!
    Бұл пайдалы болды ма?
    Иә
    Жоқ
    Пікіріңізге рахмет!
    Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
    Рақмет сізге. Сіздің хабарламаңыз жіберілді
    Мәтіннен қате таптыңыз ба?
    Оны бөлектеңіз, басыңыз Ctrl + Enterжәне біз бәрін түзетеміз!