Ohjelmistokehityksen menetelmät
  • Ohjelmistokehityksen menetelmät ja käytänteet
  • Tavoitteet
  • Työkalut
  • Toimeksiannot
    • Projektityön rajaukset ja toimeksiannot
    • Palkanlaskenta
    • Kilometrikorvaus
    • Laskutus
    • Laskun perintä
  • Ketterä ohjelmistokehitys
    • Agile esimerkki, sykli
    • Agile, Tuotteen tehtävälista
    • Agile, Käyttäjätarina ja käyttötapaus
    • Agile muu materiaali ja lähteitä
    • Agile termit (scrum)
  • Versionhallinta
    • Sanasto Git
    • Opas Gitin perusteisiin
    • Git perusteet 101
    • Git perusteet 102
    • Git perusteet 103
    • Git perusteet 104
    • Git perusteet 105
    • Git perusteet 106
    • Git perusteet 107
    • Git perusteet 108
    • Git muu materiaali ja lähteet
  • Yksikkötestaus
    • Ohjelmistotestauksen periaateet
    • NUnit lisääminen VS2019
    • NUnit perusteet 101
    • NUnit perusteet 102
    • NUnit perusteet 103
    • NUnit perusteet 104
    • NUnit perusteet 105
    • NUnit perusteet 106
    • NUnit muu materiaali ja lähteitä
    • TDD perusteet 101
    • TDD perusteet 102
    • TDD perusteet 103
    • TDD muu materiaali ja lähteitä
  • UML mallinnuskieli
    • Johdanto
  • Relaatiotietokannat
    • Johdanto
    • Sanasto
    • Mysql perusteet -videosarja
    • Pää- ja viiteavaimet
    • ER kaaviot
    • Viite-eheys ja ACID
    • SQL JOIN -lauseke
    • Normalisointi
    • SQL View
    • Tehtävä 001 Tietokannan suunnittelu
    • Indeksointi
      • Hitaat hakukyselyt
  • SQL harjoitukset ja esimerkit
    • Esimerkkitietokannan käyttöönotto
    • Mysql perusteet 101
    • Mysql perusteet 102
      • mysql-perusteet-102-vastaukset
    • Mysql perusteet 103
      • mysql-perusteet-103-vastaukset
    • Mysql perusteet 104
      • mysql-perusteet-104-vastaukset
    • Mysql perusteet 105
      • mysql-perusteet-105-vastaukset
    • Mysql perusteet 106
      • mysql-perusteet-106-vastaukset
    • SQL hakukyselyjä (VANHAT)
    • SQL harjoitukset syksy 2021
      • Vastaukset SQL harjoitukset syksy 2021
  • Miten yrittäjänä voin hyötyä ohjelmistokehityksen ostamisesta?
    • TL;DR
  • Toimeksiannot (2019/01)
    • Toimeksianto 2019/01
    • Käytänteet ja menetelmät
    • Konsoliohjelman refaktorointia
  • SCRUM harjoitustyö (2020/01)
    • Harjoitustyön sisältö
    • Harjoitustyö: Matkalasku
  • Toimeksiannot (2019/02)
    • Toimeksianto 2019/02
  • Toimeksiannot (2018/01)
    • Projekti 2018/01
    • Projekti 2018/01 Perjantaille 14.9
    • Projekti 2018/01 Käyttötapauksesta työtehtäviin
    • Projekti 2018/01 Ohjelmoinnin aloittaminen
    • Projekti 2018/01 TDD esimerkki
  • Harjoitteet (keskeneräiset)
    • Käyttäjätarinat
    • Pariohjelmointi
    • Versionhallinta
    • Testivetoinen kehitys
    • Jatkuva integraatio
    • Inkrementaalinen dokumentointi
Powered by GitBook
On this page
  1. SQL harjoitukset ja esimerkit
  2. Mysql perusteet 106

mysql-perusteet-106-vastaukset

PreviousMysql perusteet 106NextSQL hakukyselyjä (VANHAT)

Last updated 4 years ago

1. DVD -formaattien vuokraus on laskemaan päin. Myymälöihin on tarkoitus alkaa ostaa myös Blu-ray sekä 3D Blu-ray elokuvia. Kirjoita komennot mitä tarvitset luodaksesi taulun jakeluformaateille kun sen sisältö ja rakenne on alla kuvatun mukainen.

Taulun nimeksi tulee format_type ja sen sarakkeet ovat:

  • type_id, pääavain, nouseva kokonaisluku, ei voi olla tyhjä, täytyy olla uniikki.

  • name, merkkijono, sisältää jakelutyypin, esimerkiksi DVD, Blu-ray, 3D Blu-ray jne.

  • information_url, merkkijono, sisältää linkin jakeluformaatin lisätietoihin, esimerkiksi

-- Luodaan tehtävänannon mukainen taulu.
CREATE TABLE format_type(
    type_id SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    NAME VARCHAR(32),
    information_url VARCHAR(100)
)

