Andmebaasid III praktikum Tabelite muutmine, seostamine ja kustutamine
Andmebaasid
III praktikum Tabelite muutmine, seostamine ja
kustutamine
TABELI DEFINITSIOONI MUUTMINE
Tabeli muutmise 4 tegevust
Nimemuutused: Tabeli nime muutmine Veeru nime muutmine Kitsenduse nime muutmine Struktuurimuutused: Veergude/kitsenduste lisamine Veergude/kitsenduste muutmine Veergude/kitsenduste kustutamine
LjVeergude puhul: - saab anda algväärtust (default value);- lisada veerule kitsendust ja kustutada.
LjStruktuuri muutmine algab sõnadest ALTER TABLE ...
LjSaab muuta ainult CHECK tüüpi kitsendusi.
Nimemuutused
Miks seda vaja on?! Selguse huvides või veerus olevate andmete tõlgenduse muutumisel. Tabeli nime muutmine: ALTER TABLE RENAME ; Veeru nime muutmine: ALTER TABLE RENAME TO ; (Sarnaselt veerunimega toimitakse ka kitsenduse nimega)
Nimemuutuse näidis
Veeru nime muutmine: ALTER TABLE turniir RENAME nimetus TO nimi;
Veeru või kitsenduse lisamine
Näiteks: ALTER TABLE klubi ADD asukoht varchar(50) NOT NULL DEFAULT 'Tartu'; Def: ALTER TABLE ADD {definitsioon}; Kontrolli jaoks: SELECT * FROM klubi
Nimelise kitsenduse lisamine
ALTER TABLE isik ADD CONSTRAINT un_nimi UNIQUE (eesnimi, perenimi);
Veeru või kitsenduse kustutamine
Näiteks: ALTER TABLE isik DROP CONSTRAINT un_nimi; ALTER TABLE isik DROP UNIQUE (eesnimi, perenimi); Def: ALTER TABLE DROP { | CONSTRAINT | {kitsenduse def}};
Kitsenduse muutmine Ainult CHECK on muudetav
ALTER TABLE ALTER CHECK ({uus reegel}); Siin eraldi näidet ei tee lisame hoopis veel ühe kitsenduse ALTER TABLE partii ADD CONSTRAINT vastavus CHECK (valge_tulemus + musta_tulemus = 2); Mis kitsendusega on tegemist?
Veeru muutmine
ALTER TABLE ALTER {uuendus}; uuendus: SET DEFAULT {vaikeväärtus} {ADD | DROP} CONSTRAINT {def}; On võimalik anda algväärtus. On võimalik lisada või kustutada kitsendus. Uus veerudefinitsioon ei ole standardiga lubatud!
Veerudefinitsiooni muutmine (standardi järgi)
SQL standard – (pikk tee (4 sammu)): ALTER TABLE klubi ADD asukoht70 varchar(70) NOT NULL DEFAULT 'Tartu'; UPDATE klubi SET asukoht70 = asukoht; ALTER TABLE klubi DROP asukoht; ALTER TABLE klubi RENAME asukoht70 TO asukoht;
Välisvõti (Foreign key)
• Välisvõti on seos kahe tabeli vahel. • Võtmeveeru lubatud väärtused on defineeritud teises tabelis. (Välisvõti on kitsendus). – Tavamõtlemine: teise tabeli primaarvõti
Tegelikult lubatud suvaline võti (nn unikaalsuskitsendus).
• Seosel on nimi. • Seos on veeru (või veergude komplekti) “küljes”.
Loogilised seosed (olemasolevates tabelites)
Isik (klubi) -> Klubi (id; nimi) Partii (valge) -> Isik (id; eesnimi, perenimi) Partii (must) -> Isik (id; eesnimi, perenimi) Partii (turniir) -> Turniir (id; nimi) Alamtabel -> Ülemtabel
Ülemtabeli muutused
Mida saab ülemtabeliga teha: Kustutada kirje (DELETE) Muuta unikaalsust (võtme väärtust) (UPDATE)
FK-ga defineeritud käitumine
Kuidas peab ABS käituma, kui tehakse midagi ülemtabeli kirjega, mis võib mõjutada alamtabelit? Keela tegevus (RESTRICT) - vaikimisi tegevus Proovi kaasa minna (CASCADE) Tühista seos (SET NULL) Loo seos teatud teise kirjega (SET DEFAULT)
FK näidis
Välisvõti isiku ja klubi tabeli vahel, mis seob väljad isik.klubi ja klubi.id: ALTER TABLE isik ADD CONSTRAINT fk_isik_2_klubi FOREIGN KEY (klubi) REFERENCES klubi (id) ON DELETE RESTRICT ON UPDATE CASCADE; Kehtestab kontrolli: veerus isik.klubi tohivad olla vaid veeru klubi.id väärtused.
FK loomise süntaks
ALTER TABLE ADD CONSTRAINT FOREIGN KEY ({veerud}) REFERENCES[({võtmeveerud})] [ON DELETE {tegevus}] [ON UPDATE {tegevus}];
Optimiseerimisnõks
• Töötamisel suurte mahtudega: – Luua struktuurid ilma võtmeteta ja
seosteta – Importida sisse andmed – Luua võtmed ja seosed (ning indeksid)
• Eelduseks on kvaliteetsed andmed!!!
Ülesanne (neile, kes praktikumis ei teinud) Lisada andmed kahest TAB-eraldatud tekstifailist (klubi.txt, isik.txt) – (NB! pakitud zip-faili). Panna tabeli “turniir” veeru “nimetus” nimeks “nimi” Kustutada tabelist “isik” maha nimetu unikaalsuskitsendus, mis tagas, et korduvaid nimesid poleks (kui taipasite nime omistada, siis ikkagi võtta maha). Lisada sama sisuga kitsendus, kuid nimeks saagu “un_nimi” Samasugune operatsioon tabeliga “turniir” (nime unikaalsuskitsenduse nimeks saagu “un_nimi”) Lisada tabelisse “klubi” asukoha jaoks kohustusliku täitega veerg, mille vaikeväärtus (sh kõigil olemasolevatel) oleks “Tartu”, pikkusega 50. Muuta standardijärgsete käskudega sama veeru pikkuseks 70.
Ülesanne 3 Luua 4 välisvõtit (kustutamiskeeluga, va. ühel erandjuhul) Isik -> klubi Partii -> Turniir – nii, et turniiri kustutamisel kaoksid kõik selle turniiri partiid Partii -> Isik (Valgetega mängija) Partii -> Isik (Mustadega mängija) Teha läbi näited: Klubi kustutamine (ei õnnestu, kuna sellele viitab isikuid) Klubi id muutmine (õnnestub, isikute klubi id muutub samuti) Pärast välisvõtmete lisamist vaadata ER diagrammi Sybase Centralist.
Kokkuvõtvalt: Andmete sisestus muutmine ja kustutamine
INSERT • Kaks võimalust: Kas kirje kaupa või päringu põhjal
(vaatleme esimest) • Vaikeväärtuste toimimine INSERT INTO ({veerud}) VALUES ({väärtused}) Väärtused:
– Literalid (numbrid, kümnenderaldajaks punkt) – Stringid – ülakomade vahel – Kuupäevad – ülakomade vahel: 'yyyy-mm-dd' – Muutujad (current date jms)
INPUT
INPUT INTO FROM FORMAT {ASCII | DBASEIII | FOXPRO | ....} [{veerud}] [DELIMITED BY ];
Formaadil ASCII on vaikimisi eraldaja koma (,) Eraldajaks võib olla suvaline string. Tab- eraldatud faili kasutamiseks kood 9
Muutmine (UPDATE) • UPDATE SET = WHERE
; – (=NULL ei ole lubatud) – Tingimus – vaatame esialgu lihtsamat varianti: võtmevälja
tingimus
KUSTUTAMINE
DELETE FROM WHERE ; NB! Mis juhtub, kui tingimus ÄRA UNUSTADA?
Ülesanne 3 (järg) • Lisada veel andmeid kahest TAB-eraldatud
tekstifailist (turniir.txt, partii.txt) – (NB! pakitud zipfaili). • NB! Vaadake üle andmete struktuur ja tabeli struktuur
ja valige vastavalt failis olevatele andmetele andmeväljad tabelis!!!