Transformace konceptuálního modelu na relační

Podobné dokumenty
DBS Transformace konceptuálního schématu na

Transformace ER SQL. Ing. Michal Valenta PhD. Databázové systémy BI-DBS ZS 2010/11, P edn. 9

Jazyk SQL 3 - DML, DDL, TCL, DCL

Databáze I. Přednáška 4

DBS Konceptuální modelování

Souvislost E-R schématu s relačním

Konceptuální modelování a SQL

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Jazyk SQL slajdy k přednášce NDBI001

Relace x vztah (relationship)

DBS Konceptuální modelování

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Konceptuální modelování

A5M33IZS Informační a znalostní systémy. Relační databázová technologie

Úvod do databázových systémů

Databáze I. Přednáška 7

Databázové modelování. Analýza Návrh konceptuálního schématu

Relační databázová technologie

Jazyk SQL. Jaroslav Pokorný MFF UK, Praha J. Pokorný 1

Funkční schéma Datové schéma Integrita modelu s realitou

Diagram výskytů a vztahů

6. SQL složitější dotazy, QBE

Databázové systémy Cvičení 5.2

Modely datové. Další úrovní je logická úroveň Databázové modely Relační, Síťový, Hierarchický. Na fyzické úrovni se jedná o množinu souborů.

Databáze 2013/2014. Konceptuální model DB. RNDr. David Hoksza, Ph.D.

Konceptuální modelování

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

Databázové systémy I. 3. přednáška

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Integritní omezení (IO)

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Dotazovací jazyk SQL I

- sloupcové integritní omezení

DUM 12 téma: Příkazy pro tvorbu databáze

Databázové systémy BIK-DBS

Dotazovací jazyk SQL I

RELAČNÍ DATABÁZOVÉ SYSTÉMY

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Jazyk PL/SQL Úvod, blok

Konceptuální modelování. Pavel Tyl

Databázové systémy. Tomáš Skopal. - úvod do relačního modelu. - převod konceptuálního schématu do relačního

Kapitola 6: Omezení integrity. Omezení domény

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Konceptuální datové modely používané při analýze

Databázové systémy. Integritní omezení. Vilém Vychodil. V. Vychodil (KMI/DATA1, Přednáška 9) Integritní omezení Databázové systémy 1 / 33

1. Relační databázový model

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Jazyk SQL 2. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c M.Valenta, 2011 BI-DBS, ZS 2011/12

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Návrh datového modelu

Úvod do databázových systémů 6. cvičení

Databáze. Logický model DB. David Hoksza

Design databáze. RNDr. Ondřej Zýka

Relační databázový model. Vladimíra Zádová, KIN, EF, TUL- DBS

DBS relační DB model, relační algebra

Databázové systémy úvod

MySQL. mysql> CREATE DATABASE nova CHARACTER SET latin2 COLLATE latin2_czech_cs; Query OK, 1 row affected (0.02 sec)

Co se stane po jeho vykonání? Vyberte libovolný počet možných odpovědí. Správná nemusí být žádná, ale také mohou být správné všechny.

Databáze I. Přednáška 2

2. přednáška. Databázový přístup k datům (SŘBD) Možnost počítání v dekadické aritmetice - potřeba přesných výpočtů, např.

4IT218 Databáze. 4IT218 Databáze

Obsah přednášky. Databázové systémy RDBMS. Fáze návrhu RDBMS. Coddových 12 pravidel. Coddových 12 pravidel

DBS Databázové modely

Měřící systém se vzdáleným přístupem. Databáze

12. blok Fyzický návrh databáze

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

Tvorba informačních systémů

Oracle XML DB. Tomáš Nykodým

Relační databázová technologie

DBS Databázové modely

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Zkouškový příklad 4IT218 Rezervační systém zážitkové agentury. Karel Kohout FIS VŠE

Tvorba informačních systémů

Materiál ke cvičením - SQL

Databázové systémy. Cvičení 2

Analýza dat a modelování. Přednáška 2

