Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:dydaktyka:sbd:2009:projekty:rewersy:logiczny [2010/09/11 11:14]
sbd09
pl:dydaktyka:sbd:2009:projekty:rewersy:logiczny [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Projekt logiczny ====== 
-==== -. Projektowanie tabel. ====  
-Kod SQL tworzący kompletną strukturę danych wykorzystywaną w projekcie wygląda następująco:​ 
-<code sql> 
-SET client_encoding = '​UTF8';​ 
-SET standard_conforming_strings = off; 
-SET check_function_bodies = false; 
-SET client_min_messages = warning; 
-SET escape_string_warning = off; 
  
-SET search_path = public, pg_catalog; 
- 
--- 
--- Name: dblink_pkey_results;​ Type: TYPE; Schema: public; Owner: rewersy 
--- 
- 
-CREATE TYPE dblink_pkey_results AS ( 
- "​position"​ integer, 
- colname text 
-); 
- 
-ALTER TYPE public.dblink_pkey_results OWNER TO rewersy; 
- 
--- 
--- Name: clean_emp();​ Type: FUNCTION; Schema: public; Owner: rewersy 
--- 
- 
-CREATE FUNCTION clean_emp() RETURNS integer 
-    AS $$ 
-select numer_pokoju from pokoje; 
-$$ 
-    LANGUAGE sql; 
- 
- 
-ALTER FUNCTION public.clean_emp() OWNER TO rewersy; 
- 
-SET default_tablespace = '';​ 
- 
-SET default_with_oids = false; 
- 
--- 
--- Name: autorzy; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE autorzy ( 
-    imie character varying(45) NOT NULL, 
-    nazwisko character varying(45) NOT NULL, 
-    id integer NOT NULL 
-); 
- 
- 
-ALTER TABLE public.autorzy OWNER TO rewersy; 
- 
--- 
--- Name: autorzy_id_seq;​ Type: SEQUENCE; Schema: public; Owner: rewersy 
--- 
- 
-CREATE SEQUENCE autorzy_id_seq 
-    INCREMENT BY 1 
-    NO MAXVALUE 
-    NO MINVALUE 
-    CACHE 1; 
- 
- 
-ALTER TABLE public.autorzy_id_seq OWNER TO rewersy; 
- 
--- 
--- Name: autorzy_id_seq;​ Type: SEQUENCE OWNED BY; Schema: public; Owner: rewersy 
--- 
- 
-ALTER SEQUENCE autorzy_id_seq OWNED BY autorzy.id; 
- 
- 
--- 
--- Name: autorzy_id_seq;​ Type: SEQUENCE SET; Schema: public; Owner: rewersy 
--- 
- 
-SELECT pg_catalog.setval('​autorzy_id_seq',​ 161, true); 
- 
- 
--- 
--- Name: ksiazki; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE ksiazki ( 
-    id integer NOT NULL, 
-    tytul character varying(45) NOT NULL, 
-    rok_wydania integer, 
-    login character varying(45),​ 
-    wydawnictwo character varying(30) 
-); 
- 
- 
-ALTER TABLE public.ksiazki OWNER TO rewersy; 
- 
--- 
--- Name: ksiazki_id_seq;​ Type: SEQUENCE; Schema: public; Owner: rewersy 
--- 
- 
-CREATE SEQUENCE ksiazki_id_seq 
-    INCREMENT BY 1 
-    NO MAXVALUE 
-    NO MINVALUE 
-    CACHE 1; 
- 
- 
-ALTER TABLE public.ksiazki_id_seq OWNER TO rewersy; 
- 
--- 
--- Name: ksiazki_id_seq;​ Type: SEQUENCE OWNED BY; Schema: public; Owner: rewersy 
--- 
- 
-ALTER SEQUENCE ksiazki_id_seq OWNED BY ksiazki.id; 
- 
- 
--- 
--- Name: ksiazki_id_seq;​ Type: SEQUENCE SET; Schema: public; Owner: rewersy 
--- 
- 
-SELECT pg_catalog.setval('​ksiazki_id_seq',​ 169, true); 
- 
- 
--- 
--- Name: napisali; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE napisali ( 
-    id_autora integer NOT NULL, 
-    id_ksiazka integer NOT NULL 
-); 
- 
- 
-ALTER TABLE public.napisali OWNER TO rewersy; 
- 
--- 
--- Name: przetrzymuje;​ Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE przetrzymuje ( 
-    data_wypozyczenia date, 
-    id_ksiazka integer NOT NULL, 
-    login character varying(45) NOT NULL 
-); 
- 
- 
-ALTER TABLE public.przetrzymuje OWNER TO rewersy; 
- 
--- 
--- Name: rezerwuje; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE rezerwuje ( 
-    id_ksiazka integer NOT NULL, 
-    login character varying(45) NOT NULL 
-); 
- 
- 
-ALTER TABLE public.rezerwuje OWNER TO rewersy; 
- 
--- 
--- Name: uzytkownik; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE uzytkownik ( 
-    login character varying(45) NOT NULL, 
-    imie character varying(45) NOT NULL, 
-    nazwisko character varying(45),​ 
-    e_mail character varying(50),​ 
-    haslo character varying(32),​ 
-    budynek character varying(10),​ 
-    pokoj character varying(10) 
-); 
- 
- 
-ALTER TABLE public.uzytkownik OWNER TO rewersy; 
- 
--- 
--- Name: zaprosil; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE zaprosil ( 
-    zaproszony character varying(45) NOT NULL, 
-    login character varying(45) 
-); 
- 
- 
-ALTER TABLE public.zaprosil OWNER TO rewersy; 
- 
--- 
--- Name: zaproszony; Type: TABLE; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-CREATE TABLE zaproszony ( 
-    id integer NOT NULL, 
-    login_polecil character varying(45),​ 
-    hash text, 
-    imie character varying(45),​ 
-    nazwisko character varying(45),​ 
-    email character varying(50) 
-); 
- 
- 
-ALTER TABLE public.zaproszony OWNER TO rewersy; 
- 
--- 
--- Name: zaproszony_id_seq;​ Type: SEQUENCE; Schema: public; Owner: rewersy 
--- 
- 
-CREATE SEQUENCE zaproszony_id_seq 
-    INCREMENT BY 1 
-    NO MAXVALUE 
-    NO MINVALUE 
-    CACHE 1; 
- 
- 
-ALTER TABLE public.zaproszony_id_seq OWNER TO rewersy; 
- 
--- 
--- Name: zaproszony_id_seq;​ Type: SEQUENCE OWNED BY; Schema: public; Owner: rewersy 
--- 
- 
-ALTER SEQUENCE zaproszony_id_seq OWNED BY zaproszony.id;​ 
- 
- 
--- 
--- Name: zaproszony_id_seq;​ Type: SEQUENCE SET; Schema: public; Owner: rewersy 
--- 
- 
-SELECT pg_catalog.setval('​zaproszony_id_seq',​ 58, true); 
- 
- 
--- 
--- Name: id; Type: DEFAULT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE autorzy ALTER COLUMN id SET DEFAULT nextval('​autorzy_id_seq'::​regclass);​ 
- 
- 
--- 
--- Name: id; Type: DEFAULT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ksiazki ALTER COLUMN id SET DEFAULT nextval('​ksiazki_id_seq'::​regclass);​ 
- 
- 
--- 
--- Name: id; Type: DEFAULT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE zaproszony ALTER COLUMN id SET DEFAULT nextval('​zaproszony_id_seq'::​regclass);​ 
- 
- 
--- 
--- Data for Name: autorzy; Type: TABLE DATA; Schema: public; Owner: rewersy 
--- 
- 
--- 
--- Name: autorzy_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY autorzy 
-    ADD CONSTRAINT autorzy_pkey PRIMARY KEY (id); 
- 
- 
--- 
--- Name: ksiazki_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY ksiazki 
-    ADD CONSTRAINT ksiazki_pkey PRIMARY KEY (id); 
- 
- 
--- 
--- Name: napisali_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY napisali 
-    ADD CONSTRAINT napisali_pkey PRIMARY KEY (id_autora, id_ksiazka);​ 
- 
- 
--- 
--- Name: przetrzymuje_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY przetrzymuje 
-    ADD CONSTRAINT przetrzymuje_pkey PRIMARY KEY (id_ksiazka,​ login); 
- 
- 
--- 
--- Name: rezerwuje_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY rezerwuje 
-    ADD CONSTRAINT rezerwuje_pkey PRIMARY KEY (id_ksiazka,​ login); 
- 
- 
--- 
--- Name: uzytkownik_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY uzytkownik 
-    ADD CONSTRAINT uzytkownik_pkey PRIMARY KEY (login); 
- 
- 
--- 
--- Name: zaprosil_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY zaprosil 
-    ADD CONSTRAINT zaprosil_pkey PRIMARY KEY (zaproszony);​ 
- 
- 
--- 
--- Name: zaproszony_pkey;​ Type: CONSTRAINT; Schema: public; Owner: rewersy; Tablespace: ​ 
--- 
- 
-ALTER TABLE ONLY zaproszony 
-    ADD CONSTRAINT zaproszony_pkey PRIMARY KEY (id); 
- 
- 
--- 
--- Name: ksiazki_login_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY ksiazki 
-    ADD CONSTRAINT ksiazki_login_fkey FOREIGN KEY (login) REFERENCES uzytkownik(login) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: napisali_id_autora_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY napisali 
-    ADD CONSTRAINT napisali_id_autora_fkey FOREIGN KEY (id_autora) REFERENCES autorzy(id) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: napisali_id_ksiazka_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY napisali 
-    ADD CONSTRAINT napisali_id_ksiazka_fkey FOREIGN KEY (id_ksiazka) REFERENCES ksiazki(id) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: przetrzymuje_id_ksiazka_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY przetrzymuje 
-    ADD CONSTRAINT przetrzymuje_id_ksiazka_fkey FOREIGN KEY (id_ksiazka) REFERENCES ksiazki(id) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: przetrzymuje_login_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY przetrzymuje 
-    ADD CONSTRAINT przetrzymuje_login_fkey FOREIGN KEY (login) REFERENCES uzytkownik(login) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: rezerwuje_id_ksiazka_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY rezerwuje 
-    ADD CONSTRAINT rezerwuje_id_ksiazka_fkey FOREIGN KEY (id_ksiazka) REFERENCES ksiazki(id) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: rezerwuje_login_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY rezerwuje 
-    ADD CONSTRAINT rezerwuje_login_fkey FOREIGN KEY (login) REFERENCES uzytkownik(login) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: zaprosil_login_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY zaprosil 
-    ADD CONSTRAINT zaprosil_login_fkey FOREIGN KEY (login) REFERENCES uzytkownik(login) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
- 
--- 
--- Name: zaproszony_login_polecil_fkey;​ Type: FK CONSTRAINT; Schema: public; Owner: rewersy 
--- 
- 
-ALTER TABLE ONLY zaproszony 
-    ADD CONSTRAINT zaproszony_login_polecil_fkey FOREIGN KEY (login_polecil) REFERENCES uzytkownik(login) ON UPDATE RESTRICT ON DELETE RESTRICT; 
- 
-</​code>​ 
- 
-==== -. Słownki danych. ==== 
-=== autorzy: === 
-  * Klucz podstawowy (id) 
-  * **__id__** - typ: serial, niepusty, **Klucz podstawowy tabeli autorzy** 
-  * **__imie__** - typ: character varying(45),​ **Imię autora książki** 
-  * **__nazwisko__** - typ: character varying(45),​ **Nazwisko autora książki** 
- 
- 
-=== ksiazki: === 
-  * Klucz podstawowy (id) 
-  * **__id__** - typ: serial, niepusty, **Klucz podstawowy tabeli ksiażki** 
-  * **__tytul__** - typ: character varying(45),​ ** Tytuł książki, która jest dostępna w systemie** 
-  * **__rok_wydania__** - typ: integer, **Rok wydania książki** 
-  * **__login__** - typ: character varying(45),​ klucz obcy - tabela '​uzytkownik'​ **Login użytkownika,​ który jest właścicielem książki** 
-  * **__wydawnictwo__** - typ: character varying(30),​ **Wydawnictwo,​ które wydało książkę** 
- 
-=== napisali: === 
-  * klucz podstawowy: (id_autora, id_ksiazka) 
-  * **__id_autora__** - typ: integer, niepusty, klucz obcy z tabeli '​autorzy',​ **Identyfikator autora** 
-  * **__id_ksiazka__** - typ: integer, niepusty, klucz obcy z tabeli '​ksiazki',​ **Identikator książki** 
- 
-=== uzytkownik: === 
-  * Klucz podstawowy (login) 
-  * **__login__** - typ: character varying(45),​ niepusty, Klucz podstawowy ** ** 
-  * **__imie__** - typ: character varying(45),​ niepusty, **Imię użytkownika** 
-  * **__nazwisko__** - typ: character varying(45),​ **Nazwisko użytkownika** 
-  * **__e_mail__** - typ: character varying(50),​ **E-mail użytkownika** 
-  * **__haslo__** - typ: character varying(32),​ ** hasło użytkownika do systemu, trzymane w bazie w postaci zakodowanej** 
-  * **__budynek__** - typ: character varying(10),​ **Nazwa budynku AGH, w którym pracuje użytkownik systemu** 
-  * **__pokoj__** - typ: character varying(10),​ **Pokój na uczelni AGH, gdzie użytkownik pracuje użytkownika systemu** 
-  
-=== przetrzymuje:​ ===    
-  * podstawowy tabeli to para (id_ksiazka,​ login) 
-  * **__data_wypozyczenia__** - typ: date, **Data wypożyczenia książki** 
-  * **__id_ksiazka__** - typ: integer, niepusty, Klucz obcy z tabeli '​ksiazki'​ **Identyfikator książki, która została pożyczona** 
-  * **__login__** - typ: character varying(45),​ niepusty, klucz obcy z tabeli '​uzytkownik'​ **Login użytkownika,​ który wypożyczył daną książkę** 
- 
- 
-=== rezerwuje: === 
-  * Klucz podstawowy (id_ksiazka,​ login) 
-  * **__id_ksiazka__** - typ: integer, niepusty, **Id zarezerwowanej książki** 
-  * **__login__** - typ: character varying(45),​ niepusty, **Login użytkonika,​ który książkę zarezerwował** 
- 
-=== zaprosil: === 
-  * Klucz podstawowy (zaproszony). Tabela w celu prowadzenia drzewa zaproszeń, tzn "​kto-kogo zaprosił"​ 
-  * **__zaproszony__** - typ: character varying(45),​ niepusty, **Login użytkownika zaproszonego** 
-  * **__login__** - typ: character varying(45),​ **Login użytkownika,​ który zaproszał** 
- 
-=== zaproszony: === 
-  * Klucz podstawowy (id). Tabela to rejestracja użytkowników zaproszonych (tzn. tych do których został wysłany email z zaproszeniem) ale jeszcze nie zarejestrowanych 
-  * **__id__** - typ: serial, **Klucz podstawowy** 
-  * **__login_polecil__** - typ: character varying(45),​ **Login użytkownika,​ który polecił nowego użytkownika** 
-  * **__hash__** - typ: text, **unikalny, automatycznie generowany kod dołączany to URL zawierającego formularzem rejestracyjnym** 
-  * **__imie__** - typ: character varying(45),​ **Imię zaproszonej osoby** 
-  * **__nazwisko__** - typ: character varying(45),​ **Nazwisko zaproszonej osoby** 
-  * **__email__** - typ: character varying(50),​ **E-mail zaproszonej osoby** 
- 
-==== -. Analiza zależności funkcyjnych i normalizacja tabel. ==== 
- 
-Wszystkie tabele bazy danych spełniają co najmniej normę 3NF. Nie przewidujemy więc normalizacji. 
-Jedyną wątpliwością jaka może się pojawić przy dokładniejszym przyjrzeniu się strukturze bazy danych dotyczy tabeli '​uzytkownik'​. 
-Wydaje się, że kolumny "​pokoj"​ i "​budynek"​ są redundantne. Możnaby stworzyć tabelę '​Miejsca_pracy'​(Kolumny:​ pokoj i budynek) oraz relację jeden-do-wielu pomiędzy tabelą '​uzytkownik'​ a tabelą '​miejsca_pracy'​. Byłoby to korzystne pod jednym względem: użytkownicy systemu mogliby wpisać do swojego profilu wiele miejsc pracy, jako że niektórzy pracownicy AGH mają do dyspozycji więcej niż jeden pokój. Postanowiliśmy jednak zrezygnować z tego udogodnienia,​ zezwalając użytkownikom systemu REWERSY na wpisanie tylko jednej lokalizacji. Przez ten prosty zabieg nasz system stał się bardziej przejrzysty,​ a baza danych - mniej skomplikowana 
- 
-==== -. Denormalizacja struktury tabel. ==== 
-==== -. Projektowanie operacji na danych. ==== 
pl/dydaktyka/sbd/2009/projekty/rewersy/logiczny.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0