{"id":550,"date":"2023-05-14T14:53:12","date_gmt":"2023-05-14T14:53:12","guid":{"rendered":"https:\/\/tarkvara.thkit.ee\/veeb\/?page_id=550"},"modified":"2023-05-17T10:22:11","modified_gmt":"2023-05-17T10:22:11","slug":"tabelite-vahelised-seosed-lk-39","status":"publish","type":"page","link":"https:\/\/tarkvara.thkit.ee\/veeb\/tabelite-vahelised-seosed-lk-39\/","title":{"rendered":"Tabelite vahelised seosed"},"content":{"rendered":"\n<p>\u00dches andmebaasitabelis hoitakse \u00fcldjuhul ainult \u00fchte liiki andmeid, mille kohta annab soovitavalt selge seletuse ka tabeli pealkiri. Kui on tunda, et lisanduvad andmed ei taha enam selle pealkirja v\u00f5i olemasolevate v\u00e4ljade peale \u00e4ra mahtuda, siis enamasti on targem uus tabel teha. Tabelite rohkust ei pea pelgama. Pigem on kasulik teha mitu tabelit, kui \u00fchte tabelisse suruda kokku mitmesuguseid v\u00e4\u00e4rtusi, mis sinna ei taha passida.<\/p>\n\n\n\n<p>Samuti on m\u00f5istlik tabeleid lisada, kui paistab, et samu andmeid tuleks muidu lisada korduvalt. \u00dchelt poolt tekitab samade andmete korduv sisestamine ohu, et kusagil tehakse sisestamisel viga ning selle tulemusena n\u00e4idatakse tulevikus kord \u00f5igeid, kord valesid andmeid. Teiseks \u00fchekordse sisestuse eeliseks on, et andmete muutumisel piisab muutusest vaid \u00fches kohas.<\/p>\n\n\n\n<p>Enamasti on andmebaasides tabelid omavahel \u00fchendatud. Siin n\u00e4ites koostame lemmikloomade tabeli, kus iga looma juures v\u00f5ib lisaks nimele olla pikkus, mass, s\u00fcnniaeg. Samas igal lemmikloomal on peremees, kel on enesel nimi, isikukood ja muud inimesele omased tunnused. Kui p\u00fc\u00fctaks k\u00f5ik andmed \u00fchte tabelisse kokku toppida, siis tuleks iga uue lemmiklooma puhul kirjutada uuesti ka tema peremehe andmed \u2013 muidu j\u00e4\u00e4ksid vastavad lahtrid lihtsalt t\u00fchjaks ja poleks kindel, kelle juurde loom kuulub. Et aga lemmiklooma peremeheks sobivad inimesed on eraldi tabelis juba kirjas, piisab, kui lisada iga looma juurde tema peremehe id-number ning ongi \u00fcheselt looma peremees m\u00e4\u00e4ratud.<\/p>\n\n\n\n<p>J\u00e4rgnevalt siis lemmikloomade tabeli loomisk\u00e4sk. Igale tabelile iseloomulikult id-tulp isesuureneva primaarv\u00f5tmena, et oleks kindel j\u00e4rjekorranumber, mille kaudu loomale viidata. Looma nimi \u2013 tekst pikkusega kuni 50 s\u00fcmbolit. Arv peremehe id-numbri meelespidamiseks. Ning l\u00f5puks teade baasile<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n  FOREIGN KEY (peremehe_id) REFERENCES Laps(LapsID)\n<\/pre><\/div>\n\n\n<p>ehk siis v\u00f5\u00f5rv\u00f5ti (v\u00e4\u00e4rtus lemmikloomade v\u00e4ljast peremehe_id) n\u00e4itab tabeli Laps tulbale LapsID.<\/p>\n\n\n\n<p>Selle lause j\u00e4rgi oskab SQL Server kontrollida, et tabelisse lubatakse lisada vaid lemmikloomi, kelle peremehe_id n\u00e4itab tabelis olemasolevale lapsele.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nCREATE TABLE lemmikloomad(\n  id INT identity PRIMARY KEY,\n  loomanimi VARCHAR(50),\n  peremehe_id INT,\n  FOREIGN KEY (peremehe_id) REFERENCES dbo.Laps_tbl(LapsID)\n)\n<\/pre><\/div>\n\n\n<p>Andmete lisamine INSERT lause abil nagu igal pool mujalgi. id-tulba v\u00e4\u00e4rtuse m\u00e4\u00e4rab programm ise, loomanimi ja peremehe identifikaator antakse ette lausega. Kui vastava j\u00e4rjekorranumbriga peremees on tabelis olemas, siis \u00f5nnestub k\u00f5ik ilusti.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nINSERT INTO lemmikloomad (loomanimi, peremehe_id) \nVALUES (&#039;Miisu&#039;, 5);\nINSERT INTO lemmikloomad (loomanimi, peremehe_id) \nVALUES (&#039;Pauka&#039;, 7);\n<\/pre><\/div>\n\n\n<p>Madis ehk tegelane number kuus sai aga eespool tabelist kustutatud. Kui n\u00fc\u00fcd p\u00fc\u00fctakse Muri kirja panna Madise koerana, siis annab arvuti vastu veateate.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nINSERT INTO lemmikloomad (loomanimi, peremehe_id) \nVALUES (&#039;Muri&#039;, 6);\nMsg 547, Level 16, State 0, Line 1\nThe INSERT statement conflicted with the FOREIGN KEY constraint &quot;FK__lemmikloo__perem__117F9D94&quot;. The conflict occurred in database &quot;baas1&quot;, table &quot;dbo.lapsed&quot;, column &#039;id&#039;.\nThe statement has been terminated.\n<\/pre><\/div>\n\n\n<p>\u00d6eldakse, et sisestatud v\u00f5\u00f5rv\u00f5ti ei sobi tabeli lapsed veeru id v\u00e4\u00e4rtusega. Ning Muri j\u00e4\u00e4b sisestamata. Selle \u00fcle v\u00f5ib veenduda ka lemmikloomade tabelist andmeid k\u00fcsides:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT * FROM lemmikloomad\n<\/pre><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"293\" height=\"269\" src=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/05\/image-15.png\" alt=\"\" class=\"wp-image-589\"\/><\/figure>\n\n\n\n<p>Ehk siis said kirja Miisu ja Pauka, aga mitte Muri. Sest Muri puhul polnud v\u00f5imalik \u00fcles m\u00e4rkida tabelis kirjas olevat peremeest.<\/p>\n\n\n\n<p>Seoseid on v\u00f5imalik luua ka juba valmis tabelite vahele. Selleks tuleb tabelit muuta ALTER TABLE k\u00e4suga. N\u00e4iteks kui soovime luua seose tabelite Laps_tbl ja Linn_tbl vahele v\u00f5iksime kasutada j\u00e4rgmist konstruktsiooni:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nALTER TABLE dbo.Laps_tbl \nADD CONSTRAINT FK_Laps_Linn \n\tFOREIGN KEY ( SynniLinn ) \n\tREFERENCES dbo.Linn_tbl (LinnID) \n\tON UPDATE NO ACTION \n\tON DELETE NO ACTION \n<\/pre><\/div>\n\n\n<p>Nagu n\u00e4ha saab v\u00e4lisv\u00f5tmele lisada juurde ka k\u00e4itumisreeglid juhuks kui peatabelis v\u00f5ti muutub v\u00f5i kustub. Valikuid tegevusteks on neli:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>NO ACTION \u2013 ei tehta midagi st kui Laps tabelis on m\u00f5nel lapsel linn, mida \u00fcritatakse kustutada siis kustutamine katkestatakse ning antakse veateade<\/li>\n\n\n\n<li>CASCADE \u2013 antakse edasi e. kui kustutad\/muuta linna kustuvad\/muutuvad automaatselt (ILMA HOIATUSTETA) ka k\u00f5ik selle linna lapsed<\/li>\n\n\n\n<li>SET NULL \u2013 kui kustub\/muutub linn pannakse k\u00f5igi selle linna laste s\u00fcnnilinnaks NULL e. m\u00e4\u00e4ramata. See eeldab, et NULL v\u00e4\u00e4rtused on lubatud-<\/li>\n\n\n\n<li>SET DEFAULT \u2013 kui linn kustub\/muutub siis taastatakse lastel vaikimisi m\u00e4\u00e4ratud e DEFAULT linnad. Kui DEFAULT on m\u00e4\u00e4ramata \u00fcritatakse panna NULL v\u00e4\u00e4rtust. Kui ka see ei \u00f5nnestu siis tegevus katkestatakse.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"567\" height=\"549\" src=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/05\/image-18.png\" alt=\"\" class=\"wp-image-624\" srcset=\"https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/05\/image-18.png 567w, https:\/\/tarkvara.thkit.ee\/veeb\/wp-content\/uploads\/2023\/05\/image-18-300x290.png 300w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>\u00dches andmebaasitabelis hoitakse \u00fcldjuhul ainult \u00fchte liiki andmeid, mille kohta annab soovitavalt selge seletuse ka tabeli pealkiri. Kui on tunda, et lisanduvad andmed ei taha enam selle pealkirja v\u00f5i olemasolevate v\u00e4ljade peale \u00e4ra mahtuda, siis enamasti on targem uus tabel teha. Tabelite rohkust ei pea pelgama. Pigem on kasulik teha mitu tabelit, kui \u00fchte tabelisse &hellip; <a href=\"https:\/\/tarkvara.thkit.ee\/veeb\/tabelite-vahelised-seosed-lk-39\/\" class=\"more-link\">Loe edasi <span class=\"screen-reader-text\">Tabelite vahelised seosed<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-550","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/comments?post=550"}],"version-history":[{"count":14,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/550\/revisions"}],"predecessor-version":[{"id":625,"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/pages\/550\/revisions\/625"}],"wp:attachment":[{"href":"https:\/\/tarkvara.thkit.ee\/veeb\/wp-json\/wp\/v2\/media?parent=550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}