Databázové systémy BIK-DBS

2. blok část A Jazyk SQL, datové typy

Databáze I. 5. přednáška. Helena Palovská

8.2 Používání a tvorba databází

Objektově relační databáze a ORACLE 8

Inovace tohoto kurzu byla spolufinancována z Evropského sociálního fondu a státního rozpočtu České republiky.

Michal Valenta DBS Databázové modely 2. prosince / 35

Semestrální práce 4IT450

Databázové systémy I

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

2 Konceptuální modelování a návrh databáze

OBJECT DEFINITION LANGUAGE. Jonáš Klimeš NDBI001 Dotazovací Jazyky I 2013

DBS Normální formy, normalizace

Internetová filmová databáze IFDB

Kritéria hodnocení praktické maturitní zkoušky z databázových systémů

Tabulka fotbalové ligy

Transkript:

Transformace konceptuálního modelu na relační Michal Valenta Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze c Michal Valenta, 2016 BI-DBS, LS 2015/16 https://edux.fit.cvut.cz/courses/bi-dbs/ Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 1 / 30

CREATE TABLE CREATE TABLE CREATE TABLE tabulka ( sloupec datovy_typ [io_sloupce [, io_sloupce...]],... [io_tabulky [, io_tabulky...]] ); CREATE TABLE VYPUJCKY ( c_kopie CHAR (3) NOT NULL, c_zak CHARACTER (6) NOT NULL, cena DECIMAL(5,2), rod_c CHARACTER (10) NOT NULL, datum_v DATE); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 3 / 30

ALTER TABLE, DROP TABLE ALTER TABLE ADD sloupec, DROP sloupec, ALTER sloupec, ADD CONSTRAINT io, DROP CONSTRAINT io ALTER TABLE KINA ADD pocet_mist INTEGER; DROP TABLE DROP TABLE tabulka [CASCADE CONSTRAINTS] DROP TABLE KINA CASCADE CONSTRAINTS; Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 4 / 30

Integritní omezení v SQL Integritní omezení sloupce: NOT NULL DEFAULT UNIQUE PRIMARY KEY REFERENCES CHECK Integritní omezení tabulky stejné jako IO sloupce (NOT NULL je speciálním případem CHECK) složené IO vždy na úrovni tabulky Pojmenování IO není syntakticky nutné, ale vřele doporučované Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 5 / 30

Integritní omezení v SQL DROP TABLE KINA CASCADE CONSTRAINTS; CREATE TABLE KINA...... CREATE TABLE PŘESTAVENÍ (NAZEV_K Char_Varying(20) NOT NULL, JMENO_F Char_Varying(20) NOT NULL, DATUM date NOT NULL, CONSTRAINT PREDSTAVENI_PK PRIMARY KEY (NAZEV_K, JMENO_F), CONSTRAINT PREDSTVENI_KINA_FK FOREIGN KEY (NAZEV_K) REFERENCES KINA, CONSTRAINT PREDSTAVENI_FILMY_FK FOREIGN KEY (JMENO_F) REFERENCES FILMY); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 6 / 30

Referenční integrita, kaskádní reakce Referenční integrita (cizí klíč) v SQL čtyři možné způsoby reakce: [ CONSTRAINT constraint_name ] FOREIGN KEY ( column_name [,... ] ) REFERENCES reftable [ ( refcolumn [,... ] ) ] [ ON DELETE action ] [ ON UPDATE action ] action ::= [NO ACTION RESTRICT CASCADE SET NULL SET DEFAULT] CREATE TABLE order_items ( product_no integer REFERENCES products ON DELETE RESTRICT, order_id integer REFERENCES orders ON DELETE CASCADE, quantity integer, PRIMARY KEY (product_no, order_id)); Poznámka: implementace tohoto rysu nebývá kompletní. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 7 / 30

Datové typy v SQL numerické textové rozsáhlé znakové řetězce CLOB (Character Large Object) rozsáhlé bitové řetězce BLOB (Binary Large Object) datum a čas interval poznámka NULL je prvkem každého datového typu. Tříhodnotová logika: TRUE, FALSE, UNKNOWN. Konverze: implicitní, explicitní (pomocí funkce CAST). Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 8 / 30

