Čtvrté a poslední pokračování seriálu
Tabulky máme navržené, ale vazby mezi nimi nikoliv. To nyní uděláme.
Vazba mezi tabulkou obec a firma:
Je zřejmé, že tato vazba je typu 1:n (firma může být registrována pouze v jedné obci, v obci může být více firem) – úmyslně pomíjím firmy s více lokacemi, rozlišení se provede v názvu firmy např.: Dřevoplech a.s. pobočka Chvojkovice-Brod.
Vazba mezi tabulkou firma a vizitky: Uvažujeme-li, že jeden člověk může být zaměstnán u více firem mám relaci m:n. To je trošku problém. Řešením je vytvoření režijní (needitované) tabulky s názvem v-f a atributy vizitky_id a firma_id, která bude mít relaci mezi tabulkami: vizitky 1:n v-f m:1 firma. Tím musíme udělat ještě změnu v tabulce viztky a odstranit již nepotřebný atribut firma_id.
Podobně ošetříme i relace pro tabulku pozice vytvořením režijní tabulky v-p a nastavením relací 1:n. V tabulce vizitky odstraníme nepotřebný atribut pozice_id.
Vazba mezi tabulkou titul a vizitky. Je zřejmé, že tato vazba je typu 1:n
Výsledek našeho snažení je vidět na následujícím obrázku:

Obrázek je vytvořen v case nástroji CASE studio 2
Poslední co nám zbývá je nastavení indexů. Indexy zrychlují vyhledávání v polích databáze. Proto se pokusíme odhadnou co budeme nejčastěji vyhledávat a nastavme příslušné indexy.
Tabulka obec: zaindexujeme pole obec a psc
Tabulka firma: zaindexujeme pole firma a web
Tabulka vizitky: zaindexujeme pole prijmeni+jmeno do jednoho indexu s názvem jmeno
Výsledek je patrný na následujícím obrázku:

Obrázek je vytvořen v case nástroji CASE studio 2
A tím máme vlastně hotovo.
Vlastní aplikaci můžeme napsat napsat například v PHP, ale to již ponechám na laskavém čtenáři samotném.
Doporučená literatura:
Na závěr obligátní SQL skript:
drop table IF EXISTS v_p;
drop table IF EXISTS v_f;
drop table IF EXISTS vizitky;
drop table IF EXISTS pozice;
drop table IF EXISTS titul;
drop table IF EXISTS firma;
drop table IF EXISTS obec;
Create table firma (
id Int NOT NULL,
obec_id Int NOT NULL,
firma Varchar(40),
ulice Varchar(40),
cislo_popisne Varchar(5),
web Varchar(20),
UNIQUE (id),
Primary Key (id)) ENGINE = InnoDB;
Create table titul (
id Int NOT NULL,
titul Varchar(20),
UNIQUE (id),
Primary Key (id)) ENGINE = InnoDB;
Create table pozice (
id Int NOT NULL,
pozice Varchar(15),
UNIQUE (id),
Primary Key (id)) ENGINE = InnoDB;
Create table obec (
id Int NOT NULL,
obec Varchar(30),
psc Varchar(5),
UNIQUE (id),
Primary Key (id)) ENGINE = InnoDB;
Create table vizitky (
id Int NOT NULL,
titul_id Int NOT NULL,
jmeno Varchar(25),
prijmeni Varchar(25),
telefon Varchar(13),
mobil Varchar(13),
fax Varchar(13),
email Varchar(25),
poznamka Text,
UNIQUE (id)) ENGINE = InnoDB;
Create table v_f (
vizitky_id Int NOT NULL,
firma_id Int NOT NULL,
Primary Key (vizitky_id)) ENGINE = InnoDB;
Create table v_p (
vizitky_id Int NOT NULL,
pozice_id Int NOT NULL,
Primary Key (vizitky_id)) ENGINE = InnoDB;
Create Index firma ON firma (firma);
Create Index web ON firma (web);
Create Index obec ON obec (obec);
Create Index psc ON obec (psc);
Create Index jmeno ON vizitky (prijmeni,jmeno);
Alter table v_f add Foreign Key (firma_id) references firma (id) on delete restrict on update restrict;
Alter table vizitky add Foreign Key (titul_id) references titul (id) on delete cascade on update cascade;
Alter table v_p add Foreign Key (pozice_id) references pozice (id) on delete restrict on update restrict;
Alter table firma add Foreign Key (obec_id) references obec (id) on delete cascade on update cascade;
Alter table v_p add Foreign Key (vizitky_id) references vizitky (id) on delete cascade on update cascade;
Alter table v_f add Foreign Key (vizitky_id) references vizitky (id) on delete cascade on update cascade;
18 říjen 2005, 18:22 Autor:Aleš Dobrovolný
Líbil se vám tento článek? Pošlete odkaz na:
Tweet
Nebo pošlete sponzorskou SMS.