-- Asetetaan luotuun tauluun malliksi kolme erilaista levyformaattia.
INSERT INTO format_type(type_id, name, information_url)
VALUES 
( NULL, 'DVD', 'https://fi.wikipedia.org/wiki/DVD' ),
( NULL, 'Blu-ray', 'https://fi.wikipedia.org/wiki/Blu-ray' ),
(  NULL, '3D Blu-ray', 'https://en.wikipedia.org/wiki/List_of_Blu-ray_3D_releases' );

2. Muuta taulun film -rakennetta siten, että lisäät siihen alla olevan kuvan mukaisen kentän. Kirjoita tarvittavat komennot. Selitä myös minkä tyyppinen viittaus (relaatio) tässä on kyseessä. (lue myös )

  • uusi kenttä on nimeltään type_id.

  • kentän pitää toimia viiteavaimena edellisessä vaiheessa luomaasi "format_type" tauluun.

  • oletusarvon pitää viitata DVD -jakeluformaattiin.

  • kun teet muutoksen niin kaikkien aiempien elokuvien formaatiksi voit asettaa DVD.

  • Muuta yhden elokuvan formaatiksi Blu-ray ja toisen elokuvan formaatiksi 3D Blu-ray.

-- Lisätään uusi sarake vanhaan olemassaolevaan film-tauluun
-- ja oletusarvoksi määritetään 1.
ALTER TABLE film ADD type_id SMALLINT DEFAULT 1

-- Sarakkeen luomisen jälkeen luodaan viiteavain edellisen tehtävän
-- format_type ja film -taulun välille. Käytetään siinä type_id-saraketta.
ALTER TABLE film
ADD CONSTRAINT FK_type_id
FOREIGN KEY(type_id) REFERENCES format_type(type_id)

-- Malliksi päivitetään kahdelle eri elokuvan nimikkeelle tämä eri formaatit.
-- type_id viitaa tässä format_type-taulun pääavaimeen.
UPDATE film SET type_id = 2 WHERE film_id = 1003
UPDATE film SET type_id = 3 WHERE film_id = 1

Taulun nimeksi tulee film_types ja sen sarakkeet ovat:

  • film_id, tauluun film viittaava arvo, yksi osa pääavainta.

  • type_id, tauluun format_type viittaava arvo, toinen osa pääavainta.

  • Huomaa, että edelliset sarakkeet yhdessä ovat taulun pääavain.

-- Luodaan uusi film_types taulu ja samalla sille viiteavaimet
-- film ja format_type -taulujen kanssa.
CREATE TABLE film_types ( film_id SMALLINT UNSIGNED, type_id SMALLINT, PRIMARY KEY(film_id, type_id), 
CONSTRAINT FK_film_id FOREIGN KEY (film_id) REFERENCES film(film_id) on UPDATE CASCADE, 
CONSTRAINT FK_type1_id FOREIGN KEY (type_id) REFERENCES format_type(type_id) on UPDATE CASCADE);

4. Liitostaulun myötä edellä luotua film taulun type_id -saraketta ei enää tarvita. Kirjoita komennot, jolla voit poistaa kyseisen sarakkeen ja sitä ennen päivittää uuteen film_types -tarvittavat tiedot.

-- Film-taulusta poistetaan ensin viitevain, joka on luotu edellisissä vaiheissa.
ALTER TABLE film DROP FOREIGN KEY FK_type_id;

-- Kun viiteavain on poistettu, voidaan poistaa type_id -sarake.
ALTER TABLE film DROP type_id;

-- Voidaan asettaa edellisen kohdan uudelle taululle myös oletusarvo
-- levyformaatiksi. Tämä ei ole pakollinen mutta toisaalta helpottaa 
-- asioita.
ALTER TABLE film_types  ALTER type_id SET DEFAULT 1;

-- Lisätään kaksi eri elokuvaa uuteen tauluun. Näille tulee oletuksena
-- DVD formaatti type_id -sarakkeen arvoksi.
INSERT INTO film_types (film_id) VALUES (3),(4);

-- Tässä yhdelle elokuvan nimikkeelle on määritetty kaksi eri levyformaattia.
-- Eli Blu-ray ja 3D Blu-ray. Film_id on tässä arvoltaan 5.
INSERT INTO film_types (film_id, type_id) VALUES (5,3),(5,2);

5. Millä komennoilla saat kumottua edellisissä vaiheissa tehdyt muutokset? Kirjoita siis komennot, joilla voit poistaa format_type ja film_types taulut kaikkine tietoineen.

-- Poistetaan film_types taulu.
DROP TABLE film_types;

-- Poistetaan format_type taulu.
DROP TABLE format_type;

3. Kehittäjänä huomaat ongelman, että elokuville voi asettaa vain yhden jakeluformaatin. yhdellä elokuvalla voi kuitenkin olla useita eri jakeluformaatteja, joten tarvitsemme liitostaulun. Kirjoita tarvittavat komennot taulun luomista varten. Selitä myös minkä tyyppinen viittaus (relaatio) tässä on kyseessä. (lue myös )

https://fi.wikipedia.org/wiki/Blu-ray
ER -kaaviosta
ER -kaaviosta