Datové typy v SQL přesné numerické typy INTEGER, SMALLINT, NUMERIC, DECIMAL, NUMBER - DECIMAL(p,q) p... přesnost q... měřítko aproximativní numerické typy FLOAT REAL DOUBLE PRECISION Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 9 / 30

Datové typy v SQL znakové řetězce CHARACTER(n) (délka n, doplnění mezerami zprava) CHARACTER VARYING(n) (proměnlivá délka, maximálně n) datum a čas DATE TIMESTAMP INTERVAL Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 10 / 30

Transformace schématu Algoritmus převodu konceptuálního schématu na relační bývá součástí modelovacích nástrojů (Oracle Data Modeller, Enterprise Architect,...). Pomocí nastavení je obvykle možné chování vestavěných generátorů výrazně upravit. Převod některých konstrukcí konceptuálního modelu (například ISA hierarchie) má několik možných variant, z nichž žádná není úplně přesná; optimální varianta pro konkrétní situaci závisí na dalších okolnostech (často používané operace, způsoby uložení dat, počet atributů v podtypech a nadtypu,...). V některých případech (povinnost nedeterminantu ve vztahu) nemáme na úrovni relačního modelu dostatečně efektivní mechanismus, který by kontrolu zajistil, proto se na kontrolu některých IO rezignuje. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 12 / 30

Postup transformace Entity Vztahy název entity název relace atributy entity atributy relace domény atributů entity se namapují na domény relačních atributů povinnost atributů entity NOT NULL na relační úrovni atributy identifikátoru entity PRIMARY KEY alternativní klíče UNIQUE u slabých entit je třeba do klíče přibrat identifikátory identifikačních vlastníků jediná možnost provázání dat ze dvou relací je referenční integrita (FOREIGN KEY) podle kardinality a parciality je třeba použít vztahové tabulky a integritní omezení NOT NULL a UNIQUE Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 13 / 30

Transformace silné entity Relační zápis (zjednodušené, používané i v testech) entita(identifikator, povinny_atribut, nepovinny_atribut) SQL CREATE TABLE entita ( identifikator INTEGER, povinny_atribut VARCHAR(20) NOT NULL, nepovinny_atribut VARCHAR(40), CONSTRAINT entita_pk PRIMARY KEY (identifikator) ); Poznámka: Domény atributů se zadávají již na konceptuální úrovni, ale v diagramech se obvykle nezobrazují. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 14 / 30

Vztah 1:1, obě entity povinná účast Relační zápis zamestnanec_vuz(cislo_z, jmeno_z, adresa, spz, vyrobce, model) SQL CREATE TABLE zamestnanec_vuz ( cislo_z integer CONSTRAINT zamestnantec_vuz_pk PRIMARY KEY, jneno_z varchar(20) NOT NULL, adresa varchar(40), spz varchar(20) NOT NULL CONSTRAINT zamestnantec_vuz_uk UNIQUE, vyrobce varchar (40) NOT NULL, model varchar(40)); Poznámka: Vzhledem k povinnosti členství je na obou stranách jedna tabulka. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 15 / 30

Vztah 1:1, jedna entita povinná účast Relační schéma zamestnanec(cislo_z, jmeno_z, adresa) vuz(spz, vyrobce, model, cislo_z) SQL: CREATE TABLE zamestnanec ( cislo_z integer CONSTRAINT zamestnantec_pk PRIMARY KEY, jneno_z varchar(20) adresa varchar(40)); vuz[cislo_z] zamestnanec[cislo_z] CREATE TABLE vuz ( spz varchar(20) CONSTRAINT vuz_pk PRIMARY KEY, vyrobce(40) NOT NULL, model varchar(40), cislo_z integer NOT NULL UNIQUE, CONSTRAINT zamestnanec_vuz_fk FOREIGN KEY (cislo_z) REFERENCES zamestnantec(cislo_z)); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 16 / 30

