Geodatabáze.jecool.net

Lecture 1

Z3104 GEODATABÁZE

Obsah

  • Nudná teorie
    • Databáze
    • Tabulka
    • Primární klíč
    • Integrita DB
    • Kardinalita
    • Datové typy
    • Normální formy
  • Nudná praxe
    • Instalace PostgreSQL a pgAdmin IV
  • Zábavná praxe

Databáze

Uspořádaná množina informací.

Relační databáze

Databáze využívající principů relační algebry (relačního kalkulu).

Tabulka

Studenti
UČO
Jméno
Příjmení
Věk

Záznam v tabulce

UČO Jméno Příjmení Věk
1234567 Tomáš Novák 20
6543210 Jan Holý 35
1648721 Lukáš Zavadil 22

Primární klíč (Primary Key)

Unikátní hodnota, která jednoznačně identifikuje záznam v tabulce.

UČO Jméno Příjmení Věk
1234567 Tomáš Novák 20
6543210 Jan Holý 35
1648721 Lukáš Zavadil 22

Cizí klíč (Foreign Key)

Integrita databáze (Integrita dat)

ACID

  • Atomic
  • Consistent
  • Isolated
  • Durable

Integritní omezení

Slouží k definování pravidel, která omezují či definují způsob použití databáze/tabulek.

  • Datové typy
  • Primární klíč
  • UNIQUE
  • NOT NULL
  • CHECK

Kardinalita (Mohutnost)

Tabulky mohou mít souvislost či vztah.

Značení kardinality

Cardinality notation

Kardinalita '1:1'

Cardinality notation

Kardinalita '1:M'

Cardinality notation

Kardinalita 'M:N'

Cardinality notation

Datové typy

  • Numerické
  • Znakové
  • Bool
  • Datum/čas
  • Geometrické
  • a další...

Numerické

smallint-32768 to +32767
integer-2147483648 to +2147483647
bigint-9223372036854775808 to +9223372036854775807
real6 decimal digits precision
double15 decimal digits precision

Znakové

character varying(n)
varchar(n)
character(n)
char(n)
text

Bool

booleanTRUE / FALSE

Datum/čas

timestamp
date
time

Geometrické

point
line
box
path
polygon
circle

NULL

Normální formy

1. normální forma

Datový záznam je v 1. NF, když jsou všechny jeho komponenty atomické (tj. atributy nejsou složené datové struktury).

Čti: Co položka to jeden údaj. Ne více informací v jedné položce.

1. normální forma - příklad

Zakazník
id (PK)
jmeno
prijmeni
adresa
Zakazník
id (PK)
jmeno
prijmeni
ulice
mesto
psc

2. normální forma

Datový záznam je v 2. NF, pokud je v 1. NF a každá neklíčová položka (atribut) v záznamu je plně funkčně závislá na každém kandidátním klíči.

Čti: Každý atribut souvisí s celým kandidátním (primárním) klíčem. Ne pouze s jeho součástí.

2. normální forma - příklad

Hodnoceni studenta
uco (PK)
kod_predmetu (PK)
znamka
nazev predmetu
Hodnoceni studenta
uco (PK)
kod_predmetu (PFK)
znamka

Predmet
kod_predmetu (PK)
nazev_predmetu

3. normální forma

Datový záznam je ve 3.NF, pokud je ve 2.NF a každý atribut je funkčně závislý na klíči a pouze na klíči.

Čti: Neexistuje atribut, který není závislý na primárním klíči.

3. normální forma - příklad

Kniha
isbn (PK)
nazev
autor_ilustrace
vek_autora
Kniha
isbn (PK)
nazev
id_autora

Autor
id (PK)
vek_autora

4. normální forma

Datový záznam je ve 4.NF, pokud je ve 3.NF a v datových záznamech nejsou podmíněné funkční závislosti.

Čti: Neobsahuje hodnoty NULL.

SQL (Structured Query Language)

Databázové systémy

  • MySQL
  • PostgreSQL
  • SQLite
  • Oracle
  • MS-SQL
  • DB2
http://https://www.postgresql.org/docs/10/static/index.html

Instalace PostgreSQL a pgAdmin IV

http://www.postgresql.org/download/

Přihlášení k databázi - pgAdmin IV

  • Server Groups → Servers → postgres (localhost:5432)
  • Zadat jméno a heslo
  • Vytvořit databázi - pojmenovat podle svého UČO
  • Tabulky jsou v: Schamas &rarra; public → Tables
  • SQL příkazy je možné zadávat: Tools → Query tool (Ctrl + E)

Základní příkazy SQL

CREATE TABLE


CREATE TABLE nazev_tabulky
	(
	 nazev_sloupce INT,
	 nazev_sloupce_2 VARCHAR(10)
	);
						

CREATE TABLE - příklad


CREATE TABLE zamestnanci
    (prijmeni TEXT, mesto VARCHAR(10), vek INT);
						

Tabulka po vytvoření

prijmeni (TEXT) mesto (VARCHAR(10)) vek (INT)

ALTER TABLE


ALTER TABLE nazev_tabulky
 ADD COLUMN jmeno_sloupce TEXT;
						

ALTER TABLE - příklad


ALTER TABLE zamestnanci ADD COLUMN jmeno TEXT;
						

Tabulka po změně

jmeno (TEXT) prijmeni (TEXT) mesto (VARCHAR(10)) vek (INT)

INSERT


INSERT INTO nazev_tabulky
  (sloupec1, sloupec2, sloupec3)
VALUES
  (hodnota1, hodnote2, hodnota2);
						

INSERT - příklad


INSERT INTO zamestnanci (jmeno, prijmeni, mesto, vek)
    VALUES ('Jan', 'Novak', 'Brno', 62);
						

Tabulka po vložení

jmeno (TEXT) prijmeni (TEXT) mesto (VARCHAR(10)) vek (INT)
Jan Novak Brno 62

SELECT


SELECT sloupec1, sloupec2 FROM nazev_tabulky;
						

SELECT * FROM nazev_tabulky;
						

SELECT sloupec1, sloupec2 FROM nazev_tabulky WHERE sloupec1 = hodnota1;
						

SELECT - příklad


SELECT jmeno FROM zamestnanci;
						

SELECT * FROM zamestnanci;
						

SELECT jmeno, vek FROM zamestnanci WHERE prijmeni = 'Novak';
						

Děkuji za pozornost