# HG changeset patch # User František Kučera # Date 1240947930 -7200 # Node ID dadbf814a612bcd10594c28fb12eb1934f7f9b90 Databázové schéma – jedna z prvních verzí diff -r 000000000000 -r dadbf814a612 sql/schéma.sql --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sql/schéma.sql Tue Apr 28 21:45:30 2009 +0200 @@ -0,0 +1,562 @@ +-- +-- PostgreSQL database dump +-- + +-- Started on 2009-04-28 21:06:29 CEST + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = off; +SET check_function_bodies = false; +SET client_min_messages = warning; +SET escape_string_warning = off; + +-- +-- TOC entry 6 (class 2615 OID 16386) +-- Name: miniobchod; Type: SCHEMA; Schema: -; Owner: miniobchod +-- + +CREATE SCHEMA miniobchod; + + +ALTER SCHEMA miniobchod OWNER TO miniobchod; + +SET search_path = miniobchod, pg_catalog; + +-- +-- TOC entry 332 (class 1247 OID 16398) +-- Dependencies: 333 6 +-- Name: email; Type: DOMAIN; Schema: miniobchod; Owner: miniobchod +-- + +CREATE DOMAIN email AS character varying(255) NOT NULL + CONSTRAINT email_regexp CHECK (((VALUE)::text ~ '^[_a-zA-Z0-9\\.\\-]+@[_a-zA-Z0-9\\.\\-]+\\.[a-zA-Z]{2,4}$'::text)); + + +ALTER DOMAIN miniobchod.email OWNER TO miniobchod; + +-- +-- TOC entry 1821 (class 0 OID 0) +-- Dependencies: 332 +-- Name: DOMAIN email; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON DOMAIN email IS 'e-mailová adresa'; + + +-- +-- TOC entry 344 (class 1247 OID 16566) +-- Dependencies: 345 6 +-- Name: psc; Type: DOMAIN; Schema: miniobchod; Owner: miniobchod +-- + +CREATE DOMAIN psc AS character varying(255) NOT NULL + CONSTRAINT psc_regexp CHECK (((VALUE)::text ~ '^\\d{3} ?\\d{2}$'::text)); + + +ALTER DOMAIN miniobchod.psc OWNER TO miniobchod; + +-- +-- TOC entry 1822 (class 0 OID 0) +-- Dependencies: 344 +-- Name: DOMAIN psc; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON DOMAIN psc IS 'Poštovní směrovací číslo'; + + +-- +-- TOC entry 55 (class 1255 OID 16459) +-- Dependencies: 6 +-- Name: nahodne_heslo(); Type: FUNCTION; Schema: miniobchod; Owner: miniobchod +-- + +CREATE FUNCTION nahodne_heslo() RETURNS character + AS $$select sha512(random()::text || random()::text || random()::text);$$ + LANGUAGE sql; + + +ALTER FUNCTION miniobchod.nahodne_heslo() OWNER TO miniobchod; + +-- +-- TOC entry 56 (class 1255 OID 16460) +-- Dependencies: 6 +-- Name: sha1(text); Type: FUNCTION; Schema: miniobchod; Owner: miniobchod +-- + +CREATE FUNCTION sha1(text) RETURNS text + AS $_$ +SELECT encode(digest(decode($1,'escape'::text),'sha1'::text),'hex'); +$_$ + LANGUAGE sql IMMUTABLE STRICT; + + +ALTER FUNCTION miniobchod.sha1(text) OWNER TO miniobchod; + +-- +-- TOC entry 57 (class 1255 OID 16461) +-- Dependencies: 6 +-- Name: sha256(text); Type: FUNCTION; Schema: miniobchod; Owner: miniobchod +-- + +CREATE FUNCTION sha256(text) RETURNS text + AS $_$ +SELECT encode(digest(decode($1,'escape'::text),'sha256'::text),'hex'); +$_$ + LANGUAGE sql IMMUTABLE STRICT; + + +ALTER FUNCTION miniobchod.sha256(text) OWNER TO miniobchod; + +-- +-- TOC entry 54 (class 1255 OID 16458) +-- Dependencies: 6 +-- Name: sha512(text); Type: FUNCTION; Schema: miniobchod; Owner: miniobchod +-- + +CREATE FUNCTION sha512(text) RETURNS text + AS $_$ +SELECT encode(digest(decode($1,'escape'::text),'sha512'::text),'hex'); +$_$ + LANGUAGE sql IMMUTABLE STRICT; + + +ALTER FUNCTION miniobchod.sha512(text) OWNER TO miniobchod; + +-- +-- TOC entry 58 (class 1255 OID 16608) +-- Dependencies: 350 6 +-- Name: vyjimka(character varying); Type: FUNCTION; Schema: miniobchod; Owner: miniobchod +-- + +CREATE FUNCTION vyjimka(chyba character varying) RETURNS void + AS $$BEGIN +RAISE EXCEPTION '%', chyba; +END;$$ + LANGUAGE plpgsql; + + +ALTER FUNCTION miniobchod.vyjimka(chyba character varying) OWNER TO miniobchod; + +-- +-- TOC entry 1823 (class 0 OID 0) +-- Dependencies: 58 +-- Name: FUNCTION vyjimka(chyba character varying); Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON FUNCTION vyjimka(chyba character varying) IS 'Vyhodí výjimku'; + + +-- +-- TOC entry 1528 (class 1259 OID 16575) +-- Dependencies: 6 +-- Name: adresa_seq; Type: SEQUENCE; Schema: miniobchod; Owner: miniobchod +-- + +CREATE SEQUENCE adresa_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + +ALTER TABLE miniobchod.adresa_seq OWNER TO miniobchod; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- TOC entry 1529 (class 1259 OID 16578) +-- Dependencies: 1804 332 344 6 +-- Name: adresa; Type: TABLE; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE TABLE adresa ( + id bigint DEFAULT nextval('adresa_seq'::regclass) NOT NULL, + uzivatel email, + jmeno character varying(255), + ulice character varying(255), + cp smallint, + mesto character varying(255), + psc psc +); + + +ALTER TABLE miniobchod.adresa OWNER TO miniobchod; + +-- +-- TOC entry 1824 (class 0 OID 0) +-- Dependencies: 1529 +-- Name: TABLE adresa; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON TABLE adresa IS 'Poštovní adresa'; + + +-- +-- TOC entry 1825 (class 0 OID 0) +-- Dependencies: 1529 +-- Name: COLUMN adresa.jmeno; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN adresa.jmeno IS 'Jméno příjemce'; + + +-- +-- TOC entry 1826 (class 0 OID 0) +-- Dependencies: 1529 +-- Name: COLUMN adresa.cp; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN adresa.cp IS 'Číslo popisné'; + + +-- +-- TOC entry 1827 (class 0 OID 0) +-- Dependencies: 1529 +-- Name: COLUMN adresa.psc; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN adresa.psc IS 'Poštovní směrovací číslo'; + + +-- +-- TOC entry 1527 (class 1259 OID 16540) +-- Dependencies: 1803 6 +-- Name: objednane_zbozi; Type: TABLE; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE TABLE objednane_zbozi ( + objednavka bigint NOT NULL, + zbozi bit varying NOT NULL, + mnozstvi smallint DEFAULT 1 NOT NULL +); + + +ALTER TABLE miniobchod.objednane_zbozi OWNER TO miniobchod; + +-- +-- TOC entry 1828 (class 0 OID 0) +-- Dependencies: 1527 +-- Name: TABLE objednane_zbozi; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON TABLE objednane_zbozi IS 'Vazební tabulka, která definuje obsah objednávky – objednané zboží'; + + +-- +-- TOC entry 1525 (class 1259 OID 16408) +-- Dependencies: 6 +-- Name: objednavka_seq; Type: SEQUENCE; Schema: miniobchod; Owner: miniobchod +-- + +CREATE SEQUENCE objednavka_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + +ALTER TABLE miniobchod.objednavka_seq OWNER TO miniobchod; + +-- +-- TOC entry 1526 (class 1259 OID 16410) +-- Dependencies: 1800 1801 1802 6 332 +-- Name: objednavka; Type: TABLE; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE TABLE objednavka ( + id bigint DEFAULT nextval('objednavka_seq'::regclass) NOT NULL, + kod character varying DEFAULT nahodne_heslo() NOT NULL, + uzivatel email, + podano timestamp with time zone DEFAULT now() NOT NULL, + adresa bigint +); + + +ALTER TABLE miniobchod.objednavka OWNER TO miniobchod; + +-- +-- TOC entry 1829 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: TABLE objednavka; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON TABLE objednavka IS 'Objednávka zboží'; + + +-- +-- TOC entry 1830 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: COLUMN objednavka.id; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN objednavka.id IS 'Číslo objednávky je zároveň variabilním symbolem'; + + +-- +-- TOC entry 1831 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: COLUMN objednavka.kod; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN objednavka.kod IS 'Potvrzovací kód – pošle se zákazníkovi e-mailem a ten pomocí něj objednávku potvrdí.'; + + +-- +-- TOC entry 1832 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: COLUMN objednavka.uzivatel; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN objednavka.uzivatel IS 'Kdo si objednal'; + + +-- +-- TOC entry 1833 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: COLUMN objednavka.podano; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN objednavka.podano IS 'Datum a čas podání objednávky'; + + +-- +-- TOC entry 1834 (class 0 OID 0) +-- Dependencies: 1526 +-- Name: COLUMN objednavka.adresa; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN objednavka.adresa IS 'Kam se má objednávka doručit'; + + +-- +-- TOC entry 1524 (class 1259 OID 16400) +-- Dependencies: 1798 1799 6 332 +-- Name: uzivatel; Type: TABLE; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE TABLE uzivatel ( + email email NOT NULL, + heslo character varying DEFAULT nahodne_heslo() NOT NULL, + zalozen timestamp with time zone DEFAULT now() +); + + +ALTER TABLE miniobchod.uzivatel OWNER TO miniobchod; + +-- +-- TOC entry 1835 (class 0 OID 0) +-- Dependencies: 1524 +-- Name: TABLE uzivatel; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON TABLE uzivatel IS 'Zákazník'; + + +-- +-- TOC entry 1836 (class 0 OID 0) +-- Dependencies: 1524 +-- Name: COLUMN uzivatel.email; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN uzivatel.email IS 'Uživatel je identifikovaný pomocí své e-mailové adresy'; + + +-- +-- TOC entry 1837 (class 0 OID 0) +-- Dependencies: 1524 +-- Name: COLUMN uzivatel.heslo; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN uzivatel.heslo IS 'Vygenerované heslo, kterým se uživatel prokazuje (pošle se mu na e-mail)'; + + +-- +-- TOC entry 1838 (class 0 OID 0) +-- Dependencies: 1524 +-- Name: COLUMN uzivatel.zalozen; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN uzivatel.zalozen IS 'Datum a čas registrace zákazníka'; + + +-- +-- TOC entry 1522 (class 1259 OID 16387) +-- Dependencies: 6 +-- Name: zbozi_seq; Type: SEQUENCE; Schema: miniobchod; Owner: miniobchod +-- + +CREATE SEQUENCE zbozi_seq + INCREMENT BY 1 + NO MAXVALUE + NO MINVALUE + CACHE 1; + + +ALTER TABLE miniobchod.zbozi_seq OWNER TO miniobchod; + +-- +-- TOC entry 1523 (class 1259 OID 16389) +-- Dependencies: 1797 6 +-- Name: zbozi; Type: TABLE; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE TABLE zbozi ( + id bigint DEFAULT nextval('zbozi_seq'::regclass) NOT NULL, + nazev character varying(255), + popis text +); + + +ALTER TABLE miniobchod.zbozi OWNER TO miniobchod; + +-- +-- TOC entry 1839 (class 0 OID 0) +-- Dependencies: 1523 +-- Name: TABLE zbozi; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON TABLE zbozi IS 'Položka katalogu'; + + +-- +-- TOC entry 1840 (class 0 OID 0) +-- Dependencies: 1523 +-- Name: COLUMN zbozi.id; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN zbozi.id IS 'Číslo zboží'; + + +-- +-- TOC entry 1841 (class 0 OID 0) +-- Dependencies: 1523 +-- Name: COLUMN zbozi.nazev; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN zbozi.nazev IS 'Název zboží'; + + +-- +-- TOC entry 1842 (class 0 OID 0) +-- Dependencies: 1523 +-- Name: COLUMN zbozi.popis; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON COLUMN zbozi.popis IS 'Popis zboží'; + + +-- +-- TOC entry 1815 (class 2606 OID 16586) +-- Dependencies: 1529 1529 +-- Name: adresa_pk; Type: CONSTRAINT; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +ALTER TABLE ONLY adresa + ADD CONSTRAINT adresa_pk PRIMARY KEY (id); + + +-- +-- TOC entry 1813 (class 2606 OID 16548) +-- Dependencies: 1527 1527 1527 +-- Name: objednane_zbozi_pk; Type: CONSTRAINT; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +ALTER TABLE ONLY objednane_zbozi + ADD CONSTRAINT objednane_zbozi_pk PRIMARY KEY (objednavka, zbozi); + + +-- +-- TOC entry 1811 (class 2606 OID 16415) +-- Dependencies: 1526 1526 +-- Name: objednavka_pk; Type: CONSTRAINT; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +ALTER TABLE ONLY objednavka + ADD CONSTRAINT objednavka_pk PRIMARY KEY (id); + + +-- +-- TOC entry 1808 (class 2606 OID 16407) +-- Dependencies: 1524 1524 +-- Name: uzivatel_pk; Type: CONSTRAINT; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +ALTER TABLE ONLY uzivatel + ADD CONSTRAINT uzivatel_pk PRIMARY KEY (email); + + +-- +-- TOC entry 1806 (class 2606 OID 16397) +-- Dependencies: 1523 1523 +-- Name: zbozi_pk; Type: CONSTRAINT; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +ALTER TABLE ONLY zbozi + ADD CONSTRAINT zbozi_pk PRIMARY KEY (id); + + +-- +-- TOC entry 1809 (class 1259 OID 16597) +-- Dependencies: 1526 +-- Name: fki_objednavka_adresa_fk; Type: INDEX; Schema: miniobchod; Owner: miniobchod; Tablespace: +-- + +CREATE INDEX fki_objednavka_adresa_fk ON objednavka USING btree (adresa); + + +-- +-- TOC entry 1605 (class 2618 OID 16598) +-- Dependencies: 1526 1529 1526 58 1526 1526 1526 1529 +-- Name: objednavka_adresa_uzivatel; Type: RULE; Schema: miniobchod; Owner: miniobchod +-- + +CREATE RULE objednavka_adresa_uzivatel AS ON INSERT TO objednavka WHERE ((new.uzivatel)::text <> ((SELECT adresa.uzivatel FROM adresa WHERE (adresa.id = new.adresa)))::text) DO SELECT vyjimka('Uživatel může objednat zboží jen na svoji adresu'::character varying) AS vyjimka; + + +-- +-- TOC entry 1843 (class 0 OID 0) +-- Dependencies: 1605 +-- Name: RULE objednavka_adresa_uzivatel ON objednavka; Type: COMMENT; Schema: miniobchod; Owner: miniobchod +-- + +COMMENT ON RULE objednavka_adresa_uzivatel ON objednavka IS 'Uživatel může objednat zboží jen na svoji adresu'; + + +-- +-- TOC entry 1818 (class 2606 OID 16587) +-- Dependencies: 1807 1529 1524 +-- Name: adresa_uzivatel_fk; Type: FK CONSTRAINT; Schema: miniobchod; Owner: miniobchod +-- + +ALTER TABLE ONLY adresa + ADD CONSTRAINT adresa_uzivatel_fk FOREIGN KEY (uzivatel) REFERENCES uzivatel(email); + + +-- +-- TOC entry 1817 (class 2606 OID 16592) +-- Dependencies: 1814 1529 1526 +-- Name: objednavka_adresa_fk; Type: FK CONSTRAINT; Schema: miniobchod; Owner: miniobchod +-- + +ALTER TABLE ONLY objednavka + ADD CONSTRAINT objednavka_adresa_fk FOREIGN KEY (adresa) REFERENCES adresa(id); + + +-- +-- TOC entry 1816 (class 2606 OID 16493) +-- Dependencies: 1807 1524 1526 +-- Name: objednavka_uzivatel_fk; Type: FK CONSTRAINT; Schema: miniobchod; Owner: miniobchod +-- + +ALTER TABLE ONLY objednavka + ADD CONSTRAINT objednavka_uzivatel_fk FOREIGN KEY (uzivatel) REFERENCES uzivatel(email); + + +-- Completed on 2009-04-28 21:06:38 CEST + +-- +-- PostgreSQL database dump complete +-- +