Vztah 1:1, nepovinná účast První možnost Jako v předchozím případě. Jediný rozdíl je ten, že atribut cislo_z v tabulce vuz bude nepovinný. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 17 / 30

Vztah 1:1, nepovinná účast Druhá možnost zamestnanec(cislo_z, jmeno_z, adresa) vuz(spz, vyrobce, model) zamestnanec_vuz (cislo_z, spz) zamestnanec_vuz[spz] vuz[spz] zamestnanec_vuz[cislo_z] zamestnanec[cislo_z] spz v relaci zamestnanec_vuz je NOT NULL a UNIQUE SQL: CREATE TABLE vuz (...); CREATE TABLE zamestnanec (...); CREATE TABLE zamestnanec_vuz ( cislo_z integer PRIMARY KEY REFERENCES zamestnanec (cislo_z), spz varchar(20) NOT NULL UNIQUE REFERENCES vuz (spz)); Poznámka: V notaci relačního modelu nejsou obvykle vyznačena integritní omezení NOT NULL a UNIQUE. Zde jsou však pro správnou transformaci obě tato integritní omezení nezbytná! Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 18 / 30

Vztah 1:N, povinná účast determinantu Relační zápis pacient(id_pac, jmeno_pac, id_pok) pokoj(id_pok, poc_luzek) pacient[id_pok] pokoj[id_pok] id_pok v relaci pacient NOT NULL SQL CREATE TABLE pacient ( id_pac integer CONSTRAINT pacient_pk PRIMARY KEY, jmeno_pac varchar(20) NOT NULL, id_pokoj integer NOT NULL); CREATE TABLE pokoj ( id_pok integer CONSTRAINT pokoj_pk PRIMARY KEY, poc_luzek integer NOT NULL); ALTER TABLE pacient ADD CONSTRAINT pacient_pokoj_fk FOREIGN KEY (id_pok) REFERENCES pokoj(id_pok)); Poznámka: Informaci o parcialitě nedeterminantu ztrácíme. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 19 / 30

Vztah 1:N, nepovinná účast determinantu První možnost Jako v předchozím případě. Rozdíl je ten, že atribut id_pok v tabulce pacient bude nepovinný. Druhá možnost pacient(id_pac, jmeno_pac) pokoj(id_pok, poc_luzek) umisteni (id_pac, id_pok) umisteni[id_pac] pacient[id_pac] umisteni[id_pok] pokoj[id_pok] id_pok v relaci umisteni NOT NULL SQL: CREATE TABLE pacient (...); CREATE TABLE pokoj (...); CREATE TABLE umisteni ( id_pac integer PRIMARY KEY REFERENCES pacient (id_pac), id_pokoj integer NOT NULL REFERENCES pokoj (id_pok)); Poznámka: Informaci o parcialitě nedeterminantu opět ztrácíme. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 20 / 30

Rekurzivní vztah Relační zápis osoba(id_osoby, jmeno, manager_id) osoba[manager_id] osoba[id_osoby SQL CREATE TABLE osoba ( id_osoby integer PRIMARY KEY, jmeno varchar(30), manager_id integer); ALTER TABLE osoba ADD CONSTRAINT osoba_manager_fk FOREIGN KEY (manager_id) REFERENCES osoba (id_osoby)); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 21 / 30

Vztah M:N Relační zápis kino(id_kina, nazev_kina) film(id_filmu, nazev_filmu) predstaveni(id_kina, id_filmu) predstaveni[id_kina] kino[id_kina] predstaveni[id_filmu] film[id_filmu] M:N vždy pomocí vztahové tabulky. SQL CREATE TABLE kino (...); CREATE TABLE film (...); CREATE TABLE predstaveni ( id_kina integer REFERENCES kino (id_kina), id_filmu integer REFERENCES film (id_filmu), CONSTRAINT predstaveni_pk PRIMARY KEY (id_kina,id_filmu)); Poznámka 1: Informaci o parcialitě nedeterminantů opět ztrácíme. Poznámka 2: Jeden film v jenom kině nejvýše jednou? Zřejmě vede na dekompozici. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 22 / 30

