26
Andmebaasid III praktikum Tabelite muutmine, seostamine ja kustutamine

Andmebaasid - ut · 2016. 9. 1. · Tabeli muutmise 4 tegevust Nimemuutused: Tabeli nime muutmine Veeru nime muutmine Kitsenduse nime muutmine Struktuurimuutused: Veergude/kitsenduste

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

  • 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!!!