Dekompozice vztahu M:N silná entita Relační zápis kino(id_kina, nazev_kina) film(id_filmu, nazev_filmu) predstaveni(id_predstaveni, datum, id_kina, id_filmu) predstaveni[id_kina] kino[id_kina] predstaveni[id_filmu] film[id_filmu] SQL CREATE TABLE kino (...); CREATE TABLE film (...); CREATE TABLE predstaveni ( id_predstavení integer PRIMARY KEY, datum date NOT NULL, id_kina integer NOT NULL REFERENCES kino (id_kina), id_filmu integer NOT NULL REFERENCES film (id_filmu)); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 23 / 30

Dekompozice vztahu M:N slabá entita Relační zápis kino(id_kina, nazev_kina) film(id_filmu, nazev_filmu) predstaveni(datum, id_kina, id_filmu) predstaveni[id_kina] kino[id_kina] predstaveni[id_filmu] film[id_filmu] SQL CREATE TABLE kino (...); CREATE TABLE film (...); CREATE TABLE predstaveni ( datum date, id_kina integer NOT NULL REFERENCES kino (id_kina), id_filmu integer NOT NULL REFERENCES film (id_filmu), CONSTRAINT PRIMARY KEY predstaveni_pk (datum, id_kina, id_filmu)); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 24 / 30

Slabá entita, identifikační závislost Relační zápis blok(id_bloku, nazev_bloku) pokoj(cislo_pokoje, id_bloku) pokoj[id_bloku] blok[id_bloku] SQL CREATE TABLE blok (...); CREATE TABLE pokoj ( cislo_pokoje integer id_bloku integer REFERENCES blok (id_bloku), PRIMARY KEY (id_bloku, cislo_pokoje)); osoba(id_osoby, jmeno_osoby) profil(id_osoby, fotka) profil[id_osoby] osoba[id_osoby] CREATE TABLE osoba (...); CREATE TABLE profil ( fotka blob id_osoby integer REFERENCES osoba (id_osoby), PRIMARY KEY (id_osoby)); Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 25 / 30

ISA hierarchie varianta 1 osoba(id_osoby, email, telefon, jmeno, ico, dic) Je vhodné zavést rozlišovací atribut (pokud všechny atr. podtypu umožňují NULL, je to i nutné). varianta 2 osoba(id_osoby, email, telefon) fyzicka(id_osoby, jmeno) pravnicka(id_osoby, ico, dic) fyzicka[id_osoby] osoba[id_osoby] pravnicka[id_osoby] osoba[id_osoby] varianta 3 fyzicka(id_osoby, email, telefon, jmeno) pravnicka(id_osoby,email, telefon ico, dic) Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 26 / 30

Migrace klíčů, složený cizí klíč Relační zápis zakaznik(id_zak) zamestnanec(id_zam) film(id_filmu) kopie(id_filmu, id_kopie) vypujcka(od, id_zak, id_zam, id_filmu,id_kopie) kopie[id_filmu] film[id_filmu] vypujcka[id_zak] zakaznik[id_zak] vypujcka[id_zam] zakaznik[id_zam] vypujcka[id_filmu, id_kopie] kopie[id_filmu, id_kopie] Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 27 / 30

Smyčky Relační zápis zamestnanec(id_zam) zvire(id_zvir, krmi_id_zam, sponzoruje_id_zam) zvire[krmi_id_zam] zamestnanec[id_zam] zvire[sponzoruje_id_zam] zamestnanec[id_zam] Poznámka: Není možné, aby se dva atributy v jedné relaci jmenovaly stejně. Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 29 / 30

K zapamatování Různé typy integritních omezení Dekompozice vztahů typu M:N Kardinalita a parcialita Slabá entita Smyčky Michal Valenta (FIT ČVUT) Transformace koncept. modelu na relační Databázové systémy 2016 30 / 30